[Blog](https://deploywithox.com/blog) [Guides](https://deploywithox.com/blog#c-guides) # 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. Saurav Sharma Oct 17, 2026 16 min read On this page - [How did ox deploy and test each app?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#how) - [What did the 85 apps cover?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#covered) - [How long did the deploys take?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#times) - [Which apps did ox deploy?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#table) - [What was not tested?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#not-tested) - [Where to go next](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#next) - [Frequently asked questions](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#faq) 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: | Kind | Apps | What the test agent did | | --- | --- | --- | | Apps with accounts | 76 | Signed in and did the app's main job, such as creating a doc in AFFiNE or adding a currency in Akaunting. | | APIs | 4 | Used 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 tool | 1 | Searched the web from the SearXNG home page and got results from several engines. | | Static sites | 4 | Opened 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. | Stack | Apps | Which | | --- | --- | --- | | Django | 10 | authentik, GlitchTip, Healthchecks, Label Studio, linkding, NetBox, Paperless-ngx, pretalx, pretix, Saleor | | Node.js | 9 | Documenso, Ghost, Joplin Server, Kaneo, Logto, Misskey, NodeBB, Outline, PeerTube | | Ruby on Rails | 9 | Campfire, Chatwoot, diaspora*, DocuSeal, Forem, Mastodon, Maybe, OpenProject, Redmine | | Go | 8 | Apache Answer, Casdoor, Fider, Gogs, Grafana, Memos, New API, PhotoPrism | | Laravel | 6 | Akaunting, Bagisto, Firefly III, Invoice Ninja, Pixelfed, solidtime | | Java | 4 | Halo, Jenkins, Keycloak, SonarQube | | NestJS | 4 | AFFiNE, Docmost, Ghostfolio, Twenty | | PHP | 4 | FreshRSS, Moodle, phpMyAdmin, WordPress | | Rust | 4 | Kellnr, Meilisearch, Quickwit, SurrealDB | | .NET | 3 | Jellyfin, Kavita, Sonarr | | FastAPI | 3 | Langflow, Mealie, Open WebUI | | Next.js | 3 | Karakeep, Linkwarden, LobeHub | | ASP.NET Core | 2 | nopCommerce, Orchard Core | | Elixir | 2 | Plausible Analytics, Pleroma | | Flask | 2 | CTFd, SearXNG | | Python | 2 | Odoo, Synapse | | Symfony | 2 | Mautic, wallabag | | Static sites | 4 | Docusaurus, Element Web, Jekyll, VitePress | | One app each | 4 | Dify (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`. | Service | Apps that use it | | --- | --- | | Postgres | 58 | | Redis | 29 | | MySQL (ox runs MariaDB, which is MySQL-compatible) | 11 | | Meilisearch | 2 | | ClickHouse | 1 | 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. | App | First deploy | Redeploy | | --- | --- | --- | | FreshRSS, the fastest | 65 seconds | 22 seconds | | SearXNG | 97 seconds | 26 seconds | | WordPress | 108 seconds | 31 seconds | | Median of all 85 | 357 seconds | 170 seconds | | authentik | 1,425 seconds (about 24 minutes) | 783 seconds | | AFFiNE | 1,723 seconds (about 29 minutes) | 1,596 seconds | | SurrealDB, the slowest | 4,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. | App | Source and commit | First deploy | What the test agent did | | --- | --- | --- | --- | | [AFFiNE](https://deploywithox.com/blog/self-host-affine) | [github.com/toeverything/AFFiNE](https://github.com/toeverything/AFFiNE), [`b4c8548c`](https://github.com/toeverything/AFFiNE/commit/b4c8548c09da21b2898443559a5b846f0ccf5dd8) | 29 minutes | Signed in, created a workspace and a doc, and saw the doc in All docs after a reload. | | [Akaunting](https://deploywithox.com/blog/self-host-akaunting) | [github.com/akaunting/akaunting](https://github.com/akaunting/akaunting), [`3940b76b`](https://github.com/akaunting/akaunting/commit/3940b76b12cb86592dcb44147e8912742945a4c9) | 6 minutes | Signed in, finished the setup wizard, added the euro as a currency, and saw it under Settings after a reload. | | [Apache Answer](https://deploywithox.com/blog/self-host-answer) | [github.com/apache/answer](https://github.com/apache/answer), [`6744295f`](https://github.com/apache/answer/commit/6744295fa888e0621fc9f9a8ace04f1a4daf8554) | 6 minutes | Signed in, asked a question, posted an answer to it, and saw both after a reload. | | [authentik](https://deploywithox.com/blog/self-host-authentik) | [github.com/goauthentik/authentik](https://github.com/goauthentik/authentik), [`410f46e5`](https://github.com/goauthentik/authentik/commit/410f46e5cf18f97a1f0056b30984a145242df55d) | 24 minutes | Signed in, created a user with a password, then signed in as that user. | | [Bagisto](https://deploywithox.com/blog/self-host-bagisto) | [github.com/bagisto/bagisto](https://github.com/bagisto/bagisto), [`4e7f0862`](https://github.com/bagisto/bagisto/commit/4e7f08621904a665b378112e1a39b837c27a4c3f) | 2 minutes | Signed in, added a product in the admin and saw it on the storefront with its price and an Add To Cart button. | | [Campfire](https://deploywithox.com/blog/self-host-campfire) | [github.com/basecamp/once-campfire](https://github.com/basecamp/once-campfire), [`6e312c60`](https://github.com/basecamp/once-campfire/commit/6e312c6028f8d67af5a83df22bd8215e1cf53e6a) | 7 minutes | Signed in, posted a message in the All Talk room and saw it after a reload. | | [Casdoor](https://deploywithox.com/blog/self-host-casdoor) | [github.com/casdoor/casdoor](https://github.com/casdoor/casdoor), [`ef7754b1`](https://github.com/casdoor/casdoor/commit/ef7754b1a55e473b9622422bad6a266b7a06b277) | 4 minutes | Signed in, created an organization with an application and a user, and saw the user listed after a reload. | | [Chatwoot](https://deploywithox.com/blog/self-host-chatwoot) | [github.com/chatwoot/chatwoot](https://github.com/chatwoot/chatwoot), [`9f920b54`](https://github.com/chatwoot/chatwoot/commit/9f920b549c14491a4e587687a3eed5d21c6ccc7d) | 9 minutes | Signed in, created a website inbox, added the admin as its agent, and saw the inbox after a reload. | | [CTFd](https://deploywithox.com/blog/self-host-ctfd) | [github.com/CTFd/CTFd](https://github.com/CTFd/CTFd), [`b4a2b319`](https://github.com/CTFd/CTFd/commit/b4a2b31946ab8c814651e09579eca55d3096dcb7) | 2 minutes | Signed in, created a challenge, had a new player solve it, and saw the player's points on the scoreboard after a reload. | | [diaspora*](https://deploywithox.com/blog/self-host-diaspora) | [github.com/diaspora/diaspora](https://github.com/diaspora/diaspora), [`150f7788`](https://github.com/diaspora/diaspora/commit/150f7788562e86a26721241e7c23646d9823528d) | 12 minutes | Signed in, shared a public post and saw it at the top of the stream after a reload. | | [Dify](https://deploywithox.com/blog/self-host-dify) | [github.com/langgenius/dify](https://github.com/langgenius/dify), [`8387590a`](https://github.com/langgenius/dify/commit/8387590ace4a094de812b7847fc6a4c3a27cd52b) | 15 minutes | Signed in, made a knowledge base from a text file and got the file's matching passage back from a retrieval test. | | [Docmost](https://deploywithox.com/blog/self-host-docmost) | [github.com/docmost/docmost](https://github.com/docmost/docmost), [`9b3e5dd3`](https://github.com/docmost/docmost/commit/9b3e5dd3dc21588fa20c02c5b8646d2f46ee73af) | 3 minutes | Signed in, created a page with a title and some text, and saw both after a reload. | | [Documenso](https://deploywithox.com/blog/self-host-documenso) | [github.com/documenso/documenso](https://github.com/documenso/documenso), [`38ecb217`](https://github.com/documenso/documenso/commit/38ecb217effcc53a7164d7123c51336f636bd3b2) | 10 minutes | Signed in, uploaded a PDF, signed it with a typed signature, and saw it listed as Completed after a reload. | | [Docusaurus](https://deploywithox.com/blog/self-host-docusaurus) | [github.com/facebook/docusaurus](https://github.com/facebook/docusaurus), [`f37f9035`](https://github.com/facebook/docusaurus/commit/f37f9035584917a97a260b91fc2842cba4f8b94f) | 17 minutes | Opened the site, moved through the docs and the blog, and used the search box to find a page. | | [DocuSeal](https://deploywithox.com/blog/self-host-docuseal) | [github.com/docusealco/docuseal](https://github.com/docusealco/docuseal), [`ed46af84`](https://github.com/docusealco/docuseal/commit/ed46af8418a8e2dceef52f1c1179206b61b21a99) | 6 minutes | Signed in, made a template from a PDF, signed it, and saw the submission as Completed after a reload. | | [Element Web](https://deploywithox.com/blog/self-host-element-web) | [github.com/element-hq/element-web](https://github.com/element-hq/element-web), [`959eb558`](https://github.com/element-hq/element-web/commit/959eb558162f203c58af33f8e22ceaee938a0ee2) | 6 minutes | Opened the site, went through the sign-in and sign-up pages, and switched the language. | | [Fider](https://deploywithox.com/blog/self-host-fider) | [github.com/getfider/fider](https://github.com/getfider/fider), [`e492af4a`](https://github.com/getfider/fider/commit/e492af4a30db30c104df3dfb9e0f04e55757ba9e) | 4 minutes | Signed in, posted an idea and saw it on the home page with its vote after a reload. | | [Firefly III](https://deploywithox.com/blog/self-host-firefly-iii) | [github.com/firefly-iii/firefly-iii](https://github.com/firefly-iii/firefly-iii), [`ba267686`](https://github.com/firefly-iii/firefly-iii/commit/ba26768619842a4926655f315716f1b7788933d7) | 2 minutes | Signed in, made a bank account and a withdrawal from it, and saw the withdrawal under Expenses after a reload. | | [Forem](https://deploywithox.com/blog/self-host-forem) | [github.com/forem/forem](https://github.com/forem/forem), [`d8b2ba5f`](https://github.com/forem/forem/commit/d8b2ba5fca8416624ca32f829c812171acf495f8) | 14 minutes | Signed in, published a post and saw it on its own page and in the latest posts after a reload. | | [FreshRSS](https://deploywithox.com/blog/self-host-freshrss) | [github.com/FreshRSS/FreshRSS](https://github.com/FreshRSS/FreshRSS), [`4a810f16`](https://github.com/FreshRSS/FreshRSS/commit/4a810f1624b9d0b97b4400614cf9aacc8ada40e3) | 65 seconds | Signed in, added a feed and saw its articles after a reload. | | [Ghost](https://deploywithox.com/blog/self-host-ghost) | [github.com/TryGhost/Ghost](https://github.com/TryGhost/Ghost), [`2b047c78`](https://github.com/TryGhost/Ghost/commit/2b047c78d5fcb6f13b6ef1b81f85dc26d44ffc25) | 3 minutes | Signed in, published a post and saw it on the public home page and in the admin after a reload. | | [Ghostfolio](https://deploywithox.com/blog/self-host-ghostfolio) | [github.com/ghostfolio/ghostfolio](https://github.com/ghostfolio/ghostfolio), [`b9832e8e`](https://github.com/ghostfolio/ghostfolio/commit/b9832e8eff7f8d5bf471fc02ef3ff3766f6bfe67) | 7 minutes | Signed in, added an account with a cash balance and saw it after a reload. | | [GlitchTip](https://deploywithox.com/blog/self-host-glitchtip) | [gitlab.com/glitchtip/glitchtip-backend](https://gitlab.com/glitchtip/glitchtip-backend), [`d3039088`](https://gitlab.com/glitchtip/glitchtip-backend/-/commit/d3039088e913a591a8e6544a2d2fffc865a9711a) | 2 minutes | Signed in, created a project, sent it one error event, and saw the issue listed after a reload. | | [Gogs](https://deploywithox.com/blog/self-host-gogs) | [github.com/gogs/gogs](https://github.com/gogs/gogs), [`3ba8aca9`](https://github.com/gogs/gogs/commit/3ba8aca90e17e5410b7e8b227c9f29256ac3e875) | 2 minutes | Signed in, created a repository, edited its README in the browser, and saw the new text after a reload. | | [Grafana](https://deploywithox.com/blog/self-host-grafana) | [github.com/grafana/grafana](https://github.com/grafana/grafana), [`af4a33e3`](https://github.com/grafana/grafana/commit/af4a33e3786594ad72f72d97e6744010330c2977) | 18 minutes | Signed in, added a data source, saved a dashboard with a chart, and saw it drawn after a reload. | | [Halo](https://deploywithox.com/blog/self-host-halo) | [github.com/halo-dev/halo](https://github.com/halo-dev/halo), [`88c2ef14`](https://github.com/halo-dev/halo/commit/88c2ef14355c79a4dbd1d5c3246b3ea32836e06b) | 8 minutes | Signed in, published a post and saw it on the public home page after a reload. | | [Healthchecks](https://deploywithox.com/blog/self-host-healthchecks) | [github.com/healthchecks/healthchecks](https://github.com/healthchecks/healthchecks), [`49924faa`](https://github.com/healthchecks/healthchecks/commit/49924faadf0f24a846abc3acf3014b396fdc1f29) | 3 minutes | Signed in, added a check, then pinged its URL to fail it and saw it go down. | | [Invoice Ninja](https://deploywithox.com/blog/self-host-invoiceninja) | [github.com/invoiceninja/invoiceninja](https://github.com/invoiceninja/invoiceninja), [`493c3884`](https://github.com/invoiceninja/invoiceninja/commit/493c3884e4214028bc5970cb41bafbd9c4d96401) | 6 minutes | Signed in, created a client and an invoice for it, and saw the invoice listed after a reload. | | [Jekyll](https://deploywithox.com/blog/self-host-jekyll) | [github.com/jekyll/jekyll](https://github.com/jekyll/jekyll), [`1f319fb2`](https://github.com/jekyll/jekyll/commit/1f319fb273b6cdf876bc6edd38d7477935cdda8c) | 3 minutes | Opened the site, moved through the docs to the tutorial, opened a news post, and used the search box. | | [Jellyfin](https://deploywithox.com/blog/self-host-jellyfin) | [github.com/jellyfin/jellyfin](https://github.com/jellyfin/jellyfin), [`ca0f16eb`](https://github.com/jellyfin/jellyfin/commit/ca0f16eb7c195f720a1493ed469a27c4657db0c6) | 8 minutes | Signed in, added a video library, played a sample clip from it, and saw both after a reload. | | [Jenkins](https://deploywithox.com/blog/self-host-jenkins) | [github.com/jenkinsci/jenkins](https://github.com/jenkinsci/jenkins), [`8534fcc9`](https://github.com/jenkinsci/jenkins/commit/8534fcc9125062b7acb0cce78c02d3d7e41c15f8) | 11 minutes | Signed in, created a job with one shell step, ran it, and saw it finish with SUCCESS. | | [Joplin Server](https://deploywithox.com/blog/self-host-joplin) | [github.com/laurent22/joplin](https://github.com/laurent22/joplin), [`e41516e6`](https://github.com/laurent22/joplin/commit/e41516e669efb693b009bedb21f3eb1fcbea4fc9) | 4 minutes | Signed in, added a user, then signed in as that user, whose welcome e-mail arrived. | | [Kaneo](https://deploywithox.com/blog/self-host-kaneo) | [github.com/usekaneo/kaneo](https://github.com/usekaneo/kaneo), [`44327a80`](https://github.com/usekaneo/kaneo/commit/44327a803196511e4361a098314e62d5ed9191ac) | 4 minutes | Signed in, made a workspace and a project, added a task, and saw it on the board after a reload. | | [Karakeep](https://deploywithox.com/blog/self-host-karakeep) | [github.com/karakeep-app/karakeep](https://github.com/karakeep-app/karakeep), [`98c0c789`](https://github.com/karakeep-app/karakeep/commit/98c0c7896e855a5f2104f89651bb7e1322712df4) | 7 minutes | Signed in, saved a link, saw its title and picture fill in, and found it again by search. | | [Kavita](https://deploywithox.com/blog/self-host-kavita) | [github.com/Kareadita/Kavita](https://github.com/Kareadita/Kavita), [`879b8b73`](https://github.com/Kareadita/Kavita/commit/879b8b73eb41d66f88dde8eb874cc99a3397eb11) | 10 minutes | Signed in, added a book library, saw the scan list its book, and opened the book in the reader. | | [Kellnr](https://deploywithox.com/blog/self-host-kellnr) | [github.com/kellnr/kellnr](https://github.com/kellnr/kellnr), [`4c946274`](https://github.com/kellnr/kellnr/commit/4c9462746b9366f1a02c8202964d4275c2919781) | 10 minutes | Signed in, created an access token and saw it listed after a reload. | | [Kener](https://deploywithox.com/blog/self-host-kener) | [github.com/rajnandan1/kener](https://github.com/rajnandan1/kener), [`10a38872`](https://github.com/rajnandan1/kener/commit/10a388724d1df9e00f1549bcd4abdfa7d09836a8) | 3 minutes | Signed in, added a monitor for a website and saw it up on the public status page. | | [Keycloak](https://deploywithox.com/blog/self-host-keycloak) | [github.com/keycloak/keycloak](https://github.com/keycloak/keycloak), [`24ed1dad`](https://github.com/keycloak/keycloak/commit/24ed1dadf3f246a555adb6d3d4a99e9b3003fb3b) | 7 minutes | Signed in, created a realm and a user, then signed in as that user. | | [Label Studio](https://deploywithox.com/blog/self-host-label-studio) | [github.com/HumanSignal/label-studio](https://github.com/HumanSignal/label-studio), [`df96d791`](https://github.com/HumanSignal/label-studio/commit/df96d79183156e556d91825d15fa7721f1145e1a) | 11 minutes | Signed in, made a project from a text file, labeled a sentence, and saw the task as done after a reload. | | [Langflow](https://deploywithox.com/blog/self-host-langflow) | [github.com/langflow-ai/langflow](https://github.com/langflow-ai/langflow), [`20456860`](https://github.com/langflow-ai/langflow/commit/20456860ff19d6a6ab3eebb2446a0f99c4aecf0e) | 9 minutes | Signed in, built a small flow, sent it a message in the Playground and got it back, and saw the flow after a reload. | | [linkding](https://deploywithox.com/blog/self-host-linkding) | [github.com/sissbruecker/linkding](https://github.com/sissbruecker/linkding), [`24b5ad6c`](https://github.com/sissbruecker/linkding/commit/24b5ad6cc9bde497b5d1b1e86aed5a2fb7d25c2f) | 4 minutes | Signed in, added a bookmark with a tag and saw both after a reload. | | [Linkwarden](https://deploywithox.com/blog/self-host-linkwarden) | [github.com/linkwarden/linkwarden](https://github.com/linkwarden/linkwarden), [`474dd116`](https://github.com/linkwarden/linkwarden/commit/474dd11632b32db30cde52460b2711ecadb1886e) | 7 minutes | Signed in, saved a link and saw the copies the worker made of it after a reload. | | [Litestar Fullstack](https://deploywithox.com/blog/self-host-litestar-fullstack) | [github.com/litestar-org/litestar-fullstack](https://github.com/litestar-org/litestar-fullstack), [`90e074e1`](https://github.com/litestar-org/litestar-fullstack/commit/90e074e12383209716c68b98a74982599e477900) | 2 minutes | Signed in, created a team and saw it listed with its owner after a reload. | | [LobeHub](https://deploywithox.com/blog/self-host-lobehub) | [github.com/lobehub/lobehub](https://github.com/lobehub/lobehub), [`234e0fc7`](https://github.com/lobehub/lobehub/commit/234e0fc753dbbe7cdc7b2de0dcb493bf482d3f46) | 12 minutes | Signed 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). | | [Logto](https://deploywithox.com/blog/self-host-logto) | [github.com/logto-io/logto](https://github.com/logto-io/logto), [`79e9e3b0`](https://github.com/logto-io/logto/commit/79e9e3b0d9f505260d09c80d8a015e56fbc0ec01) | 7 minutes | Signed in, created an application in the Admin Console and saw it listed after a reload. | | [Mastodon](https://deploywithox.com/blog/self-host-mastodon) | [github.com/mastodon/mastodon](https://github.com/mastodon/mastodon), [`8ff11c2b`](https://github.com/mastodon/mastodon/commit/8ff11c2bb7b9f0714e947b10fa3629c6542c7121) | 9 minutes | Signed in, posted a status and saw it at the top of the home timeline after a reload. | | [Mautic](https://deploywithox.com/blog/self-host-mautic) | [github.com/mautic/mautic](https://github.com/mautic/mautic), [`8cbb7ef8`](https://github.com/mautic/mautic/commit/8cbb7ef874d52a411ae5a884f979acf6cc320181) | 6 minutes | Signed in, created a contact, saw it after a reload, and sent a test e-mail that arrived. | | [Maybe](https://deploywithox.com/blog/self-host-maybe) | [github.com/maybe-finance/maybe](https://github.com/maybe-finance/maybe), [`224f2135`](https://github.com/maybe-finance/maybe/commit/224f21354a916dfbec29e9435db1045b3d61a94b) | 5 minutes | Signed in, finished the setup, added a cash account with a balance, and saw it on the dashboard after a reload. | | [Mealie](https://deploywithox.com/blog/self-host-mealie) | [github.com/mealie-recipes/mealie](https://github.com/mealie-recipes/mealie), [`70b5865d`](https://github.com/mealie-recipes/mealie/commit/70b5865dce88c9ddeef4d83155fb794bb599bc57) | 6 minutes | Signed in, created a recipe and saw it listed after a reload. | | [Meilisearch](https://deploywithox.com/blog/self-host-meilisearch) | [github.com/meilisearch/meilisearch](https://github.com/meilisearch/meilisearch), [`420ff136`](https://github.com/meilisearch/meilisearch/commit/420ff1362801adb58c938aec89700e8f7e32e566) | 17 minutes | Used the API with the server's key to add a document to a new index, then found it by search, a misspelled one too. | | [Memos](https://deploywithox.com/blog/self-host-memos) | [github.com/usememos/memos](https://github.com/usememos/memos), [`2b2192d4`](https://github.com/usememos/memos/commit/2b2192d4e153bd04f1d325b60fd880cf00d68b01) | 3 minutes | Signed in, saved a note and saw it in the timeline after a reload. | | [Misskey](https://deploywithox.com/blog/self-host-misskey) | [github.com/misskey-dev/misskey](https://github.com/misskey-dev/misskey), [`de89118a`](https://github.com/misskey-dev/misskey/commit/de89118a225fbe0833e42ab94e8d5af1e5211208) | 6 minutes | Signed in, posted a note and saw it on the home timeline after a reload. | | [Moodle](https://deploywithox.com/blog/self-host-moodle) | [github.com/moodle/moodle](https://github.com/moodle/moodle), [`42622298`](https://github.com/moodle/moodle/commit/42622298fe06f9626d988d60b2bf589bd8f850e8) | 5 minutes | Signed in, created a course, uploaded a file to it, and opened the file after a reload. | | [NetBox](https://deploywithox.com/blog/self-host-netbox) | [github.com/netbox-community/netbox](https://github.com/netbox-community/netbox), [`3cd2c1d6`](https://github.com/netbox-community/netbox/commit/3cd2c1d6469caed6c50e80eddd4cde863e0e2cf5) | 17 minutes | Signed in, added a site and saw it listed as Active after a reload. | | [New API](https://deploywithox.com/blog/self-host-new-api) | [github.com/QuantumNous/new-api](https://github.com/QuantumNous/new-api), [`633b4c5b`](https://github.com/QuantumNous/new-api/commit/633b4c5b190dc1af99a2814391354d86948e7943) | 6 minutes | Signed in, created an API key and saw it listed as enabled after a reload. | | [NodeBB](https://deploywithox.com/blog/self-host-nodebb) | [github.com/NodeBB/NodeBB](https://github.com/NodeBB/NodeBB), [`66c3f49a`](https://github.com/NodeBB/NodeBB/commit/66c3f49ade1965aabee165f205f6b73eaf71088a) | 5 minutes | Signed in, posted a new topic and saw it first in its category after a reload. | | [nopCommerce](https://deploywithox.com/blog/self-host-nopcommerce) | [github.com/nopSolutions/nopCommerce](https://github.com/nopSolutions/nopCommerce), [`91844477`](https://github.com/nopSolutions/nopCommerce/commit/918444773367deb734b93d3ad80e17325d6c147a) | 6 minutes | Signed in, added a product in the admin and found it on the storefront with its price. | | [Odoo](https://deploywithox.com/blog/self-host-odoo) | [github.com/odoo/odoo](https://github.com/odoo/odoo), [`e1ed4fe0`](https://github.com/odoo/odoo/commit/e1ed4fe077ba98ce7ac6802a43bb68242081dee9) | 3 minutes | Signed in, turned on the Contacts app, added a company, and saw it listed after a reload. | | [Open WebUI](https://deploywithox.com/blog/self-host-open-webui) | [github.com/open-webui/open-webui](https://github.com/open-webui/open-webui), [`6a18585f`](https://github.com/open-webui/open-webui/commit/6a18585ff4c2e5f6805f682222cfbc46dc669ef8) | 9 minutes | Signed in, made a knowledge base from a text file, which the server embedded with its local model, and opened the file after a reload. | | [OpenProject](https://deploywithox.com/blog/self-host-openproject) | [github.com/opf/openproject](https://github.com/opf/openproject), [`a87c835d`](https://github.com/opf/openproject/commit/a87c835d12d337bf1402e4e822fd57042f7510ef) | 11 minutes | Signed in, created a project with a task and saw the task listed after a reload. | | [Orchard Core](https://deploywithox.com/blog/self-host-orchardcore) | [github.com/OrchardCMS/OrchardCore](https://github.com/OrchardCMS/OrchardCore), [`b9c4b2f2`](https://github.com/OrchardCMS/OrchardCore/commit/b9c4b2f23e56ef11fbdbd28603c871d1b0fc9deb) | 6 minutes | Signed in, published a page and opened it on the public site. | | [Outline](https://deploywithox.com/blog/self-host-outline) | [github.com/outline/outline](https://github.com/outline/outline), [`cb020720`](https://github.com/outline/outline/commit/cb0207201ed2c8b641809c26e41fbe2bde297072) | 4 minutes | Signed in, created a collection with a document, and found the document by search after a reload. | | [Paperless-ngx](https://deploywithox.com/blog/self-host-paperless) | [github.com/paperless-ngx/paperless-ngx](https://github.com/paperless-ngx/paperless-ngx), [`05e48b23`](https://github.com/paperless-ngx/paperless-ngx/commit/05e48b23166df7c7afe6f329b460b0511a89496c) | 8 minutes | Signed in, uploaded a PDF and found it by a word inside its text after a reload. | | [PeerTube](https://deploywithox.com/blog/self-host-peertube) | [github.com/Chocobozzz/PeerTube](https://github.com/Chocobozzz/PeerTube), [`3324876a`](https://github.com/Chocobozzz/PeerTube/commit/3324876a0b0f846f8b6632470b3d9d53ef74b8b7) | 5 minutes | Signed in, uploaded a short video, saw it transcoded and published, and saw it after a reload. | | [PhotoPrism](https://deploywithox.com/blog/self-host-photoprism) | [github.com/photoprism/photoprism](https://github.com/photoprism/photoprism), [`65faaae5`](https://github.com/photoprism/photoprism/commit/65faaae5dd343e30c2341112d7089592b8514279) | 5 minutes | Signed in, uploaded a photo and saw it with its camera, date and place after a reload. | | [phpMyAdmin](https://deploywithox.com/blog/self-host-phpmyadmin) | [github.com/phpmyadmin/phpmyadmin](https://github.com/phpmyadmin/phpmyadmin), [`962857e4`](https://github.com/phpmyadmin/phpmyadmin/commit/962857e4f63d42e38f11ff4d63f5e722018add76) | 3 minutes | Signed in, created a table, inserted a row, and saw the row when browsing the table. | | [Pixelfed](https://deploywithox.com/blog/self-host-pixelfed) | [github.com/pixelfed/pixelfed](https://github.com/pixelfed/pixelfed), [`d90e7465`](https://github.com/pixelfed/pixelfed/commit/d90e74654965f7fb45eb20f2605b58fce9c91a79) | 4 minutes | Signed in, posted a photo with a caption and saw it on the profile after a reload. | | [Plausible Analytics](https://deploywithox.com/blog/self-host-plausible) | [github.com/plausible/analytics](https://github.com/plausible/analytics), [`e4f5a87a`](https://github.com/plausible/analytics/commit/e4f5a87a5570bd61605217e7ceb376636db8eddb) | 14 minutes | Signed in, added a website, sent it one pageview, and saw the visit on its dashboard after a reload. | | [Pleroma](https://deploywithox.com/blog/self-host-pleroma) | [git.pleroma.social/pleroma/pleroma](https://git.pleroma.social/pleroma/pleroma), [`cd8816ec`](https://git.pleroma.social/pleroma/pleroma/-/commit/cd8816eccec355b5ff1533dc75fc86e9927baf2b) | 9 minutes | Signed in, posted a status with a picture and saw both on the profile after a reload. | | [pretalx](https://deploywithox.com/blog/self-host-pretalx) | [github.com/pretalx/pretalx](https://github.com/pretalx/pretalx), [`454da442`](https://github.com/pretalx/pretalx/commit/454da44223dcb2ff1a366bb9dfc58b81ba972a24) | 3 minutes | Signed in, created an event, sent a talk proposal through its call for papers, and found the proposal as submitted. | | [pretix](https://deploywithox.com/blog/self-host-pretix) | [github.com/pretix/pretix](https://github.com/pretix/pretix), [`f7863c9f`](https://github.com/pretix/pretix/commit/f7863c9feea1d366acb6e215aee2425582f56656) | 5 minutes | Signed in, created an organizer and an event, and saw the event listed after a reload. | | [Quickwit](https://deploywithox.com/blog/self-host-quickwit) | [github.com/quickwit-oss/quickwit](https://github.com/quickwit-oss/quickwit), [`962685f5`](https://github.com/quickwit-oss/quickwit/commit/962685f5a334f6c9d8516d2d7c1fdd08891b687c) | 23 minutes | Used the API to make an index, add a document and find it by search, in the API and in the web UI. | | [Redmine](https://deploywithox.com/blog/self-host-redmine) | [github.com/redmine/redmine](https://github.com/redmine/redmine), [`c1be3264`](https://github.com/redmine/redmine/commit/c1be3264e52d65f2870c05d30509520964c5580f) | 3 minutes | Signed in, created a project, filed a bug in it, and saw the bug listed after a reload. | | [Saleor](https://deploywithox.com/blog/self-host-saleor) | [github.com/saleor/saleor](https://github.com/saleor/saleor), [`28a1227b`](https://github.com/saleor/saleor/commit/28a1227b9a2db153c22ed6165b0987d0c96f80f8) | 9 minutes | Signed in, ran GraphQL queries in the playground for the shop and for the new account, and got both after a reload. | | [SearXNG](https://deploywithox.com/blog/self-host-searxng) | [github.com/searxng/searxng](https://github.com/searxng/searxng), [`b00212a8`](https://github.com/searxng/searxng/commit/b00212a8366131936856b726ed4dd9bd281e4d7e) | 2 minutes | Searched the web from the home page and got results from several engines with an info box. | | [solidtime](https://deploywithox.com/blog/self-host-solidtime) | [github.com/solidtime-io/solidtime](https://github.com/solidtime-io/solidtime), [`b33cf007`](https://github.com/solidtime-io/solidtime/commit/b33cf007888d70856c616e28bfc595eec9422a45) | 6 minutes | Signed in, registered through the e-mail link, created a project, ran a timer on it, and saw both after a reload. | | [SonarQube](https://deploywithox.com/blog/self-host-sonarqube) | [github.com/SonarSource/sonarqube](https://github.com/SonarSource/sonarqube), [`55989c64`](https://github.com/SonarSource/sonarqube/commit/55989c640a19aac3cb1c190f97464e59773035c5) | 10 minutes | Signed in, created a local project and saw it on the Projects page after a reload. | | [Sonarr](https://deploywithox.com/blog/self-host-sonarr) | [github.com/Sonarr/Sonarr](https://github.com/Sonarr/Sonarr), [`cab419ad`](https://github.com/Sonarr/Sonarr/commit/cab419ade8ac7fcab5bf80394ee492abd35d5f5a) | 4 minutes | Signed in, added a root folder and a series, and saw the series with its episodes after a reload. | | [Stirling-PDF](https://deploywithox.com/blog/self-host-stirling-pdf) | [github.com/Stirling-Tools/Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF), [`b99fa929`](https://github.com/Stirling-Tools/Stirling-PDF/commit/b99fa929e365760c863956bf23c127b098c288e5) | 15 minutes | Signed in, uploaded a PDF, compressed it, and got a valid PDF back. | | [SurrealDB](https://deploywithox.com/blog/self-host-surrealdb) | [github.com/surrealdb/surrealdb](https://github.com/surrealdb/surrealdb), [`238bfeb1`](https://github.com/surrealdb/surrealdb/commit/238bfeb11f5725bebed370167656748df8067595) | 69 minutes | Signed in as root over the API, created a record, and read it back. | | [Synapse](https://deploywithox.com/blog/self-host-synapse) | [github.com/element-hq/synapse](https://github.com/element-hq/synapse), [`193cf946`](https://github.com/element-hq/synapse/commit/193cf9466fbfbe334700c541dc1442f135179aaf) | 3 minutes | Signed in through the Matrix client API, created a room, sent a message, and read it back from the room's history. | | [Twenty](https://deploywithox.com/blog/self-host-twenty) | [github.com/twentyhq/twenty](https://github.com/twentyhq/twenty), [`b53f1832`](https://github.com/twentyhq/twenty/commit/b53f1832d80f87be2cfd88990b855c0e5f3cc926) | 21 minutes | Signed in, finished the onboarding, added a company, and saw it listed after a reload. | | [VitePress](https://deploywithox.com/blog/self-host-vitepress) | [github.com/vuejs/vitepress](https://github.com/vuejs/vitepress), [`1fc537b7`](https://github.com/vuejs/vitepress/commit/1fc537b78cda287fa23c1129a815ad9455fd8106) | 3 minutes | Opened the site, moved through the guide and the reference, and used the search to open a page. | | [wallabag](https://deploywithox.com/blog/self-host-wallabag) | [github.com/wallabag/wallabag](https://github.com/wallabag/wallabag), [`74cbfd94`](https://github.com/wallabag/wallabag/commit/74cbfd945bc316b5cf0308ba56e32fd2ed3443c0) | 2 minutes | Signed in, saved an article from its link and saw it in the Unread list with its reading time after a reload. | | [WordPress](https://deploywithox.com/blog/self-host-wordpress) | [github.com/WordPress/WordPress](https://github.com/WordPress/WordPress), [`fc9832be`](https://github.com/WordPress/WordPress/commit/fc9832bef919c2a08541248db23af90d14ffb082) | 2 minutes | Signed 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](https://deploywithox.com/docs/operate/domains) 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](https://deploywithox.com/self-hosting) covers what ox puts on your server and which stacks it runs. To deploy a repo of your own, the [quickstart](https://deploywithox.com/docs/quickstart) goes from sign-in to a live app in five steps. The [Plausible guide](https://deploywithox.com/blog/self-host-plausible) is one of the 85 guides, each with the config that passed, and the [CLI reference](https://deploywithox.com/docs/cli) lists every command. The [backups page](https://deploywithox.com/docs/operate/backups) 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](https://deploywithox.com/self-hosting) shows what ox sets up on your server. On this page - [How did ox deploy and test each app?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#how) - [What did the 85 apps cover?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#covered) - [Which stacks did they use?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#stacks) - [Which services did they need?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#services) - [How long did the deploys take?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#times) - [Which apps did ox deploy?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#table) - [What was not tested?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#not-tested) - [Where to go next](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#next) - [Frequently asked questions](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#faq) - [Can I self-host these apps without Docker?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#faq-docker) - [Which open-source apps can ox deploy?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#faq-which) - [What server did the apps run on?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#faq-server) - [How long does it take to deploy an open-source app with ox?](https://deploywithox.com/blog/self-hosted-open-source-apps-deployed-with-ox#faq-time) Written by Saurav Sharma Builds ox. Writes about running apps on servers you own, without Docker and without a platform bill. [Older post How to self-host AFFiNE on your own VPS without Docker](https://deploywithox.com/blog/self-host-affine) ## Keep reading - Guides [How to self-host AFFiNE on your own VPS without Docker](https://deploywithox.com/blog/self-host-affine) Run AFFiNE v0.27.4 on your own Ubuntu server with ox: Postgres with pgvector, Redis, a Rust and Node build, and an admin made from two variables. Saurav Sharma Oct 17, 2026 12 min read - Guides [How to self-host Akaunting on your own VPS without Docker](https://deploywithox.com/blog/self-host-akaunting) Run Akaunting 3.2.4 on your own Ubuntu server with ox: PHP, MariaDB, a scheduler and the first company and admin made on deploy, from the config that ran. Saurav Sharma Oct 17, 2026 10 min read - Guides [How to self-host Apache Answer on your own Ubuntu VPS](https://deploywithox.com/blog/self-host-answer) Run Apache Answer v2.0.3, an open-source question and answer platform, on your own Ubuntu server with ox and no Docker: Go and Postgres, as it ran. Saurav Sharma Oct 17, 2026 9 min read ## 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](https://deploywithox.com/login/github) [Read the docs](https://deploywithox.com/docs)