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_versionif set, otherwise latest LTS) - Runs
npm installin your app directory - Starts your
cmdunder 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_versionif set) - Creates a virtualenv in the app directory
- Runs
pip install -r requirements.txt - Starts your
cmdunder 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.htmlat the root of your repo - No
cmdneeded
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
cmdruns 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 |