ASP.NET MVC to React Migration Services

Let's Talk
  • MODERNIZE WITHOUT DOWNTIME

    Replace Razor views with React one module at a time while your ASP.NET MVC application remains in production. Get an approved migration plan and a production-ready pilot before moving into incremental releases with minimal disruption.

  • SHIP FASTER, SAFER

    Use controlled CI/CD pipelines with automated rollback and end-to-end monitoring to release changes more safely. Track each release against defined performance metrics such as load time, responsiveness, and API latency.

  • SECURITY AND SCALABILITY BY DESIGN

    Use Microsoft Entra ID and OpenID Connect to manage authentication and access across the React front end and .NET backend. Version your APIs, secure token handling, and incorporate applicable security and privacy requirements into the delivery process.

Why It Matters

Modernization doesn't mean starting over.

We evolve your ASP .NET MVC React stack one module at a time — keeping your business running while preparing it for what’s next.

In modern product lifecycles, delivery speed is no longer a competitive advantage — it’s the cost of staying in the game. Frequent releases protect momentum, but only when they don’t trade safety for speed. Chaos is the fate of any system without reliable delivery tooling: releases slow, rollbacks turn manual, metrics fade, and performance erodes silently.

A strong delivery and observability layer changes that dynamic.

Every deploy becomes an experiment with instant feedback; every regression is caught before users feel it. For hybrid stacks like MVC and React, or more advanced ASP .NET Core MVC with React implementations, this feedback loop is what keeps complex systems predictable.

Teams building React JS with MVC architectures rely on data-driven SLOs to stay aligned with what users actually experience, not on vanity metrics or guesswork.

This approach keeps MVC React applications resilient, traceable, and continuously improving.

This foundation sets a rhythm: build, measure, improve, repeat. When your engineering pipeline moves at the same speed as your business decisions, innovation stops being risky — it becomes routine.

In essence: delivery discipline is how technology earns trust again — by proving reliability, one release at a time.

Modernizing unstable systems? Launching new products?

We build development environments that deliver enterprise-grade scalability, compliance-driven security, and control baked in from day one.

Check Our Portfolio
Our Edge

Why choose Devox Software?

  • Modernize
  • Build
  • Innovate

Is your ASP.NET MVC application slowing down product development?

We modernize the front end with React to improve performance and make future changes easier.

Are slow releases and an outdated user experience affecting engagement?

We modernize the user interface to improve performance, usability, and release speed.

Does your legacy architecture make it harder to scale or add new features?

We modernize the stack so your team can release changes with less friction.

Still building on ASP.NET MVC?

We replace legacy front-end workflows with a React architecture that supports faster, more manageable releases.

Tired of patching old views instead of creating new value?

We rebuild the front end in React to shorten release cycles and simplify future updates.

Your platform works — but does it feel like it's stuck in another decade?

We rebuild the front end in React so it can support future features and higher traffic.

Does your ASP.NET MVC app slow down new ideas?

We rebuild the front end in React to support faster releases and easier feature development.

Hard to plug in AI or modern features?

We remove legacy front-end constraints that make modern integrations and new features difficult to implement.

Is legacy maintenance taking time away from new product development?

We modernize the platform so your team can build new features more efficiently.

What We Offer

