BlogGuides

Self-Hosted Open-Source Apps Deployed with ox: All 85

ox deployed 85 open-source apps from pinned commits on fresh servers, with no Docker. The stacks, services, deploy times and a table of every app.

On this page

ox deployed 85 open-source apps on fresh Ubuntu servers from pinned commits, one server per app, on October 17, 2026. A separate test agent then used each app the way its kind of app is used: it signed in and did a main task of the app, used its API, or opened the pages of a static site. It also checked each app's services and backup after a redeploy, a backup and a reboot of the server.

No app ran in Docker. ox built each one on the server from its pinned commit and ran it with systemd and Caddy, plus the services it needs, such as Postgres, Redis or MySQL. PhotoPrism is the one build that did not compile from source: its config installs the project's own Linux package for that commit. A few other apps also download a font, a model or a prebuilt tool while they build. The table further down lists all 85 with the repository, the commit, the first deploy time and what the test agent did.

How did ox deploy and test each app?

Each app got its own fresh DigitalOcean server running Ubuntu LTS, with the app alone on it. Every server had the size s-8vcpu-16gb, which is 8 vCPUs and 16 GB of memory. The size was the same for all 85 apps and was not picked for any one of them.

Each app was pinned to one exact git commit, so you can fetch the same code that ran. Then the run did these steps, in this order:

  1. Create the project and save its variables, which starts the first deploy. ox builds the app on the server and starts it, and the run checks the app.
  2. Back the app up.
  3. Redeploy the same commit.
  4. Reboot the server.

The app was checked again after each step. For 32 of the apps, the run also deployed a staging copy beside production.

Then a separate test agent, one that did not write the config, used the app the way its kind of app is used. It did the app's main job, not every feature. Here is what each kind got:

KindAppsWhat the test agent did
Apps with accounts76Signed in and did the app's main job, such as creating a doc in AFFiNE or adding a currency in Akaunting.
APIs4Used the API. In Meilisearch it added a document to a new index with the server's key and found it by search. In Synapse it signed in through the Matrix client API, created a room, sent a message and read it back.
A tool1Searched the web from the SearXNG home page and got results from several engines.
Static sites4Opened Docusaurus, Element Web, Jekyll and VitePress, moved through their pages and checked their links.

The agent also checked each app's services, and its backup for 80 of them. The four static sites and SearXNG had no backup check.

What did the 85 apps cover?

Which stacks did they use?

The stacks run from Django, Rails and Laravel to Go, Java and Rust. Each app is listed once, under the stack its config and source show.

StackAppsWhich
Django10authentik, GlitchTip, Healthchecks, Label Studio, linkding, NetBox, Paperless-ngx, pretalx, pretix, Saleor
Node.js9Documenso, Ghost, Joplin Server, Kaneo, Logto, Misskey, NodeBB, Outline, PeerTube
Ruby on Rails9Campfire, Chatwoot, diaspora*, DocuSeal, Forem, Mastodon, Maybe, OpenProject, Redmine
Go8Apache Answer, Casdoor, Fider, Gogs, Grafana, Memos, New API, PhotoPrism
Laravel6Akaunting, Bagisto, Firefly III, Invoice Ninja, Pixelfed, solidtime
Java4Halo, Jenkins, Keycloak, SonarQube
NestJS4AFFiNE, Docmost, Ghostfolio, Twenty
PHP4FreshRSS, Moodle, phpMyAdmin, WordPress
Rust4Kellnr, Meilisearch, Quickwit, SurrealDB
.NET3Jellyfin, Kavita, Sonarr
FastAPI3Langflow, Mealie, Open WebUI
Next.js3Karakeep, Linkwarden, LobeHub
ASP.NET Core2nopCommerce, Orchard Core
Elixir2Plausible Analytics, Pleroma
Flask2CTFd, SearXNG
Python2Odoo, Synapse
Symfony2Mautic, wallabag
Static sites4Docusaurus, Element Web, Jekyll, VitePress
One app each4Dify (Flask and Next.js), Kener (SvelteKit), Litestar Fullstack (Litestar), Stirling-PDF (Spring Boot)

Which services did they need?

72 of the apps use at least one service that ox sets up beside them on the same server, and 13 use none. The count comes from each app's ox.toml.

