Skip to content

Runtimes

Plitho supports four runtimes. Set runtime in your plitho.yml, or let Plitho auto-detect from your repo.

Auto-Detection

If you omit runtime, Plitho guesses from your repo contents:

File Present Detected Runtime
package.json Node.js
requirements.txt, Pipfile, pyproject.toml Python
index.html Static
(none of the above) Shell

Node.js

Best for: Express, Next.js, Fastify, Hono, and any Node.js HTTP server.

apps:
  - name: myapp
    runtime: node
    process:
      web:
        cmd: node server.js
        server_port: 3000

What happens:

  • Plitho installs Node.js (version from runtime_version if set, otherwise latest LTS)
  • Runs npm install in your app directory
  • Starts your cmd under systemd

Requirements: A package.json in the repo root.

Python

Best for: Django, Flask, FastAPI, and any WSGI/ASGI Python app.

apps:
  - name: myapp
    runtime: python
    runtime_version: "3.11"
    process:
      web:
        cmd: gunicorn app:app
        server_port: 8000

What happens:

  • Plitho installs Python (version from runtime_version if set)
  • Creates a virtualenv in the app directory
  • Runs pip install -r requirements.txt
  • Starts your cmd under systemd

Requirements: A requirements.txt, Pipfile, or pyproject.toml in the repo root.

Tip

Use gunicorn for Django/Flask (WSGI) or uvicorn for FastAPI (ASGI). Don't use development servers like python manage.py runserver.

Static

Best for: HTML/CSS/JS sites, documentation, landing pages, SPAs.

apps:
  - name: mysite
    runtime: static
    process:
      web:
        cmd: ""

What happens:

  • No process is started — nginx serves your files directly
  • Place index.html at the root of your repo
  • No cmd needed

Shell

Best for: Go, Rust, C, or any compiled language. Also for custom runtimes not covered above.

apps:
  - name: myapp
    runtime: shell
    process:
      web:
        cmd: ./server
        server_port: 8080

What happens:

  • No dependency installation — you handle everything
  • Your cmd runs directly under systemd

Tip

For compiled languages, build locally and deploy the binary with the CLI:

go build -o server .
plitho deploy --at your-server -y ./server

No build step runs on the server — just the binary.

Comparison

Node.js Python Static Shell
Auto-detected package.json requirements.txt index.html fallback
Dependencies npm install pip install none you handle
Process started yes yes no yes
Workers yes yes yes
Best for JS/TS servers Django/Flask/FastAPI HTML sites Go/Rust/custom