Services We Provide

  • Technical Audit & Migration Plan

    Whether you aim for a gradual strangler approach or a complete rebuild, every step is designed to deliver working results without downtime.

    • Codebase inventory. We catalog the ASP.NET MVC solution and expose coupling points: controllers, views, filters, helpers, partials, and shared services. For hybrid stacks like ASP NET and React, we trace both client and server boundaries to ensure a seamless evolution path without rewriting stable modules.
    • UX & performance baseline. We capture real-user and synthetic metrics for key flows: TTFB, LCP, INP/CLS, p95 latency, render-blocking assets, and bundle size. Server timings and MVC view composition are profiled to pinpoint bottlenecks that a React ASP .NET Core MVC setup can resolve through partial hydration and smart caching.
    • Architecture options. We evaluate three migration paths against business constraints: hybrid, strangler, or full reconstruction. In MVC with React scenarios, we define SPA vs SSR (React/Next.js) per domain, outline API access (direct REST/GraphQL vs BFF), state strategy (Redux Toolkit, Zustand, or server-state via React Query/SWR), and caching layers (client/server/edge).
    • Risk, effort, and phased plan. We size modules, list external dependencies, and grade risks (security, data integrity, SEO, performance, compliance). For React with ASP .NET Core MVC migrations, we quantify complexity of shared authentication, routing, and legacy data flow integration, ensuring predictability at every phase.
    • Acceptance criteria. ou receive a complete modernization plan — priorities, architecture outline, performance goals, and release roadmap. Each milestone is validated through delivery checkpoints typical for Dot .Net React ecosystems, aligning engineering velocity with business KPIs.

    Value in one line: this plan converts a legacy tangle into a controlled program of change that protects today’s revenue while setting a higher bar for the product your name stands behind.

  • Target Architecture and API Contracts

    Outcome you get: a signed target design that defines rendering, boundaries, identity, contracts, and caching — with non-functional guarantees wired into every layer.

    • Rendering & delivery model. We decide SPA vs SSR per domain with a bias toward measurable gains: React SPA for app-like flows, Next.js with Server Components/ISR for SEO and fast TTFB. In hybrid React and MVC systems, we ensure the rendering pipeline stays predictable, minimizing hydration overheads and preserving layout stability.
    • Front/back separation. We draw the seam between UI and services, then choose BFF or direct API. This balance is crucial in React with MVC transitions, where clear contracts prevent duplication between view models and API responses.
    • Identity, AuthN/Z & session model. For organizations using ASP .NET MVC Active Directory or other SSO integrations, we design a secure identity layer that extends seamlessly into React-based frontends, ensuring unified user context and zero-friction login experiences.
    • State, data-fetching. We define state per slice: Redux Toolkit for domain logic, Zustand for local UI, React Query/SWR for async data. In MVC ReactJS architectures, this orchestration gives teams full visibility into component lifecycles and server-state synchronization.
    • Caching strategy. We plan caching across client, server, and edge with coherent TTL/ETag policy, revalidation triggers, and stale-while-revalidate. This architecture pattern scales naturally toward ASP .NET Core MVC React, combining server stability with modern delivery speed.

    Each architecture decision is reviewed, every API contract approved, and all performance goals tracked through live alerts. You gain a system built on clear agreements, measurable results, and a delivery process that keeps quality and speed perfectly aligned.

  • Pilot Vertical Slice

    Outcome you get: a working, production-grade flow proving the migration path — from legacy MVC through modern APIs to React — with real metrics and automation in place.

    • Scope definition. We take one full business scenario that runs through UI, API, and data layers — for example, user onboarding, checkout, or reporting flow. This vertical cut exposes integration and performance realities early, showing where migration friction hides. In practice, we treat each MVC .NET example as a candidate for modular uplift, analyzing its coupling depth and reusability potential.
    • Front-end pilot build. Our team lifts the selected module into React, implements the base design system, and enables essentials: routing, error boundaries, localization, and telemetry. We use this stage to demonstrate the real difference between React vs MVC in development velocity and runtime performance.
    • API extraction & integration. We decouple the corresponding MVC controller into a standalone ASP.NET Core Web API, connect it to React, and secure it via OAuth2/OIDC. This validated bridge serves as a playbook for teams comparing MVC vs React architectures under real-world conditions.
    • Automation & measurement. We configure CI/CD for both layers, enabling automated builds, testing, and performance tracking. With React with .NET, telemetry and observability are unified end-to-end, proving that modernization adds speed and resilience instead of risk.
    • Scale preparation. The pilot outcome defines the migration playbook, coding standards, architecture templates, CI/CD patterns, and acceptance criteria — once KPIs are met. Your internal team or our extended unit can then reproduce this model across modules safely.

    You can delegate the entire pilot to our team — architecture, React, APIs, automation, and monitoring. We deliver a fully functional, measurable flow your engineers can confidently build on.

  • Authentication and Access Control

    Outcome you get: hard-sealed sessions between React and ASP.NET Core, single sign-on that feels invisible, and a release pipeline that blocks risks before code reaches users.

    • Identity & SSO integration. We connect your system to a secure, modern single sign-on flow that works across all environments. Whether you plan to convert ASP.NET MVC to React app or extend an existing hybrid setup, identity flows stay unified — authentication, tokens, and claims move seamlessly across both layers.
    • Session architecture & CSRF posture. We design a safe, consistent session model that protects user data and keeps integrations stable. For projects running ASP.NET MVC with React frontend, sessions and CSRF tokens are synchronized, maintaining secure continuity between server and client.
    • Configuration hardening. We secure every layer of your system — credentials, keys, and configurations — with strict access control and automated rotation. Teams that integrate React into ASP.NET MVC benefit from shared configuration templates and policy enforcement across pipelines.
    • AppSec Pipeline. We build security directly into your delivery process. Every dependency, container, and configuration is automatically scanned, with issues tracked and resolved within clear SLAs. This is the same rigor we apply in our ASP.NET Core React migration guide, ensuring modernization without regression.
    • Threat modeling, headers & CSP. We strengthen your application against real-world threats before they reach production. With React with .NET backend, we validate every endpoint, apply secure headers, and enforce CSP rules that keep your user sessions sealed and auditable.

    Your users sign in effortlessly, your data remains protected, and every release clears objective gates that safeguard the product behind your brand.

  • Incremental UI Migration

    Outcome you get: predictable, repeatable throughput for migrating MVC pages into a typed React stack — with a clockwork cadence, quality gates, and performance control.

    • Component backlog. We turn your existing screens and modules into a clear, structured migration plan. This becomes the best way to convert MVC project to SPA, ensuring each migration step adds measurable business value while keeping dependencies visible.
    • Design system & storybook. We stand up a design system with tokens, theming, and accessibility baked in. Storybook hosts components with examples that double as living specs. This foundation streamlines React JS integration with ASP.NET Core, giving both frontend and backend teams a shared visual language and stable contract.
    • Engineering patterns & scaffolds. We enforce container/presentational split, data-fetching contracts, error boundaries, i18n hooks, and layout primitives. Code generators and templates remove boilerplate from each migration step. Projects that migrate legacy ASP.NET app to React benefit from standardized patterns and automation, ensuring consistent quality across all modules.
    • Codemods & automation. We automate the repetitive parts of migration so your team focuses on progress, not manual fixes. Using the ASP.NET Core React template as a baseline, our engineers codify safe defaults for routing, build setup, and performance tracking.
    • Quality control & throughput ops. We implement a quality process that keeps delivery fast, predictable, and consistent. Each release is tested automatically, performance stays within target, and progress is tracked in real time, giving you confidence that every update meets both speed and stability goals.

    You get a repeatable migration engine that transforms legacy interfaces into modern, high-performing React screens. Progress stays measurable, quality stays consistent, and every release moves your product forward at a predictable pace without performance loss.

  • API Modernization

    Outcome you get: stable, versioned service contracts extracted from MVC logic — designed for scale, governed by tests, and measurable by performance SLOs.

    • Service boundary design. We lift business logic out of MVC controllers and views into ASP.NET Core Web API or GraphQL services. Boundaries are redrawn around real domain capabilities, eliminating UI-coupled code. For teams that use React in existing ASP.NET MVC project, this ensures the new API layer stays compatible while removing UI coupling.
    • Contract definition & validation. Each endpoint is defined with typed DTOs, input validation, and consistent error semantics. In projects that replace Razor views with React, we preserve route structures and data bindings, allowing a seamless switch from server-rendered pages to dynamic components.
    • Cross-cutting architecture. We embed versioning, API gateway policies, rate-limiting, and caching strategies across client/server/edge. With proper React JS setup with Visual Studio, developers can extend APIs, test endpoints, and manage migrations without breaking existing build pipelines.
    • Integration assets. We auto-generate OpenAPI/GraphQL specs, publish client SDKs, and integrate contract testing into CI/CD. Each merge verifies backward compatibility and latency budgets. Teams following a React with C# backend tutorial gain a predictable integration workflow — same models, same endpoints, shared type safety.
    • Performance benchmarks. Every key endpoint carries SLOs for availability, p95 latency, and error rate. Dashboards visualize real-time compliance; regression alerts feed back into CI gates. We handle monitoring dashboards, SLO/SLI definitions, regression alerts, and readiness probes.

    You gain a stable, predictable API layer that keeps development moving without risk. Every change is verified, fully compatible, and tracked against clear performance goals, so your teams deliver new React features faster while the backend remains steady and reliable.

  • Deployment, Operations, and Performance

    Outcome you get: a release pipeline engineered for frequency, traceability, and recovery, where every deployment is observable, reversible, and measured by real user impact.

    • CI/CD foundation. We design delivery pipelines that support both legacy and modern stacks — whether you’re moving from ASP.NET MVC to React or introducing containerized builds for greenfield apps. Your teams ship updates faster, with fewer risks and full visibility into what goes live and when.
    • Deployment automation. We design delivery pipelines that support both legacy and modern stacks — whether you’re optimizing existing workflows in ASP.NET MVC vs React environments or introducing containerized builds for greenfield apps. Your teams ship updates faster, with fewer risks and full visibility into what goes live and when.
    • Edge delivery & caching. Frontend bundles deploy through CDN and edge nodes. For clients planning how to host React app in IIS, we configure optimized routing, caching headers, and health checks that keep static assets fast and secure even on traditional infrastructure.
    • Observability & feedback loops. We integrate centralized logs, metrics, and traces — Grafana, Prometheus, or Azure App Insights dashboards. These practices are foundational when you modernize ASP.NET MVC to SPA, ensuring smooth transitions without downtime or regression.
    • Performance governance. We define SLOs for key transactions, automate alerting on p95 latency and error budgets, and track operational metrics. We handle SLO/SLI models, alert routing, rollback scripts, and before/after performance reporting.

    You gain a delivery system designed for confidence and control. Every release is automated, tracked, and instantly reversible. Performance and reliability stay on target, so your product moves forward quickly while users experience only consistency and speed — never disruption.

