Compatibility. What happened when we tried 20 real apps.

We took 20 real open-source web apps and had a coding agent set each one up for Karts with the onboarding prompt. It wrote only karts.yml: no changes to the app and nothing built on a laptop. The fourth run of this sweep was on 29–30 Sep 2026, through the public API to our own dev host.

ResultApps
Runs on Karts19 of 20
With only karts.yml18: Kutt, Umami, Healthchecks, Shiori, Miniflux, listmonk, Saleor, Directus, Documenso, Twenty, Outline, Hoppscotch, graphile-starter, full-stack-fastapi-template, Monica, Maybe, Plane, Chatwoot
With one step outside karts.yml1: Ghost, whose git submodules must be checked out first (git submodule update --init --recursive)
Out of scope1: Dokploy, which drives Docker

The earlier runs, on the same commits of the same 20 apps and on the same terms, got 0, then 4, then 7 with only karts.yml.

What "runs" means

Each of the 18 passed four checks on the live stack:

  • its health path answered;
  • one real user action worked, through the app's own form or API: sign up and follow the emailed link, sign in, or create a record;
  • a branch that added one migration, in the app's own tool, got that migration in its own database on a plain karts up;
  • karts down removed the environment.

Limits you will meet

  • No internet at run time, unless you turn it on. In this sweep, Miniflux signed in and stored data but could not fetch a feed, and Shiori stored bookmarks without their page. internet: in karts.yml now lets a running app reach the hosts you allow; we have not run these two apps with it.
  • graphile-starter does not run its job worker. Its mail goes through AWS SES, which needs a real credential. Sign-up and login work without it.
  • Big builds need a bigger VM. Twenty, Plane and Hoppscotch build only at 8 GB, set with resources: in karts.yml. Six others use 4 GB or a larger disk.
  • Some apps give the admin account to the first visitor. Directus, Outline, Ghost, Kutt, listmonk, Hoppscotch and Plane do this, and Umami and Shiori publish a default password. Every preview URL is public, so claim the admin account or change its password right after the first karts up.
  • The first request to a new URL is slow. It waited 20 to 52 seconds for the HTTPS certificate, and once about 170. Later requests took 0.3 to 1.5 seconds.

The 18 that run

AppStackFirst karts upA branch adding a migration
Kuttnode22, Knex27.4 s14.4 s
Umaminode22 at 4 GB, Prisma454.3 s190.8 s
Healthcheckspython314, Django, mail98.4 s52.8 s
Shiorigo, its own migrations120.1 s46.4 s
Minifluxgo, its own migrations100.1 s35.9 s
listmonkgo with a Node frontend, 8 GB disk551.1 s285.1 s
Saleorpython312, Django522.2 s112.4 s
Directusnode22 at 4 GB, Knex581.2 s282.4 s
Documensonode24 at 4 GB, Prisma, mail1,518.3 s561.3 s
Twentynode24 at 8 GB, Redis, S3, a worker2,019.0 s907.3 s
Outlinenode22 at 4 GB, Sequelize, mail345.5 s193.4 s
Hoppscotchnode24 at 8 GB, Prisma, two services, mail451.7 s259.1 s
Ghostnode22 at 4 GB, SQLite, mail826.3 s582.7 s
graphile-starternode22, Postgres roles375.2 s217.9 s
full-stack-fastapi-templatepython314, Alembic304.5 s158.4 s
Monicaphp83, Laravel, mail200.4 s113.8 s
Mayberuby34, Rails, Redis, Sidekiq283.3 s109.2 s
Planepython312 at 8 GB, Django, Redis, S3, 7 processes716.9 s293.4 s
Chatwootruby34 at 8 GB, Rails, Redis, Sidekiq, pgvector615.7 s332.4 s
  • The first karts up of each app also built its template database. The first upload of a large repository is slow too: Twenty's 33,602 files took 759.3 s.
  • Branches are faster because they start from that template. They are still much slower than the 2.2-second branch on our sample app, because each build installs the app's dependencies again. Only a plain npm ci uses Karts' dependency cache, which is why Kutt's branch took 14.4 s.

What stops the last one

AppBlocked by
DokployIt drives Docker, which a Karts VM does not run.

When your app hits a limit, karts check-config often warns before the build, and karts logs --failed shows why the build stopped. The onboarding prompt maps the common messages to their cause.