Ready-to-use app manifests for Setu, the control panel for single-binary web apps.
A manifest is one TOML file per app version. It is the only app-specific knowledge Setu has: where to download the release (and its sha256), which executable to run, whether the app needs a PostgreSQL database or persistent directories, how its environment is built (bind address, database URL, generated secrets, a one-time admin password), its health endpoint, default resource limits, and what a backup holds.
The full reference is docs/MANIFEST.md in the Setu repository.
In the panel: Apps → Add, then paste the file or its raw URL. Or with the API:
curl -X POST https://<panel>/api/v1/apps \
-H 'Content-Type: application/json' -H 'Origin: https://<panel>' \
--cookie '<session>' \
-d '{"url": "https://raw.githubusercontent.com/setucp/manifests/main/miniflux/manifest.toml"}'Then create a site from it (Sites → New).
| directory | app | release format |
|---|---|---|
miniflux/ |
Miniflux feed reader (Go, PostgreSQL) | bare executable (format = "binary") |
hello-axum/ |
Setu's Rust sample app (Axum + sqlx) | tar.gz archive |
vyasa/ |
Vyasa CMS (Rust, PostgreSQL), x86_64 and aarch64 | tar.gz archive |
- Create
<app-id>/manifest.toml(the directory name is the manifest'sapp.id). - Point
run.binary."x86_64-linux"at an official release asset and put the sha256 you computed from the downloaded file (sha256sum), not one copied from a web page. Useformat = "binary"when the asset is the executable itself, the defaulttar.gzotherwise. - Check it:
POST /api/v1/apps/validatewith the TOML on any Setu panel stores nothing and reports every error with its line number. - Provision a site from it and confirm the health path answers, then open a pull request.
Release URLs are pinned per version; a new upstream version is a new
manifest version (bump app.version, url and sha256 together).
.github/workflows/vyasa-release.yml checks for a new Vyasa release every
six hours and opens a pull request moving vyasa/manifest.toml to it
(tools/bump-vyasa.py, which computes each archive's sha256 itself). Merge
it, then add the manifest URL in the panel (Apps → Add) to offer the
update to sites.