ServiceApps that use it
Postgres58
Redis29
MySQL (ox runs MariaDB, which is MySQL-compatible)11
Meilisearch2
ClickHouse1

LobeHub also has a service of its own, a Postgres with the pg_search extension. Dify has a second Postgres database for its plugin daemon. The 13 apps without a service include the four static sites.

How long did the deploys take?

The first deploy time runs from creating the project until the app's own checks passed, so it includes the build. The median across the 85 apps was 357 seconds, just under 6 minutes. 33 apps took under 5 minutes and 66 under 10 minutes. 14 took between 10 and 20 minutes, and 5 took longer.

AppFirst deployRedeploy
FreshRSS, the fastest65 seconds22 seconds
SearXNG97 seconds26 seconds
WordPress108 seconds31 seconds
Median of all 85357 seconds170 seconds
authentik1,425 seconds (about 24 minutes)783 seconds
AFFiNE1,723 seconds (about 29 minutes)1,596 seconds
SurrealDB, the slowest4,169 seconds (about 69 minutes)3,965 seconds

The redeploy of the same commit is timed the same way. The slowest deploys were big builds: SurrealDB compiles its Rust code on the server, and AFFiNE builds a native module and several web apps.

Which apps did ox deploy?

Every app is below, from A to Z. Each row has the repository and the exact commit that ran, the first deploy time and what the test agent did. Each app's name links its guide, which shows the ox.toml that passed, the variables it needed and the run's screenshots.

Every app ran on a DigitalOcean server with 8 vCPUs and 16 GB of memory.

