Panel apps
Publish the SpipCP documentation on your own panel, at its own subdomain, in one click — no packaging, no upload, no setup.
The Panel apps surface (under Admin → Panel apps) publishes the SpipCP documentation on your own panel — served at its own subdomain, over the panel's own Caddy, with DNS and a certificate handled for you. The docs ship with the panel, so publishing them is one click: choose the subdomain, and they go live.
Publish the docs
- Open Admin → Panel apps.
- Click Publish docs. The subdomain is pre-filled with a sensible default (
docs.<your-panel>); change it if you like. - Click Publish.
That's it. The panel serves the documentation it shipped with at that subdomain, and every “learn more” link inside the panel now points to it. There's nothing to build, package, or upload.
Re-publish after upgrading the panel to serve the docs that ship with the new version. The docs always match the panel version they came with.
Domains and certificates
The docs live at a subdomain (like docs.example.com). The record it needs depends on who runs
your DNS:
- The panel runs your DNS (self-hosted nameservers, or a connected provider account) — the panel
writes the record for you (a
CNAMEfrom the subdomain to the panel's hostname). - Your DNS lives elsewhere — the panel shows you the exact record to add; once you add it, nothing else is needed.
Either way, the certificate issues automatically once the subdomain resolves to the box. If a cert looks pending, it's almost always DNS still propagating.
In-app documentation links follow your panel
The panel's own “learn more” links resolve to wherever your docs are published — so once you publish, every doc link in the UI opens the right page on your docs site. Move your panel to a new domain and the docs URL (and every in-app link) follow, because they're derived from where the panel lives, not hardcoded. When docs aren't published, those links simply hide — never a dead link.
How publishing works (and why it's safe)
Publishing renders a Caddy site block into a shared area and a privileged helper validates it, then reloads the panel's edge:
- It takes a few seconds, not milliseconds (the helper polls for work).
- A bad render is rejected: if the generated config fails validation the reload is refused and the previous config keeps serving. A panel restart during that window still boots the last-known-good config.
- The panel never touches its own Caddy or the Docker socket directly — it renders and signals; the helper (the same one that runs panel self-updates) does the privileged part.
What this deliberately doesn't do
- Host arbitrary apps for you — the panel box has no container runtime. A changelog, a status page, or a tool belongs inside an app (or as a page in these docs), not co-hosted on the panel. Heavy apps belong on a node as a real site, where the panel manages the whole lifecycle.
- Need packaging or uploads — the docs are baked into the panel image; publishing just serves them.
Advanced: the raw operator "edge apps" seam (dropping caddy/apps/*.caddy snippets on the box by
hand) still exists for hand-written Caddy and path-mounted apps. That's a root-on-the-box workflow,
separate from the one-click publish here.
How SpipCP is built
The technology stack behind SpipCP — the frameworks, database, and tooling the panel, worker, and agent are built on, and the principles that shaped the choices.
Security
The security protocols SpipCP is built on — how secrets, access, the fleet, and your hosted sites are protected, and how each control is tested.