Inhank Cloud DocsCloud Docs
Getting started

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.

Node.js
Express, Next.js, NestJS, Fastify, Remix…
Python
Flask, Django, FastAPI…
Go
net/http, Gin, Echo, Fiber…
Dockerfile
Bring your own container.

Auto-detection rules

The first matching file in your repo's root wins. A Dockerfile always takes priority if present.

Detected when your repo hasRuntime
DockerfileCustom Dockerfile (highest priority)
package.jsonNode.js (Express, Next.js, NestJS, Fastify, Remix, …)
requirements.txt, pyproject.toml, Pipfile, poetry.lockPython (Flask, Django, FastAPI, …)
go.modGo
GemfileRuby (Rails, Sinatra)
composer.jsonPHP (Laravel, Symfony)
Cargo.tomlRust
index.html at the rootStatic 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.

LanguageHow to pin
Node.js.nvmrc, or "engines": { "node": "..." } in package.json
Pythonpyproject.toml requires-python, .python-version, or runtime.txt
Gogo or toolchain directive in go.mod
Rubyruby "..." in Gemfile, or .ruby-version
Rustrust-toolchain.toml
Pin your runtime for production

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.

server.js
const port = Number(process.env.PORT) || 8080
app.listen(port, () => console.log(`listening on ${port}`))
Start command
# Service settings → Start command:
gunicorn -b 0.0.0.0:$PORT app:app
main.go
port := os.Getenv("PORT")
if port == "" { port = "8080" }
http.ListenAndServe(":"+port, nil)
Start command
# Service settings → Start command:
bundle exec rails server -b 0.0.0.0 -p $PORT

Hard-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).
Open service settings
Set custom build and start commands per service.

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.

Dockerfile
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 set PORT=8080).
  • EXPOSE is 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.

On this page