Supported runtimes
Languages and frameworks Inhank Cloud detects out of the box.
Inhank Cloud automatically detects your language and framework from common manifest files in your repository. You usually don't have to configure anything — just push your code.
Auto-detection rules
The first matching file in your repo's root wins. A Dockerfile always
takes priority if present.
| Detected when your repo has | Runtime |
|---|---|
Dockerfile | Custom Dockerfile (highest priority) |
package.json | Node.js (Express, Next.js, NestJS, Fastify, Remix, …) |
requirements.txt, pyproject.toml, Pipfile, poetry.lock | Python (Flask, Django, FastAPI, …) |
go.mod | Go |
Gemfile | Ruby (Rails, Sinatra) |
composer.json | PHP (Laravel, Symfony) |
Cargo.toml | Rust |
index.html at the root | Static site (HTML/CSS/JS, Hugo, Jekyll, Astro static, Next.js export) |
Pinning a runtime version
Pin a specific version using your language's standard mechanism. Inhank Cloud reads it during the build.
| Language | How to pin |
|---|---|
| Node.js | .nvmrc, or "engines": { "node": "..." } in package.json |
| Python | pyproject.toml requires-python, .python-version, or runtime.txt |
| Go | go or toolchain directive in go.mod |
| Ruby | ruby "..." in Gemfile, or .ruby-version |
| Rust | rust-toolchain.toml |
If you don't pin, Inhank Cloud uses the latest stable version of the detected runtime, which can change without notice. Pin your version for production services to avoid surprises.
Listening on the right port
Every service is given a PORT environment variable (default 8080).
Your application must listen on that port for traffic to reach it.
const port = Number(process.env.PORT) || 8080
app.listen(port, () => console.log(`listening on ${port}`))# Service settings → Start command:
gunicorn -b 0.0.0.0:$PORT app:appport := os.Getenv("PORT")
if port == "" { port = "8080" }
http.ListenAndServe(":"+port, nil)# Service settings → Start command:
bundle exec rails server -b 0.0.0.0 -p $PORTHard-coding a different port is the single most common cause of failed deployments. See Deployments: troubleshooting.
Custom build & start commands
If our detection doesn't match what you need, override them in your service's Settings tab:
- Build command — runs once at the end of the build (e.g.
npm run build). - Start command — runs to start your application (e.g.
node dist/server.js).
Custom Dockerfile
If your project doesn't fit the supported runtimes — or you already have a
working Dockerfile — add one at the repository root. Inhank Cloud will
use your Dockerfile instead of auto-detecting.
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN npm run build
EXPOSE 8080
CMD ["node", "dist/server.js"]Requirements:
- Your image must listen on
PORT(we setPORT=8080). EXPOSEis informational; the actual port comes from the env variable.- Build for
linux/amd64. The Inhank Cloud build pipeline does this automatically.
Runtime not listed?
Ship a Dockerfile and Inhank Cloud will use it. If you'd like first-class
support for a runtime, let us know.