AppSource and commitFirst deployWhat the test agent did
AFFiNEgithub.com/toeverything/AFFiNE, b4c8548c29 minutesSigned in, created a workspace and a doc, and saw the doc in All docs after a reload.
Akauntinggithub.com/akaunting/akaunting, 3940b76b6 minutesSigned in, finished the setup wizard, added the euro as a currency, and saw it under Settings after a reload.
Apache Answergithub.com/apache/answer, 6744295f6 minutesSigned in, asked a question, posted an answer to it, and saw both after a reload.
authentikgithub.com/goauthentik/authentik, 410f46e524 minutesSigned in, created a user with a password, then signed in as that user.
Bagistogithub.com/bagisto/bagisto, 4e7f08622 minutesSigned in, added a product in the admin and saw it on the storefront with its price and an Add To Cart button.
Campfiregithub.com/basecamp/once-campfire, 6e312c607 minutesSigned in, posted a message in the All Talk room and saw it after a reload.
Casdoorgithub.com/casdoor/casdoor, ef7754b14 minutesSigned in, created an organization with an application and a user, and saw the user listed after a reload.
Chatwootgithub.com/chatwoot/chatwoot, 9f920b549 minutesSigned in, created a website inbox, added the admin as its agent, and saw the inbox after a reload.
CTFdgithub.com/CTFd/CTFd, b4a2b3192 minutesSigned in, created a challenge, had a new player solve it, and saw the player's points on the scoreboard after a reload.
diaspora*github.com/diaspora/diaspora, 150f778812 minutesSigned in, shared a public post and saw it at the top of the stream after a reload.
Difygithub.com/langgenius/dify, 8387590a15 minutesSigned in, made a knowledge base from a text file and got the file's matching passage back from a retrieval test.
Docmostgithub.com/docmost/docmost, 9b3e5dd33 minutesSigned in, created a page with a title and some text, and saw both after a reload.
Documensogithub.com/documenso/documenso, 38ecb21710 minutesSigned in, uploaded a PDF, signed it with a typed signature, and saw it listed as Completed after a reload.
Docusaurusgithub.com/facebook/docusaurus, f37f903517 minutesOpened the site, moved through the docs and the blog, and used the search box to find a page.
DocuSealgithub.com/docusealco/docuseal, ed46af846 minutesSigned in, made a template from a PDF, signed it, and saw the submission as Completed after a reload.
Element Webgithub.com/element-hq/element-web, 959eb5586 minutesOpened the site, went through the sign-in and sign-up pages, and switched the language.
Fidergithub.com/getfider/fider, e492af4a4 minutesSigned in, posted an idea and saw it on the home page with its vote after a reload.
Firefly IIIgithub.com/firefly-iii/firefly-iii, ba2676862 minutesSigned in, made a bank account and a withdrawal from it, and saw the withdrawal under Expenses after a reload.
Foremgithub.com/forem/forem, d8b2ba5f14 minutesSigned in, published a post and saw it on its own page and in the latest posts after a reload.
FreshRSSgithub.com/FreshRSS/FreshRSS, 4a810f1665 secondsSigned in, added a feed and saw its articles after a reload.
Ghostgithub.com/TryGhost/Ghost, 2b047c783 minutesSigned in, published a post and saw it on the public home page and in the admin after a reload.
Ghostfoliogithub.com/ghostfolio/ghostfolio, b9832e8e7 minutesSigned in, added an account with a cash balance and saw it after a reload.
GlitchTipgitlab.com/glitchtip/glitchtip-backend, d30390882 minutesSigned in, created a project, sent it one error event, and saw the issue listed after a reload.
Gogsgithub.com/gogs/gogs, 3ba8aca92 minutesSigned in, created a repository, edited its README in the browser, and saw the new text after a reload.
Grafanagithub.com/grafana/grafana, af4a33e318 minutesSigned in, added a data source, saved a dashboard with a chart, and saw it drawn after a reload.
Halogithub.com/halo-dev/halo, 88c2ef148 minutesSigned in, published a post and saw it on the public home page after a reload.
Healthchecksgithub.com/healthchecks/healthchecks, 49924faa3 minutesSigned in, added a check, then pinged its URL to fail it and saw it go down.
Invoice Ninjagithub.com/invoiceninja/invoiceninja, 493c38846 minutesSigned in, created a client and an invoice for it, and saw the invoice listed after a reload.
Jekyllgithub.com/jekyll/jekyll, 1f319fb23 minutesOpened the site, moved through the docs to the tutorial, opened a news post, and used the search box.
Jellyfingithub.com/jellyfin/jellyfin, ca0f16eb8 minutesSigned in, added a video library, played a sample clip from it, and saw both after a reload.
Jenkinsgithub.com/jenkinsci/jenkins, 8534fcc911 minutesSigned in, created a job with one shell step, ran it, and saw it finish with SUCCESS.
Joplin Servergithub.com/laurent22/joplin, e41516e64 minutesSigned in, added a user, then signed in as that user, whose welcome e-mail arrived.
Kaneogithub.com/usekaneo/kaneo, 44327a804 minutesSigned in, made a workspace and a project, added a task, and saw it on the board after a reload.
Karakeepgithub.com/karakeep-app/karakeep, 98c0c7897 minutesSigned in, saved a link, saw its title and picture fill in, and found it again by search.
Kavitagithub.com/Kareadita/Kavita, 879b8b7310 minutesSigned in, added a book library, saw the scan list its book, and opened the book in the reader.
Kellnrgithub.com/kellnr/kellnr, 4c94627410 minutesSigned in, created an access token and saw it listed after a reload.
Kenergithub.com/rajnandan1/kener, 10a388723 minutesSigned in, added a monitor for a website and saw it up on the public status page.
Keycloakgithub.com/keycloak/keycloak, 24ed1dad7 minutesSigned in, created a realm and a user, then signed in as that user.
Label Studiogithub.com/HumanSignal/label-studio, df96d79111 minutesSigned in, made a project from a text file, labeled a sentence, and saw the task as done after a reload.
Langflowgithub.com/langflow-ai/langflow, 204568609 minutesSigned in, built a small flow, sent it a message in the Playground and got it back, and saw the flow after a reload.
linkdinggithub.com/sissbruecker/linkding, 24b5ad6c4 minutesSigned in, added a bookmark with a tag and saw both after a reload.
Linkwardengithub.com/linkwarden/linkwarden, 474dd1167 minutesSigned in, saved a link and saw the copies the worker made of it after a reload.
Litestar Fullstackgithub.com/litestar-org/litestar-fullstack, 90e074e12 minutesSigned in, created a team and saw it listed with its owner after a reload.
LobeHubgithub.com/lobehub/lobehub, 234e0fc712 minutesSigned in, sent a chat message and saw the chat kept after a reload (the server had no AI model key, so the reply was an error).
Logtogithub.com/logto-io/logto, 79e9e3b07 minutesSigned in, created an application in the Admin Console and saw it listed after a reload.
Mastodongithub.com/mastodon/mastodon, 8ff11c2b9 minutesSigned in, posted a status and saw it at the top of the home timeline after a reload.
Mauticgithub.com/mautic/mautic, 8cbb7ef86 minutesSigned in, created a contact, saw it after a reload, and sent a test e-mail that arrived.
Maybegithub.com/maybe-finance/maybe, 224f21355 minutesSigned in, finished the setup, added a cash account with a balance, and saw it on the dashboard after a reload.
Mealiegithub.com/mealie-recipes/mealie, 70b5865d6 minutesSigned in, created a recipe and saw it listed after a reload.
Meilisearchgithub.com/meilisearch/meilisearch, 420ff13617 minutesUsed the API with the server's key to add a document to a new index, then found it by search, a misspelled one too.
Memosgithub.com/usememos/memos, 2b2192d43 minutesSigned in, saved a note and saw it in the timeline after a reload.
Misskeygithub.com/misskey-dev/misskey, de89118a6 minutesSigned in, posted a note and saw it on the home timeline after a reload.
Moodlegithub.com/moodle/moodle, 426222985 minutesSigned in, created a course, uploaded a file to it, and opened the file after a reload.
NetBoxgithub.com/netbox-community/netbox, 3cd2c1d617 minutesSigned in, added a site and saw it listed as Active after a reload.
New APIgithub.com/QuantumNous/new-api, 633b4c5b6 minutesSigned in, created an API key and saw it listed as enabled after a reload.
NodeBBgithub.com/NodeBB/NodeBB, 66c3f49a5 minutesSigned in, posted a new topic and saw it first in its category after a reload.
nopCommercegithub.com/nopSolutions/nopCommerce, 918444776 minutesSigned in, added a product in the admin and found it on the storefront with its price.
Odoogithub.com/odoo/odoo, e1ed4fe03 minutesSigned in, turned on the Contacts app, added a company, and saw it listed after a reload.
Open WebUIgithub.com/open-webui/open-webui, 6a18585f9 minutesSigned in, made a knowledge base from a text file, which the server embedded with its local model, and opened the file after a reload.
OpenProjectgithub.com/opf/openproject, a87c835d11 minutesSigned in, created a project with a task and saw the task listed after a reload.
Orchard Coregithub.com/OrchardCMS/OrchardCore, b9c4b2f26 minutesSigned in, published a page and opened it on the public site.
Outlinegithub.com/outline/outline, cb0207204 minutesSigned in, created a collection with a document, and found the document by search after a reload.
Paperless-ngxgithub.com/paperless-ngx/paperless-ngx, 05e48b238 minutesSigned in, uploaded a PDF and found it by a word inside its text after a reload.
PeerTubegithub.com/Chocobozzz/PeerTube, 3324876a5 minutesSigned in, uploaded a short video, saw it transcoded and published, and saw it after a reload.
PhotoPrismgithub.com/photoprism/photoprism, 65faaae55 minutesSigned in, uploaded a photo and saw it with its camera, date and place after a reload.
phpMyAdmingithub.com/phpmyadmin/phpmyadmin, 962857e43 minutesSigned in, created a table, inserted a row, and saw the row when browsing the table.
Pixelfedgithub.com/pixelfed/pixelfed, d90e74654 minutesSigned in, posted a photo with a caption and saw it on the profile after a reload.
Plausible Analyticsgithub.com/plausible/analytics, e4f5a87a14 minutesSigned in, added a website, sent it one pageview, and saw the visit on its dashboard after a reload.
Pleromagit.pleroma.social/pleroma/pleroma, cd8816ec9 minutesSigned in, posted a status with a picture and saw both on the profile after a reload.
pretalxgithub.com/pretalx/pretalx, 454da4423 minutesSigned in, created an event, sent a talk proposal through its call for papers, and found the proposal as submitted.
pretixgithub.com/pretix/pretix, f7863c9f5 minutesSigned in, created an organizer and an event, and saw the event listed after a reload.
Quickwitgithub.com/quickwit-oss/quickwit, 962685f523 minutesUsed the API to make an index, add a document and find it by search, in the API and in the web UI.
Redminegithub.com/redmine/redmine, c1be32643 minutesSigned in, created a project, filed a bug in it, and saw the bug listed after a reload.
Saleorgithub.com/saleor/saleor, 28a1227b9 minutesSigned in, ran GraphQL queries in the playground for the shop and for the new account, and got both after a reload.
SearXNGgithub.com/searxng/searxng, b00212a82 minutesSearched the web from the home page and got results from several engines with an info box.
solidtimegithub.com/solidtime-io/solidtime, b33cf0076 minutesSigned in, registered through the e-mail link, created a project, ran a timer on it, and saw both after a reload.
SonarQubegithub.com/SonarSource/sonarqube, 55989c6410 minutesSigned in, created a local project and saw it on the Projects page after a reload.
Sonarrgithub.com/Sonarr/Sonarr, cab419ad4 minutesSigned in, added a root folder and a series, and saw the series with its episodes after a reload.
Stirling-PDFgithub.com/Stirling-Tools/Stirling-PDF, b99fa92915 minutesSigned in, uploaded a PDF, compressed it, and got a valid PDF back.
SurrealDBgithub.com/surrealdb/surrealdb, 238bfeb169 minutesSigned in as root over the API, created a record, and read it back.
Synapsegithub.com/element-hq/synapse, 193cf9463 minutesSigned in through the Matrix client API, created a room, sent a message, and read it back from the room's history.
Twentygithub.com/twentyhq/twenty, b53f183221 minutesSigned in, finished the onboarding, added a company, and saw it listed after a reload.
VitePressgithub.com/vuejs/vitepress, 1fc537b73 minutesOpened the site, moved through the guide and the reference, and used the search to open a page.
wallabaggithub.com/wallabag/wallabag, 74cbfd942 minutesSigned in, saved an article from its link and saw it in the Unread list with its reading time after a reload.
WordPressgithub.com/WordPress/WordPress, fc9832be2 minutesSigned in, published a post and saw it on the blog's home page after a reload.

