Stacks: deploy guides for Node, Python, PHP and Java
Deploy guides for every stack ox runs: React, Next.js, Django, Rails, Laravel, Spring Boot and more, each with its plan and proof, filterable by language.
Last updated 2026-10-09
On this page
Pick your stack to deploy it to your own VPS with ox. Each guide shows the plan ox check prints for a minimal repo of that stack, the ox.toml if you need one, the variables to set, and the messages you see when a deploy fails. The badge says how far it is proven.
ox check, which says Ready to deploy. for every one.- Tested on a real server: an app of this stack deployed and served on a real Ubuntu server in ox's test lab.
- Plan verified, real-server test pending: ox's tests pin the plan it makes for the stack, and no real-server deploy is recorded yet.
All stack guides
Filter by language, or read by kind of app. Most repos need no ox.toml at all, so the Quickstart is the shortest path for any of them.
Static sites and single-page apps
ox runs the build and Caddy serves the files over HTTPS. No app process runs.
- Deploy a static siteDeploy a Vite single-page app, an Astro site or plain HTML to your own VPS. Caddy serves the files over HTTPS, no app process, with a tiny ox.toml or none.Tested on a real server
- React with ViteDeploy a React app built with Vite to your own VPS with no Dockerfile: ox runs the build from your lockfile and Caddy serves dist over HTTPS, no ox.toml.Tested on a real server
- Create React AppDeploy a Create React App project to your own VPS: ox runs react-scripts build and Caddy serves the build folder over HTTPS. No Docker, no ox.toml.Tested on a real server
- Vue CLIDeploy a Vue CLI app to your own VPS: ox installs from yarn.lock, runs your build, and Caddy serves dist over HTTPS. The plan comes from the repo alone.Tested on a real server
- AngularDeploy an Angular single-page app to your own VPS: ox reads the output folder from angular.json, runs ng build, and Caddy serves it, with no Docker.Tested on a real server
- Next.js static exportDeploy a Next.js app with output: 'export' to your own VPS: ox runs next build and Caddy serves the out folder over HTTPS, with no Node process running.Tested on a real server
- GatsbyDeploy a Gatsby site to your own VPS: ox reads gatsby-config.js, runs gatsby build from package.json, and Caddy serves the public folder over HTTPS.Tested on a real server
- DocusaurusDeploy a Docusaurus documentation site to your own VPS: ox runs the build from package.json and Caddy serves the build folder over HTTPS, no ox.toml.Tested on a real server
- AstroDeploy an Astro static site to your own VPS: ox reads astro.config.mjs, runs astro build, and Caddy serves dist over HTTPS with no app process running.Tested on a real server
- SvelteKit staticDeploy a SvelteKit site built with adapter-static to your own VPS: ox reads the pages folder from svelte.config and Caddy serves it over HTTPS, no Docker.Tested on a real server
- React Router SPADeploy a React Router 7 app with ssr: false to your own VPS: ox reads react-router.config.ts, builds it, and Caddy serves build/client over HTTPS, no Node.Tested on a real server
Server-rendered JavaScript apps
ox builds the app and runs its server under systemd, with Caddy in front.
- Deploy Next.jsSelf-host Next.js on your own VPS without Vercel or Docker: next start, a health check, PostgreSQL, Prisma migrations and the image cache, in one ox.toml.Tested on a real server
- Angular SSRDeploy an Angular app with server-side rendering to your own VPS: ox builds it, runs the server.mjs Angular writes under systemd, and Caddy adds HTTPS.Tested on a real server
- Astro SSRDeploy an Astro app with the @astrojs/node adapter to your own VPS: ox builds it, runs dist/server/entry.mjs under systemd, with Caddy and HTTPS in front.Tested on a real server
- SvelteKitDeploy a SvelteKit app with adapter-node to your own VPS: ox reads svelte.config.js, builds it, runs node build under systemd, and Caddy adds HTTPS.Tested on a real server
- NuxtDeploy a Nuxt app with server-side rendering to your own VPS: ox runs nuxt build, starts .output/server/index.mjs under systemd, and Caddy adds HTTPS.Tested on a real server
- React RouterDeploy a React Router 7 app (the Remix successor) with server rendering to your own VPS: ox builds it, runs npm start under systemd, and Caddy adds HTTPS.Tested on a real server
- SolidStartDeploy a SolidStart app to your own VPS: ox reads the Node version from package.json, runs the build, starts it under systemd and adds HTTPS with Caddy.Tested on a real server
- Qwik CityDeploy a Qwik City app with its Express adapter to your own VPS: ox finds the adapter, builds it, runs npm run serve under systemd, and Caddy serves HTTPS.Tested on a real server
- Deno FreshDeploy a Deno Fresh app to your own VPS: ox installs Deno 2, runs deno install and deno task build, then deno serve under systemd with Caddy for HTTPS.Tested on a real server
Full-stack web frameworks
The framework's own server, its migrations and its database, from the repo.
- Deploy DjangoDeploy Django to your own VPS without Docker: gunicorn, PostgreSQL, migrations, static files served by Caddy, uploads kept across deploys, in one ox.toml.Tested on a real server
- Deploy RailsDeploy Rails 8 to your own VPS without Docker or Kamal: precompiled Ruby, gems, assets, db:prepare and Solid Cache, Queue and Cable on PostgreSQL.Tested on a real server
- Deploy LaravelDeploy Laravel to your own Ubuntu VPS: PHP from apt, Composer, a Vite build, PostgreSQL, a queue worker and the scheduler every minute, from one ox.toml.Tested on a real server
- SymfonyDeploy Symfony to your own VPS: ox runs composer install for prod, Doctrine migrations and FrankenPHP under systemd, and asks for APP_SECRET first.Tested on a real server
- Plain PHPDeploy a plain PHP site to your own VPS: ox finds index.php, installs FrankenPHP, and serves the site under systemd behind Caddy with HTTPS, no ox.toml.Tested on a real server
- PhoenixDeploy an Elixir Phoenix app to your own VPS: ox builds a mix release with its assets, runs Release.migrate, starts it under systemd, and adds PostgreSQL.Tested on a real server
APIs, backends and workers
A long-running server or worker, with the database it uses.
- Deploy a Node APIDeploy an Express, Fastify or other Node.js API to your own VPS: start script, lockfile install, migrations, PostgreSQL and Redis, from one short ox.toml.Tested on a real server
- Deploy FastAPIDeploy FastAPI to your own VPS: ox detects the uvicorn start command, installs from uv.lock, runs Alembic migrations, and adds PostgreSQL from one ox.toml.Tested on a real server
- NestJSDeploy a NestJS API to your own VPS: ox installs from package-lock.json, runs nest build and start:prod under systemd, and sets up PostgreSQL for the app.Tested on a real server
- FastifyDeploy a Fastify API to your own VPS: ox finds server.js, runs node server.js under systemd behind Caddy, and adds PostgreSQL with DATABASE_URL set.Tested on a real server
- Hono on BunDeploy a Hono API on Bun to your own VPS: ox installs Bun, runs bun install from bun.lock, and starts src/index.ts under systemd behind Caddy.Tested on a real server
- BullMQ workerDeploy a Node app with a BullMQ queue to your own VPS: ox adds Redis with REDIS_URL set, runs your server, and the [workers] line runs worker.js beside it.Tested on a real server
- FlaskDeploy a Flask app to your own VPS: ox installs with uv from requirements.txt, runs gunicorn app:app under systemd behind Caddy, and adds PostgreSQL.Tested on a real server
- Spring Boot (Maven)Deploy a Spring Boot app built with Maven to your own VPS: ox builds the jar with mvnw, installs Java 21, runs it under systemd and adds PostgreSQL for it.Tested on a real server
- Spring Boot (Gradle)Deploy a Spring Boot app built with Gradle to your own VPS: ox runs gradlew bootJar, reads the Java version from build.gradle.kts, and runs the jar.Tested on a real server
- QuarkusDeploy a Quarkus app to your own VPS in JVM mode: ox builds it with mvnw, runs quarkus-run.jar under systemd, checks /q/health and adds PostgreSQL for it.Tested on a real server
- ASP.NET CoreDeploy an ASP.NET Core app to your own Linux VPS: ox installs the .NET 10 SDK, runs dotnet publish, starts the DLL under systemd, and adds PostgreSQL.Tested on a real server
- RustDeploy a Rust web app from a Cargo workspace to your own VPS: ox installs stable Rust, runs cargo build --release --locked, and starts the binary.Tested on a real server
More stacks ox has deployed or detected
These have no page of their own yet. Each links to the page to start from.
- Django with Celery and Redis Tested on a real server
- Node API and SPA in one repo Tested on a real server
- Vue with Vite on Bun Tested on a real server
- Go (net/http or Gin) with Postgres and Redis Tested on a real server
- Python bot or worker with no web process Tested on a real server
- Django ASGI (uvicorn or daphne) with Redis Tested on a real server
- FastAPI with Redis, a worker and cron Tested on a real server
- Django with pgvector Tested on a real server
- Python with Qdrant Tested on a real server
- FastAPI with Neo4j Tested on a real server
- CPU model inference (FastAPI and a Hugging Face model) Tested on a real server
- WordPress with MariaDB (needs an ox.toml) Tested on a real server
- Go Fiber, Echo or Chi Plan verified, real-server test pending
- Strapi with Postgres Plan verified, real-server test pending
- Hono on Node Plan verified, real-server test pending
- Koa Plan verified, real-server test pending
- Rust Actix Web Plan verified, real-server test pending
- Rust Rocket Plan verified, real-server test pending
- Eleventy Plan verified, real-server test pending
- Payload CMS on Next.js Plan verified, real-server test pending
- Wagtail Plan verified, real-server test pending
Works with an ox.toml, not yet tested
ox does not detect these yet, and no test has deployed them. Write the start, build and services in an ox.toml, and check it with ox check first.
- Express with MySQL (mysql2)
- Streamlit
- Gradio
- Django with MariaDB (mysqlclient)
- Rails with Sidekiq and Redis
- Rails with Solid Queue
- Laravel with a queue worker and the scheduler
- Express in TypeScript (tsc to dist)
- Hugo
- Jekyll
- Telegram or Discord bot in Node
- Kotlin Ktor
- n8n
- Uptime Kuma
- Express with SQLite (better-sqlite3)
- Flask with SQLite
- Go with SQLite
- Rust full-stack (Leptos or Dioxus)
- Bun with Elysia
- TanStack Start
- MkDocs or VitePress
- Directus
- Medusa
- Sinatra or Roda
- Hanami
- Odoo
- Drupal
- Slim PHP API
- CodeIgniter
- Laravel with Inertia (Vue or React)
- Blazor Server
- Scala Play
- Clojure Ring
- Elixir Plug or Bandit without Phoenix
- Gleam
- Zig HTTP server
- C or C++ binary
- Dart (Shelf or Serverpod)
Not supported
- Express with MongoDB: ox runs no MongoDB: Ubuntu 26.04 has no MongoDB server package. Use a hosted one and set its URL as a variable.
- Ghost: Ghost needs MySQL 8, and ox ships MariaDB.
- Meteor: Meteor needs MongoDB, which ox does not run.
- Swift Vapor: No Swift toolchain for Ubuntu 26.04 is verified yet.
- Puppeteer or Playwright worker: Chromium is snap-only on Ubuntu 26.04, and its sandbox needs what ox's service sandbox blocks.
- GPU inference (vLLM, Ollama on a GPU): ox does not manage GPUs or their drivers.
- Docker Compose app: ox runs apps without Docker, by design.
- Windows, IIS or .NET Framework: ox runs on Ubuntu only.
Your stack is not here? The detection rules and the config examples cover more, and Troubleshooting lists the messages every deploy can print.