Deploy an app
Run deploy in your app’s folder. Dukoi works out what the app is and how to start it, so most apps need no config at all.
Deploy
$ npx dukoi deploy ✓ Built on this computer ✓ Installed dependencies ✓ Packed hono-api (2.4 MB) ✓ Uploaded to a024 ✓ Started and healthy (release 0004) Local http://192.168.0.112:3000 Logs dukoi logs hono-api Public dukoi expose hono-api Done in 9.8s
Pass a folder to deploy from somewhere else: dukoi deploy starters/hono-api.
What runs
- Node apps. A folder with
package.json. Dukoi runsscripts.start, or elsemain,index.js,server.jsorsrc/index.js. - Static sites. A folder with
index.htmland nopackage.json. Dukoi serves it.
The phone runs Node 24 directly, so scripts.start must be node <file>.js. Build TypeScript first: if there’s a build script, deploy runs it on your computer before uploading.
What your app needs
Listen on the port in PORT. Dukoi checks that the app answers there within 10 seconds before it switches traffic over.
PORTandHOST: where to listen.DATA_DIR: a folder that survives deploys and rollbacks. Keep databases and uploads here.NODE_ENVisproduction.
Bots and workers that open no port can skip the check with --no-health-check. They count as healthy if they’re still running after 3 seconds.
What gets uploaded
Deploy copies the folder, installs production dependencies on your computer and uploads the lot, so the phone never runs npm. It always leaves out .git, node_modules, .env and .env.local.
Change a guess
You don’t need a config file. Add dukoi.json only to change what Dukoi worked out. Every field is optional, and "healthCheck": false turns the check off.
{
"name": "my-api",
"start": "node dist/server.js",
"healthCheck": "/health",
"ignore": ["fixtures"]
} The name comes from --name, then dukoi.json, then package.json, then the folder name.