Our Process

How We Make Modernization Predictable

Modernization projects fail when the scope, ownership, and success criteria remain unclear. We use a structured process with clear ownership, defined deliverables, and measurable checkpoints. Each stage has a defined outcome, an owner, and an agreed review point. Your team sets the priorities while we manage day-to-day delivery.

01.

01. Audit & Discovery

We assess the application architecture, dependencies, performance, and migration risks. AI-assisted analysis helps us identify which components to modernize, retain, or replace. This stage identifies practical entry points for introducing React into the existing ASP.NET MVC application. The output is a proposed migration scope, technical approach, and roadmap for stakeholder review.

02.

02. Target Architecture Design

We define the target architecture, including the React front end, .NET APIs, authentication model, and performance targets. We agree on the architecture, API contracts, and technical standards before implementation begins to reduce avoidable rework. We document how the React front end communicates with the .NET APIs, including routing, data fetching, authentication, and error handling.

03.

03. Pilot Vertical Slice

We build one production-ready feature on the target architecture. The pilot validates the architecture, migration approach, and performance targets before the broader rollout. Your team can compare the pilot against the current baseline before approving the broader rollout.

04.

04. Incremental Migration & Automation

We use a repeatable process for migrating modules incrementally. Each module is migrated, tested, and released independently to limit production disruption. Automated scripts and CI/CD pipelines improve consistency and provide clearer visibility into each release.

