Files
spacedrive/docs
Jamie Pineandcapy-ai-staging[bot] 5bc474e722 CLI and daemon housekeeping from the live Mac runs (#3111)
* Default the replication block in core.status so a newer CLI reads an older daemon

A 10dbc18 CLI asking a pre-#3109 daemon for status over --device failed
with 'missing field replication'. ReplicationStatus now derives Default
and the field carries serde(default); a unit test deserializes the
pre-#3109 payload shape. ts-client types regenerated.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Expose replication.paused through sd config get, set and show

The pause switch was only readable through sd status; config get reported
an unknown key. get reads it from the daemon config, set calls the
existing mounts.replication_set_paused action, show lists it, and the
help text names every key get and set accept.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Answer sync traffic for an absent library once per connection, with an Error reply

A member that deleted its copy of a library stays in the other members'
device table, so every catch-up they ran logged an ERROR on the receiver
and timed out on the sender. The multiplexer now logs one WARN per
connection (keyed on the peer's connected_at) and debug after that,
answers requests with the existing SyncMessage::Error variant, and the
backfill request helpers turn that reply into a failure with the peer's
reason so the catch-up loop backs off instead of marking the peer caught
up. No wire change.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Read paired and connected counts in core.status from the network registry

core.status hardcoded both to zero, so sd status said Paired 0 while
sd network status said Paired 1. Both now read the device registry,
addresses come from the endpoint, and the rows are labelled
'Paired devices' and 'Connected devices'.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Resumable, logged sd update with sd update status

Downloads land in <data>/updates/<asset>.<build>.part and resume with a
Range request on the next attempt; a transfer that moves no bytes for
60 s is abandoned for that run with the part kept; the sha256 is checked
on the complete part before either binary is replaced. Every attempt
appends a line with its result and reason to logs/update.log and writes
update-state.json; sd update status prints the running build, the
sd-version.txt marker, the last attempt, any part waiting to resume and
the timer state. After an install the build commit (or release tag) is
written to sd-version.txt beside the binaries, the same marker the local
rebuild script writes. The launchd agent already had RunAtLoad; the docs
now say so.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Ask launchd for 65536 file descriptors in the daemon agent

The plist set 8192 and the core warned about it at every boot.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* List jobs without loading each job's persisted state blob

jobs.list read full job rows, including the serialized job state; an
indexer over millions of files keeps its seen-path set there, so a
hundred rows took 45 s over a remote link and not much less locally.
The listing and the running-job fallback now select only the columns
the row needs through a partial model. The payload is unchanged.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Drop maximize-build-space from the Blacksmith release and server jobs

The action leaves a Blacksmith runner with about 100 MB of root disk.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Register the housekeeping row in PROJECT_STATUS.md

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Make main the branch of record: nightly and core tests trigger on main

main was fast-forwarded to sources at 10dbc18. nightly.yml and
core_tests.yml now trigger on main, with sources kept in the lists for
one release so a stray push there still builds; the nightly docs and
the PROJECT_STATUS.md register row name main.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

* Bound every updater HTTP read with the idle timeout

The checksum and release fetches awaited their bodies with no timeout,
so a stalled proxy could hang a timer run before anything was logged.

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>

---------

Co-authored-by: capy-ai-staging[bot] <305915985+capy-ai-staging[bot]@users.noreply.github.com>
2026-10-05 19:54:56 +00:00
..

Spacedrive Documentation

The Spacedrive docs site, built with Fumadocs on Next.js. This directory is a standalone app with its own bun install, separate from the repo workspace.

bun install
bun run dev      # dev server on localhost:3000
bun run build    # production build

Or from the repo root: just dev-docs / just build-docs. Requires Node 20+.

Layout

  • overview/, core/, extensions/, cli/, react/, gpui/: published MDX content, one sidebar tab per folder. Navigation order lives in each folder's meta.json.
  • app/, lib/, components/: the Next.js app. Pages are served from the site root, so core/jobs.mdx renders at /core/jobs.
  • public/: images, logo, favicon.
  • plans/, core/design/, design/, archive/: internal working docs, not part of the site.
  • WRITING_GUIDE.mdx, CODE_COMMENTS.mdx: contributor guides, not published.

Writing pages

Frontmatter supports title, description, and sidebarTitle (a shorter name for the sidebar). Callouts, <Steps>, <Tabs>, <Cards>, and <Accordions> are registered globally, so no imports are needed in MDX. Every page is also served as raw markdown at <path>.md and indexed in /llms.txt.