Personal Hosting
Serve a static site straight from your own node at <name>.host.dollama.net — private, shared with a group, or public.
Serve a static site straight from your own node at <name>.host.dollama.net — private, shared with a group, or public.
dollama host publishes a folder of static files (HTML, CSS, JS, images, video) at
https://<name>.host.dollama.net. There is no upload and no build server:
the files stay on your disk, and the site is served directly from your own node
over the same tunnel the network already uses. dollama's relay stays content-free — it only
matchmakes the viewer's request to your node.
Because it is served from your machine, a hosted site is live only while that machine is
running dollama network. Stop the node and the site goes offline; start it
again and the site comes back at the same URL. It's meant for personal pages, project docs, demos,
and small team sites — not for high-availability production hosting.
Hosting is a serving feature. It works whenever your node is running
dollama network — it does not depend on whether you are actively using the
network for inference. A hosted node serves your sites even while otherwise idle.
Hosting binds a site to one of your own nodes, so you need a relay account and a running node.
dollama login # link your GitHub identity
dollama network # run your node (serves inference + your sites)
Point host add at the folder that holds your index.html, then pick a name and one scope.
dollama host add ./public --name my-blog --private
Output:
Hosting "my-blog" → /home/you/public
URL: https://my-blog.host.dollama.net
Scope: private
The site is served while your node runs `dollama network`.
Visit https://my-blog.host.dollama.net. A private or group site shows a one-time GitHub login before it lets you in; a public site loads straight away.
Files under the folder are read per request, so saving a file updates the site immediately — reload the page. You only re-run host add to change the name or scope.
dollama host command group
Register a static directory as a hosted site and bind it to the node you're on now. <dir>
becomes the site root (put an index.html there); the path is resolved to an absolute path
and remembered in your config so the node re-serves it across restarts. Provide exactly one
scope.
| Flag | Type | Default | Description |
|---|---|---|---|
| --name | string | required | DNS label for the site; becomes <name>.host.dollama.net. Lowercase letters, digits, hyphens. A short reserved-word list (e.g. api, www, admin) is rejected. |
| --private | bool | false | Owner only. You must be logged in as the owner to view. |
| --group | string | "" | Share with this group (by name). Any member can view. |
| --public | bool | false | Anyone with the link can view — no login. |
dollama host add ./public --name blog --private
dollama host add ./site --name team-wiki --group acme
dollama host add ./dist --name demo --public
List every hosted site you own, with its scope, the node it's bound to, and whether that node is
currently online. A site whose node shows offline is registered but unreachable until
you start dollama network on that machine.
NAME SCOPE NODE STATUS
blog private 6b1e…node-uuid online
team-wiki group 6b1e…node-uuid online
demo public a24c…node-uuid offline
Revoke a hosted site: remove it from the relay and drop the local binding so your node stops serving it on the next reconnect. This deletes the registration, not the files on disk. Safe to run even if the site was already revoked elsewhere.
dollama host rm blog
Every command supports --help for the same reference inline, e.g.
dollama host add --help. You can also create and manage sites from the web dashboard
(dollama app → Hosting), which can change a site's scope in place without a revoke and
re-register.
The scope is enforced fail-closed: the hosting edge asks the relay to authorize each viewer on each request, and any error — unknown site, revoked, non-member, relay unreachable — results in a denial, never an accidental allow. Private and group sites drive the relay's existing GitHub device-OAuth flow; the login page is minimal and self-contained.
A request to <name>.host.dollama.net hits the hosting ingress edge app, which extracts <name>.
The ingress sets its own signed, host-scoped session cookie holding only a viewer id (never a relay token). An unauthenticated viewer of a private or group site gets a login interstitial that runs the relay's GitHub device-OAuth flow.
The ingress asks the relay to resolve <name> into {owner, group, node online, authorized}. The relay computes authorization (owner or group member) next to its membership tables. Any error denies.
The relay proxies the request over your node's standing WebSocket tunnel, stamping the authoritative site name as the Host header so a multi-site node resolves the right root.
The node reads the requested file from the site root — traversal-contained, no code execution — and returns it. The ingress adds fixed security headers and hands the bytes back to the viewer. The relay never stores your content; it only routes.
index.html. A request for / or any subdirectory returns that directory's index.html. There are no directory listings.index.html. An SPA that relies on server-side path rewriting won't deep-link — use hash-based routing, or generate the pages you link to... and symlinks that escape the root are refused.206 Partial Content) so they play and seek in the browser. Large non-media downloads stream in chunks.nosniff, X-Frame-Options: DENY, frame-ancestors 'none', no-referrer)dollama network.Don't host anything that needs guaranteed uptime, or content you wouldn't want visible to the hosting edge in transit.
| Symptom | Likely cause & fix |
|---|---|
host list shows offline | The bound node isn't running. Start dollama network on that machine. |
| Browser shows 404 | No index.html at that path, or the file doesn't exist. Remember there is no SPA rewrite. |
| Browser shows 403 | You're logged in but not authorized — not the owner (private) or not a group member (group). |
| Browser shows 410 | The site was revoked with host rm. Re-register with host add. |
| Browser shows 502 / 504 | The node is offline, slow, or the relay can't reach it. Check dollama network is running and healthy. |
hosting requires a relay | Run dollama network once first so a relay account and node registration exist. |
Still stuck? See the CLI reference for exact flags, or open an issue on GitHub.