Docs
What KaribaCore runs
Check this before importing a repository. Last updated 5 October 2026.
KaribaCore builds and hosts Next.js 15 and 16 apps that use npm, one app per repository. Run Check build setup in a project's Settings to test a repository before deploying: it lists every problem at once without running your code.
Supported
| Framework | Next.js 15 and 16, released versions only. Canary, beta and release-candidate versions are refused, as are releases with a known remote-code-execution vulnerability. |
|---|---|
| React | React and React DOM 18 or 19, at the same version. |
| Node.js | Node.js 22 or 24. The build uses the first one allowed by engines.node in package.json, or Node.js 22 when it is not set. The same version runs your app. |
| Package manager | npm with a committed package-lock.json (lockfile version 2 or 3). From .npmrc, only legacy-peer-deps and strict-peer-deps are read. |
| Repository layout | One Next.js app at the repository root, with a build script in package.json. |
| Build and start | KaribaCore runs npm ci, then npm run build, then starts the app with next start, or with the standalone server if you set output: 'standalone' (smaller images). |
| App features | App Router and Pages Router, server components, server actions, route handlers and API routes, middleware/proxy, and next.config.ts or .js/.mjs. |
| Configuration | Environment variables per project, available at build, runtime or both, including pasting a whole .env file. Committed .env and .env.production files are used as defaults; variables you set in KaribaCore take precedence. |
| Outbound connections | Public internet services on HTTP/HTTPS (80, 443), PostgreSQL (5432, 6543), MySQL (3306), Redis (6379), MongoDB (27017) and SMTP submission (465, 587). |
| Addresses | A platform address on karibacore.app, custom domains with HTTPS (including domains proxied through your own Cloudflare account), PR previews, promotion and rollback. |
Limits
| Repository size | 100 MB and 20,000 files, not counting node_modules, .next and .git |
|---|---|
| Build | 2 CPU, 3 GiB memory, 8 GiB disk, 25 minutes |
| Running app | 1 CPU, 512 MiB memory |
| Writable disk | /tmp and the Next.js cache, 64 MiB each; everything else is read-only and resets on each deploy |
| Start-up health check | GET / must answer with a 200–399 status within about 2 minutes of starting |
| Per workspace | 10 projects, 1 build at a time, 4 live apps (production and previews), 5 GiB of deployment images |
| Per project | 3 open PR previews |
| Variables | Names in capitals, digits and underscores (up to 128); values up to 32 KB; up to 200 per paste |
| Logs | Build output kept 30 days, runtime output 7 days |
Not supported yet, and what to do instead
| pnpm, Yarn or Bun | Not yet. Convert to npm: delete the other lockfile, remove a non-npm packageManager field (npm pkg delete packageManager), run npm install and commit package-lock.json. |
|---|---|
| Monorepos and workspaces | Not yet, including an app in a subfolder such as frontend/. Deploy a repository whose root is the Next.js app. |
| Next.js 14 or older | Upgrade to Next.js 15 or 16 and commit the updated lockfile. |
| Other frameworks | Remix, Astro, Vite, Nuxt, SvelteKit, Express and other Node servers are not supported. |
| Static export | output: 'export' apps are refused at build time. Remove it; KaribaCore serves your app with a Next.js server. |
| Custom servers and Dockerfiles | A hand-written server.js, a custom start command or a Dockerfile is not used. |
| Backends, workers and databases | Only the Next.js app runs: no separate API services, background workers, scheduled jobs or managed databases. Connect to external services such as Neon, Supabase or Upstash. |
| Saving files | Uploads and other files written at runtime are lost on restart or redeploy. Use object storage such as S3 or R2. |
| Private networks | Apps cannot reach private addresses (10.x, 172.16–31.x, 192.168.x and similar) or SMTP port 25. Databases must have a public endpoint. |
| Repository contents | Symbolic links and special files are refused. Reserved variable names (PORT, HOSTNAME, HOST, NODE_ENV, NODE_OPTIONS, NODE_PATH, LD_PRELOAD, NEXT_DEPLOYMENT_ID and anything starting with KARIBACORE_) are set by the platform. |
Before you deploy
- package.json lists
next15 or 16 and has abuildscript. package-lock.jsonis committed, and there are no pnpm, Yarn or Bun lockfiles.- The app is at the repository root, not in a subfolder.
- Every variable the build needs is set, with Build and runtime selected, before the first deploy. Builds that run database migrations need a reachable public database.
- Your home page
/returns a page or a redirect, not an error.
Common build errors
| UNSUPPORTED_ | pnpm, Yarn or Bun lockfile, or a non-npm packageManager field. Convert to npm (see above). |
|---|---|
| NPM_ | No usable package-lock.json. Run npm install and commit package-lock.json. |
| CONFLICTING_ | More than one lockfile. Keep only package-lock.json. |
| NEXT_ | The repository root has no Next.js dependency or build script (often a monorepo). |
| WORKSPACES_ | package.json declares npm workspaces. |
| NEXT_ | Next.js 14 or older, or a canary, beta or rc version. Use a released 15 or 16. |
| NEXT_ | This Next.js release is missing the fix for a known remote-code-execution vulnerability. Upgrade to the latest patch of your minor version. |
| NODE_ | engines.node allows neither Node.js 22 nor 24. |
| UNSUPPORTED_ | Symbolic links or special files, or over 100 MB or 20,000 files. Remove them or move large media out of the repository. |
| BUILD_ | npm ci or your build script failed. The first error in the build output says why: often a missing environment variable or a database the build needs. |
| BUILD_ | The build used more than 3 GiB or took longer than 25 minutes. |
| CLUSTER_ | The app did not answer GET / with 200–399. Check the runtime output and required variables, and that / does not return 404 or 500. |
Still stuck?
Email [email protected] with the deployment ID and error code shown on the failed deployment. Tell us about frameworks or package managers you need; that decides what we support next.