{"id":45718776,"url":"https://github.com/inkandswitch/darn","last_synced_at":"2026-04-02T19:33:08.811Z","repository":{"id":340470192,"uuid":"1166143382","full_name":"inkandswitch/darn","owner":"inkandswitch","description":"🪡🧦 Track, merge, and replicate files across peers with no single central server","archived":false,"fork":false,"pushed_at":"2026-03-27T17:35:58.000Z","size":264,"stargazers_count":13,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T01:21:40.735Z","etag":null,"topics":["automerge","cli","filesystem","subduction"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/darn_cli","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inkandswitch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-24T23:19:25.000Z","updated_at":"2026-03-27T17:07:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"5328ced2-51a8-4b80-aae3-13cfdac67081","html_url":"https://github.com/inkandswitch/darn","commit_stats":null,"previous_names":["inkandswitch/darn"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/inkandswitch/darn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inkandswitch%2Fdarn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inkandswitch%2Fdarn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inkandswitch%2Fdarn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inkandswitch%2Fdarn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inkandswitch","download_url":"https://codeload.github.com/inkandswitch/darn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inkandswitch%2Fdarn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31314379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automerge","cli","filesystem","subduction"],"created_at":"2026-02-25T05:18:43.921Z","updated_at":"2026-04-02T19:33:08.805Z","avatar_url":"https://github.com/inkandswitch.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# darn 🪡🧦\n\n\u003cu\u003eD\u003c/u\u003eirectory-based \u003cu\u003eA\u003c/u\u003eutomerge \u003cu\u003eR\u003c/u\u003eeplication \u003cu\u003eN\u003c/u\u003eode\n\nA CLI for managing CRDT-backed files with automatic conflict resolution and peer-to-peer synchronization.\n\n## Overview\n\n`darn` brings collaborative editing to your filesystem. Files are stored as [Automerge] documents and synchronized peer-to-peer using [Subduction]. Think of it as \"Dropbox meets git\" - but without merge conflicts or the vendor lock-in.\n\n```mermaid\ngraph LR\n    A[\"🖥️ Your Machine\u003cbr/\u003e\u003ccode\u003eproject/.darn/\u003c/code\u003e\"]\n    B[\"🖥️ Peer's Machine\u003cbr/\u003e\u003ccode\u003eproject/.darn/\u003c/code\u003e\"]\n    C[\"🖥️ Another Peer\u003cbr/\u003e\u003ccode\u003eproject/.darn/\u003c/code\u003e\"]\n\n    A -- sync --\u003e B\n    B -- sync --\u003e A\n    B -- sync --\u003e C\n    C -- sync --\u003e B\n```\n\n## Features\n\n- **Local-first**: Works offline, syncs when connected\n- **Conflict-free**: CRDTs automatically merge concurrent edits\n- **P2P sync**: No central server required (though you can run one)\n- **Text collaboration**: Character-level merging for text files\n- **Dropbox-like**: Everything syncs by default, use ignore patterns to exclude\n\n## Quick Start\n\n```bash\n# Initialize a workspace\ndarn init\n\n# Add a peer\ndarn peer add --name relay --websocket ws://localhost:9000\n\n# Check status\ndarn tree\n\n# Sync with peers\ndarn sync\n\n# Clone from another machine\ndarn clone \u003croot_id\u003e my-project\n\n# Watch for changes and auto-sync\ndarn watch\n```\n\nSee [`darn_cli/README.md`] for full CLI documentation.\n\n## Installation\n\n### Homebrew\n\n```bash\nbrew tap inkandswitch/darn https://github.com/inkandswitch/darn\nbrew install darn\n```\n\n### Prebuilt Binaries\n\nDownload from [GitHub Releases]. Binaries are available for:\n\n| Platform               | Binary                    |\n|------------------------|---------------------------|\n| macOS (Apple Silicon)  | `darn-macos-aarch64`      |\n| macOS (Intel)          | `darn-macos-x86_64`       |\n| Linux x86_64           | `darn-linux-x86_64`       |\n| Linux x86_64 (static)  | `darn-linux-x86_64-musl`  |\n| Linux aarch64          | `darn-linux-aarch64`      |\n| Linux aarch64 (static) | `darn-linux-aarch64-musl` |\n| Windows x86_64         | `darn-windows-x86_64`     |\n\n### From Source\n\n```bash\ncargo install --path darn_cli\n```\n\n### Nix\n\nFor faster builds, use the [Cachix](https://cachix.org) binary cache:\n\n```bash\ncachix use inkandswitch   # one-time setup\nnix build                 # or: nix develop\n```\n\nWithout Cachix, `nix build` will compile everything from source (slow).\n\n## Crates\n\n| Crate         | Description                                   |\n|---------------|-----------------------------------------------|\n| [`darn_core`] | Core library - workspace, documents, manifest |\n| [`darn_cli`]  | CLI binary - user-facing commands             |\n\n## How It Works\n\n### Sync Model\n\nUnlike git, darn uses a Dropbox-like model: _everything syncs by default_. There's no staging area or explicit tracking step. Use `darn ignore` to exclude files you don't want synced.\n\n### File Storage\n\nFiles are converted to Automerge documents following the Patchwork schema:\n\n| File Type | Storage Format | Merge Semantics             |\n|-----------|----------------|-----------------------------|\n| Text      | `Text` object  | Character-level CRDT        |\n| Binary    | `Bytes` scalar | Whole-file last-writer-wins |\n\n### Storage Layout\n\n```\n~/.config/darn/                     # Global config\n├── signer/signing_key.ed25519      # Ed25519 identity\n├── peers/{name}.json               # Peer configurations\n├── workspaces.json                 # Registry (id → path)\n└── workspaces/\u003cid\u003e/\n    ├── manifest.json               # Tracked files\n    └── storage/                    # Managed by sedimentree_fs_storage\n\nproject/\n├── .darn                           # JSON marker file\n└── ...                             # Your files\n```\n\n### Sync Protocol\n\ndarn uses Subduction for peer-to-peer synchronization:\n\n1. **Sedimentree** partitions documents into content-addressed fragments\n2. **Strata** (hash-based depth levels) enable efficient set reconciliation\n3. **WebSocket** transport with Ed25519 authentication\n\n## Development\n\n```bash\ncargo build    # Build\ncargo test     # Test\ncargo clippy   # Lint\n```\n\nSee [HACKING.md] for development details.\n\n## License\n\nApache-2.0 OR MIT\n\n\u003c!-- Links --\u003e\n\n[Automerge]: https://automerge.org/\n[GitHub Releases]: https://github.com/inkandswitch/darn/releases\n[HACKING.md]: HACKING.md\n[Subduction]: https://github.com/inkandswitch/subduction\n[`darn_cli`]: darn_cli/\n[`darn_core`]: darn_core/\n[`darn_cli/README.md`]: darn_cli/README.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finkandswitch%2Fdarn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finkandswitch%2Fdarn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finkandswitch%2Fdarn/lists"}