What was not tested?

  • A custom domain. Each app was served on the address ox shows for the project. The domains page covers adding one.
  • A restore from a backup. The backups were taken and checked, and none was restored.
  • E-mail delivery. Joplin Server, Mautic, Outline, Saleor and solidtime sent mail to a test inbox, and the test agent read it there. Delivery through a real mail provider was not tested.
  • Answers from an AI model. The server had no AI model key, so LobeHub's chat reply was an error. The test agent checked that the chat was kept.
  • The sign-up captcha of diaspora*. The run turned it off with SETTINGS_CAPTCHA_ENABLE=false, as the app's example config documents.

Where to go next

How ox self-hosts your apps covers what ox puts on your server and which stacks it runs. To deploy a repo of your own, the quickstart goes from sign-in to a live app in five steps. The Plausible guide is one of the 85 guides, each with the config that passed, and the CLI reference lists every command. The backups page explains how ox backs up the databases it sets up.

Frequently asked questions

Can I self-host these apps without Docker?

Yes. In these runs ox built each app on the server from its pinned commit (PhotoPrism from its own Linux package) and ran it with systemd and Caddy. It installed the databases the app needed beside it. Some of these projects publish Docker images or Compose files. ox ran none of them and installed no Docker.

Which open-source apps can ox deploy?

The table above lists the 85 apps that ox deployed and the test agent used, including Mastodon, Odoo, Grafana, WordPress, Keycloak, Jellyfin and Plausible Analytics. Each row links the repository and the commit that ran. An app that is not in the table was not part of these runs.

What server did the apps run on?

Each app ran alone on a fresh DigitalOcean server of size s-8vcpu-16gb (8 vCPUs, 16 GB of memory). After the reboot, the whole server used a median of 1,023 MB across the 84 apps measured (620 to 8,565 MB). ox works on any server from 1 GB up and tells you when memory is why an app stopped.

How long does it take to deploy an open-source app with ox?

The median first deploy across the 85 apps took 357 seconds, just under 6 minutes, and 66 of the 85 finished in under 10 minutes. The slowest, SurrealDB, took about 69 minutes because it compiles Rust on the server. A redeploy of the same commit had a median of 170 seconds.

New to running apps on your own server? How ox self-hosts your apps shows what ox sets up on your server.

Keep reading

Deploy to a server you own

ox sets up systemd, Caddy and PostgreSQL on your Ubuntu server and deploys on every push. Free for your first project.

Sign up with GitHub Read the docs