BuildNot yet confirmed elsewhere1 publisher2 min readPublished
npm run backup covers two payloads; the rest of a Hubs restore lives in your notes
Hubs Community Edition's bundled scripts archive the Postgres dump and the Reticulum file store. Everything between a bare host and a serving room is a rebuild you perform by hand.
The Engineer · Build desk

What happened
- The bundled Hubs Community Edition scripts archive two things: the PostgreSQL database and the Reticulum file store with its GLB scenes, avatars, thumbnails and room media.
- hcce.yaml, TLS material, DNS records, Kubernetes state and object storage credentials are not in the archive.
- The archive is a data snapshot rather than a running system image, so a restore always lands on a freshly installed instance.
- Point Hubs at an external database rather than the bundled Postgres pod and the scripts quietly back up the Reticulum files alone.
- The author's recommendation is to treat restore as a fresh install plus a data load, and to time it once instead of guessing.
Why it matters
- constraint The number your users ask about is rebuild time plus load time, and only the load has a command behind it, so the figure lives in an operator's notes rather than in the repository.
- cost A studio pays for its own asset library in outage minutes: the file store and disk throughput set the clock while the database portion stays cheap.
- exposure Anyone on managed Postgres is holding two recovery points that no script reconciles, and whatever falls between them is loss nobody agreed to.
- decision Multi-client hosts now have to choose per instance archives with config and secrets stored alongside, or accept that one client's request pulls in the whole cluster.
The two payloads are two halves of one object. The database dump is the record of every room: its title, its permissions, its owner account, its scene assignment and the metadata rows that point at uploaded files, and if you lose it the GLB files are still sitting on disk without belonging to any room [9]. That interlock is a good reason for the scripts to exist. It is also the entire scope of what they hand you, a single timestamped archive in the `data_backup_1234567890123` pattern holding those two payloads and nothing else [8].
Count the inventory instead of reading the feature list. Of the seven categories of state the write-up names around a working instance, the archive owns two and the operator owns five [14]. That ratio is the article's real finding, and the author states the consequence directly: `npm run restore-backup` is the last step of a disaster recovery plan rather than the plan, and every step ahead of it is a rebuild you have to perform from your own notes [6].
Watch where the advice lands for the simplest deployment. A lecturer running one instance on one VPS is told to keep the built-in backup and add a nightly filesystem snapshot of the node, because the recovery target is the whole box rather than a selective extraction [17]. The snapshot is what carries the five categories the archive leaves behind. For the easiest case, in other words, the recommended primary artifact is an image of the machine, and the scripts ride on top of it.
The migration case shows what the rebuild actually contains. Move to a new provider or a new client domain and room URLs, the Reticulum host configuration and certificate issuance all have to be corrected before anyone can join a room, which is why the write-up says to rehearse the whole thing on a scratch host first [15]. None of that is a data-load problem, and none of it is timed by the tooling.
The tradeoff is put plainly in the source: the scripts are simple and they cover the data that matters, on the assumption that you can reconstruct the surrounding installation by hand, so effort saved at backup time is effort repaid, under pressure, at restore time [12]. The half of the procedure with a command attached is the half already documented. The half that decides how long your rooms are dark is the one sitting in somebody's notes, unversioned and untimed.
What to watch
- Whether upstream extends the scripts to capture hcce.yaml and cluster state, which would move the rebuild inside the tooling instead of the notes.
- Anyone publishing a measured end to end restore time against a stated file store size and disk throughput, which is the number currently missing.
- Whether a documented procedure appears for reconciling a managed database's point in time recovery timestamp with the file store archive.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence30
- Adoption
- Insufficient
- Hype gap+5
- Incentives60
- Confidence38
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
The Reticulum file store is the part of the archive that grows without limit and dominates archive size.
- [2]
For a studio with hundreds of client uploaded GLB files, the write-up says to budget the restore window from file store size and disk throughput, because the database restores quickly and the assets dominate the clock.
- [3]
The bundled scripts in Hubs Community Edition back up two things: the PostgreSQL database and the Reticulum file store that holds uploaded GLB scenes, avatars, thumbnails and room media.
- [4]
The scripts do not back up hcce.yaml, TLS material, DNS records, the Kubernetes cluster or object storage credentials.
- [5]
If Hubs is pointed at an external database instead of the bundled Postgres pod, the scripts fall back to backing up the Reticulum files only.
- [6]
According to the write-up, npm run restore-backup is not a disaster recovery plan on its own: it is the last step of one, and everything before it is a rebuild the operator must be able to perform from their own notes.
- [7]
The author advises planning for a restore that is a fresh install plus a data load, and timing it once so the real number is known rather than hoped for.
- [8]
Running npm run backup from the Hubs Community Edition checkout produces a single timestamped archive named in the data_backup_1234567890123 pattern, containing two payloads and nothing else.
- [9]
The Postgres dump is the record of every room, its title, permissions, owner account, scene assignment and the metadata rows that point at uploaded files; lose it and the GLB files still exist on disk but no longer belong to any room.
- [10]
The archive is a data snapshot rather than a running system image, so a restore always lands on a freshly installed instance.
- [11]
For a team on hosted Postgres with automated point in time recovery, the write-up says to treat the two halves separately, because the scripts stop covering the database once it leaves the bundled pod and the restore must line up two independent timelines.
- [12]
The write-up's stated central tradeoff: the built in scripts are simple and cover the data that matters, but they assume the surrounding installation can be rebuilt by hand, so effort saved at backup time is repaid under pressure at restore time.
- [13]
Total recovery time equals rebuild time plus data load time, and only the data load term is automated by the bundled scripts; the rebuild term has no scripted duration.
- [14]
The archive covers 2 of the 7 categories of state the source enumerates around a running instance: 2 captured payloads (Postgres, Reticulum files) against 5 named exclusions (hcce.yaml, TLS material, DNS records, Kubernetes cluster, object storage credentials).
- [15]
For a move to a new provider or a new client domain, the write-up says to rehearse the restore on a scratch host first, because room URLs, the Reticulum host configuration and certificate issuance all have to be corrected before anyone can join a room.
- [16]
For a small agency running several client instances, the write-up says to wrap the scripts in per instance archives with hcce.yaml and secrets stored beside each archive, because a client asking for their world back is a per instance restore and not a cluster restore.
- [17]
For a solo operator running one instance on one VPS, the write-up says the built in backup plus a nightly filesystem snapshot of the node is enough, because the recovery target is the whole box and not a selective extraction.
Sources
1 independent publisher whose own reporting we read for this story.
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.
Topics
- Kubernetes State ManagementFollow
- Self-Hosting OperationsFollow
- WebXR Virtual WorldsFollow
- Backup and Disaster RecoveryFollow
Entities
- Hubs Community EditionFollow
- ReticulumFollow
- PostgreSQLFollow
- K3sFollow
- cert-managerFollow
- Let's EncryptFollow
- SpokeFollow
- YunderaFollow
- CasaOSFollow