05.

05. Delivery & Support

We complete the migration with agreed performance, security, and monitoring controls in place. We review the agreed KPIs, document remaining risks, and hand over a maintainable React application with supporting performance data. We manage the migration work while keeping your team informed through regular technical reviews and progress reports.

  • 01. Audit & Discovery

  • 02. Target Architecture Design

  • 03. Pilot Vertical Slice

  • 04. Incremental Migration & Automation

  • 05. Delivery & Support

Benefits

Our Benefits

01

Predictable Modernization

We manage ASP.NET MVC migrations through a structured process with defined metrics, reviewed deliverables, and regular feedback. We use automation and CI/CD throughout the migration and track progress against agreed metrics. Your technical leaders get a repeatable delivery process with progress tracked against agreed metrics.

02

Architecture Designed to Scale

We design the target architecture around clear API contracts, centralized authentication, and an appropriate caching strategy. Key architectural decisions are documented and reviewed against agreed service-level objectives. We review security, performance, and availability throughout delivery and apply the tools required by the target architecture.

03

Long-Term Delivery Capacity

Modernization should leave your team with a more sustainable development and release process. We provide reusable coding standards, architecture templates, CI/CD patterns, and quality controls that your team can maintain after handoff. The goal is to reduce long-term vendor dependency and give your team the tools to maintain and extend the platform.

Case Studies

Our Latest Works

