Personal Object Storage - A real POS! https://dropbear.tfks.net
  • Go 97.8%
  • HTML 1.4%
  • Just 0.8%
Find a file
Erik Stephens c02515bb7f
All checks were successful
Release / validate-1 (push) Successful in 49s
Release / validate (push) Successful in 0s
Validate / validate (push) Successful in 54s
Release / release (push) Successful in 1m9s
Merge pull request 'Homebrew tap installer, dropbear roots CLI, and tray daemon lifecycle control' (#22) from add-installer-and-roots-cli into main
Reviewed-on: #22
2026-07-03 04:30:41 +00:00
.agents fix /fjx:pm command 2026-06-26 16:42:59 -07:00
.claude Relocate agent commands/skills into .agents with .claude symlinks 2026-06-24 21:33:55 -07:00
.codex/skills Initial commit 2026-05-06 00:25:46 +00:00
.forgejo/workflows Bump the tfks/homebrew-tap dropbear formula from the release workflow 2026-07-02 21:28:59 -07:00
.githooks improve test & build story 2026-05-25 20:48:07 -07:00
.pi Initial commit 2026-05-06 00:25:46 +00:00
cmd Load the daemon env file as fallback environment for roots CLI validation 2026-07-02 21:28:59 -07:00
doc Add tray daemon start/stop via platform lifecycle controller 2026-07-02 21:28:59 -07:00
internal Load the daemon env file as fallback environment for roots CLI validation 2026-07-02 21:28:59 -07:00
openspec Add tray daemon start/stop via platform lifecycle controller 2026-07-02 21:28:59 -07:00
wiki Document the Homebrew install path, release flow, and roots CLI 2026-07-02 21:28:59 -07:00
.gitignore Add tray daemon start/stop via platform lifecycle controller 2026-07-02 21:28:59 -07:00
.golangci.yml fix the build 2026-05-25 21:33:03 -07:00
AGENTS.md improve test & build story 2026-05-25 20:48:07 -07:00
build.just Add build::dist release recipe and fix CGo-less darwin cross-builds 2026-07-02 21:28:59 -07:00
CLAUDE.md Initial commit 2026-05-06 00:25:46 +00:00
daemon.just Add desktop tray app for daemon status and control 2026-06-30 14:22:30 -07:00
docker-compose.yml Add desktop tray app for daemon status and control 2026-06-30 14:22:30 -07:00
fjx.json Relocate agent commands/skills into .agents with .claude symlinks 2026-06-24 21:33:55 -07:00
go.mod Add macOS FSEvents hint backend for fswatch 2026-06-30 22:28:02 -07:00
go.sum Add macOS FSEvents hint backend for fswatch 2026-06-30 22:28:02 -07:00
HANDOFF.md track HANDOFF.md until done spiking 2026-05-27 20:21:25 -07:00
Justfile Add desktop tray app for daemon status and control 2026-06-30 14:22:30 -07:00
README.md Document the Homebrew install path, release flow, and roots CLI 2026-07-02 21:28:59 -07:00
ROADMAP.md Convert repo to Go template and land manifest/head/tombstone schemas 2026-05-15 15:36:42 -07:00
SPECS.md cli changes 2026-06-01 08:52:27 -07:00
src.just Add desktop tray app for daemon status and control 2026-06-30 14:22:30 -07:00
START.md cli changes 2026-06-01 08:52:27 -07:00
test.just Add on-demand downloads with shelve/fetch and archive completed specs 2026-06-29 15:30:09 -07:00

dropbear

Personal Dropbox, More Cuddly

Single-user file sync between local folders and S3-compatible object storage. The bucket stores content-addressed (SHA-256) blobs, per-device JSON manifests, and tombstones — never a POSIX filesystem. Local state lives in SQLite; each synced root carries its identity in .dropbear/root.toml.

CI Docs

What it does

  • Bidirectional sync with explicit tombstones for deletes and conflict files instead of auto-merge.
  • Removable-drive safe — a missing root is offline, never an inferred deletion.
  • On-demand downloads ("shelving") — remote files can live as zero-byte stubs and materialize when you fetch them.
  • Daemon mode — a background supervisor watches N roots with a filesystem watcher, remote head polling, a loopback status API, and systemd/launchd packaging.
  • Sync modes per root: bidirectional, upload-only, download-only, archive-only.

Non-goals: multi-user, FUSE, realtime collaboration, POSIX-on-S3, full ACL preservation.

Install

brew tap tfks/tap https://git.tfks.net/tfks/homebrew-tap.git
brew install tfks/tap/dropbear   # installs dropbear + dropbear-tray (builds from source)

Then bootstrap the background service — create the credentials env file and run dropbear daemon install; see wiki/runbooks/homebrew-install.md. Manage the folders the daemon watches with dropbear roots list|add|remove (edits daemon.toml in place; --restart applies immediately).

Quick start (from a checkout)

just setup              # check prereqs, configure git hooks, download modules
just build              # compile ./bin/dropbear

# point a folder at a bucket (credentials via env: DROPBEAR_S3_* or AWS_*)
dropbear register ~/Sync \
  --root-id home --device-id laptop \
  --remote-bucket my-bucket --remote-endpoint https://…
dropbear sync ~/Sync    # upload/download pending changes
dropbear status ~/Sync  # health report: identity, classification, conflicts, peers, drift

Run dropbear --help for the full command set. Highlights: register, scan, plan, sync, fetch, shelve, restore, status, clean, gc, retire, daemon, roots.

Development

just            # list every recipe
just check      # format + vet + lint (run after edits)
just validate   # check + tests + secrets scan + dep audit (CI gate)

Where to look next

  • wiki/PROJECT.md — current state, direction, and the index of architectural decisions (wiki/decisions/).
  • wiki/runbooks/ — operational workflows, also runnable as /runbooks:<name> slash commands.
  • AGENTS.md — the operating manual for humans and AI agents working in this repo.
  • openspec/ — proposals and specs for in-flight and shipped changes.
  • doc/ — feature and use-case notes.