View All Case Studies
Blackcurrant: Building a B2B Hydrogen Marketplace Blackcurrant: Building a B2B Hydrogen Marketplace

Blackcurrant: AI-Powered B2B Hydrogen Marketplace with Real-Time Carbon Tracking

An AI-powered B2B marketplace for hydrogen trading built on scalable cloud infrastructure.

Additional Info

Core Tech:
  • Angular
  • TypeScript
  • .NET Core
  • Node.js
  • AWS
  • NLP-powered AI engine
  • Python for machine learning models
Country:

USA USA

SpotDraft: A SaaS for an End-to-End Contract Automation Platform SpotDraft: A SaaS for an End-to-End Contract Automation Platform

SpotDraft: AI-Powered SaaS Platform for Contract Automation

A SaaS platform that reduces legal workload and accelerates contract cycles through automation and integrations.

Additional Info

Core Tech:
  • Next.js
  • Python with FastAPI
  • Golang
  • Amazon S3
  • OpenAI GPT
  • Anthropic Claude
  • OAuth 2.0
  • DocuSign API
Country:

USA USA

Green Space Pro: Franchise Management Platform for a Highly-Regulated Industry Green Space Pro: Franchise Management Platform for a Highly-Regulated Industry

Green Space Pro: Franchise Management Platform for a Highly-Regulated Industry

A centralized digital workspace for cannabis franchise vendors and regulators to manage operations, ensure compliance, and streamline regulatory communication in a highly regulated industry.

Additional Info

Core Tech:
  • Svelte.js
  • Node.js
  • REST API
  • CI/CD
  • Progressive Web App (PWA)
  • manual and automated QA
Country:

USA USA

Testimonials

Testimonials

Carl-Fredrik Linné                                            Sweden

The solutions they’re providing is helping our business run more smoothly. We’ve been able to make quick developments with them, meeting our product vision within the timeline we set up. Listen to them because they can give strong advice about how to build good products.

Darrin Lipscomb Darrin Lipscomb
Darrin Lipscomb United States

We are a software startup and using Devox allowed us to get an MVP to market faster and less cost than trying to build and fund an R&D team initially. Communication was excellent with Devox. This is a top notch firm.

Daniel Bertuccio Daniel Bertuccio
Daniel Bertuccio Australia

Their level of understanding, detail, and work ethic was great. We had 2 designers, 2 developers, PM and QA specialist. I am extremely satisfied with the end deliverables. Devox Software was always on time during the process.

Trent Allan Trent Allan
Trent Allan Australia

We get great satisfaction working with them. They help us produce a product we’re happy with as co-founders. The feedback we got from customers was really great, too. Customers get what we do and we feel like we’re really reaching our target market.

Andy Morrey                                            United Kingdom

I’m blown up with the level of professionalism that’s been shown, as well as the welcoming nature and the social aspects. Devox Software is really on the ball technically.

Vadim Ivanenko Vadim Ivanenko
Vadim Ivanenko Switzerland

Great job! We met the deadlines and brought happiness to our customers. Communication was perfect. Quick response. No problems with anything during the project. Their experienced team and perfect communication offer the best mix of quality and rates.

Jason Leffakis Jason Leffakis
Jason Leffakis United States

The project continues to be a success. As an early-stage company, we're continuously iterating to find product success. Devox has been quick and effective at iterating alongside us. I'm happy with the team, their responsiveness, and their output.

John Boman John Boman
John Boman Sweden

We hired the Devox team for a complicated (unusual interaction) UX/UI assignment. The team managed the project well both for initial time estimates and also weekly follow-ups throughout delivery. Overall, efficient work with a nice professional team.

Tamas Pataky Tamas Pataky
Tamas Pataky Canada

Their intuition about the product and their willingness to try new approaches and show them to our team as alternatives to our set course were impressive. The Devox team makes it incredibly easy to work with, and their ability to manage our team and set expectations was outstanding.

Stan Sadokov Stan Sadokov
Stan Sadokov Estonia

Devox is a team of exepctional talent and responsible executives. All of the talent we outstaffed from the company were experts in their fields and delivered quality work. They also take full ownership to what they deliver to you. If you work with Devox you will get actual results and you can rest assured that the result will procude value.

Mark Lamb Mark Lamb
Mark Lamb United Kingdom

The work that the team has done on our project has been nothing short of incredible – it has surpassed all expectations I had and really is something I could only have dreamt of finding. Team is hard working, dedicated, personable and passionate. I have worked with people literally all over the world both in business and as freelancer, and people from Devox Software are 1 in a million.

FAQ

Frequently Asked Questions

  • How can I migrate an existing ASP.NET MVC application to React without rewriting the entire system?

    You can introduce React incrementally without replacing the entire application at once. Most ASP.NET MVC migrations to React work best as incremental modernization projects rather than full rewrites. Existing applications often contain business logic and workflows that remain valuable. The main constraint is often tight coupling between the user interface, business logic, and data access layers.

    We analyze code dependencies, identify stable components, and prioritize the parts that should be modernized first. We identify reusable business logic and separate it from tightly coupled presentation and infrastructure code.

    We migrate, test, and release each module independently so the application can remain operational during the transition. This incremental approach avoids a full rewrite and allows the product roadmap to continue during migration.

  • What's the recommended backend structure when decoupling ASP.NET MVC into an API for React?

    The goal is to separate reusable business logic from the MVC presentation layer and expose it through stable APIs. Many ASP.NET MVC applications contain reusable business logic that remains tightly coupled to controllers and server-rendered views.

    We trace dependencies and data flows to identify practical service boundaries.  We move reusable business logic into domain-oriented services exposed through REST or GraphQL APIs where appropriate.We version and validate API contracts before migrating the next feature.

    The result is a more modular backend with clearer service boundaries, better monitoring, and less coupling to the presentation layer.

    Learn also how our AngularJS to Angular Migration Services address similar modernization challenges.

  • How can I reuse my existing models and controllers in a React-based architecture?

    Start by identifying which models, validation rules, and business logic can be reused safely. Existing models and controllers may contain reusable domain logic, but they often need to be separated from presentation concerns.

    We use code analysis to identify reusable models and validation logic, then expose them through DTOs and modular APIs. This gives the React front end stable API contracts while preserving validated business logic.

    You retain proven business logic while replacing the presentation layer with a modern React interface.

  • What are the main performance pitfalls when migrating from ASP.NET MVC to React, and how can I avoid them?

    Common performance issues include excessive API requests, oversized JavaScript bundles, and high client-to-server latency. Moving rendering and state management to the browser can introduce new performance bottlenecks if the front end is not designed carefully.

    We establish performance baselines for metrics such as TTFB, LCP, INP, and CLS, then apply performance budgets to each migrated module.Each React module must meet or exceed the baseline before it ships. Depending on the architecture, we may use caching, compression, code splitting, and selective hydration to improve load performance.

    During delivery, performance budgets are enforced slice by slice. Each new React module must meet or exceed the baseline before it ships. The goal is to prevent measurable regressions and improve front-end performance against the agreed baseline.

  • What are the best practices for authentication and authorization with an ASP.NET backend and a React front end?

    Authentication and authorization should be designed as core parts of the application architecture. In applications that use Active Directory or token-based authentication, communication between the front end and backend must be secure and traceable.

    We typically use OAuth 2.0 and OpenID Connect with Microsoft Entra ID or another compatible identity provider. When appropriate, we store short-lived tokens in secure, HttpOnly cookies. We include automated tests for login, token renewal, logout, and authorization flows in the CI/CD pipeline. The result is an authentication model with clear access rules, automated testing, and operational monitoring. This approach helps reduce session-related errors, improve access control, and simplify authentication troubleshooting.

     

Book a call

Want to Achieve Your Goals? Book Your Call Now!

Contact Us

We Fix, Transform, and Skyrocket Your Software.

Tell us where your system needs help — we’ll show you how to move forward with clarity and speed. From architecture to launch — we’re your engineering partner.

Book your free consultation. We’ll help you move faster, and smarter.

Let's Discuss Your Project!

Share the details of your project – like scope or business challenges. Our team will carefully study them and then we’ll figure out the next move together.







    By sending this form I confirm that I have read and accept the Privacy Policy

    Thank You for Contacting Us!

    We appreciate you reaching out. Your message has been received, and a member of our team will get back to you within 24 hours.

    In the meantime, feel free to follow our social.


      Thank You for Subscribing!

      Welcome to the Devox Software community! We're excited to have you on board. You'll now receive the latest industry insights, company news, and exclusive updates straight to your inbox.