Skip to content
This repository was archived by the owner on Apr 30, 2026. It is now read-only.

v0.3.0 "Angora"

Choose a tag to compare

@expede expede released this 25 Feb 03:17
· 22 commits to main since this release
5cbdf10

darn v0.3.0

Patchwork alignment, porcelain mode, property tests, and cross-platform CI.

Highlights

  • Patchwork schema alignment β€” Directory and file documents now match Patchwork's FolderDoc/FileDoc conventions (title/docs/url fields, extension/mimeType, automerge URL encoding via bs58check)
  • Porcelain output mode (--porcelain) β€” Machine-readable tab-separated output on every command; no spinners, colors, or box-drawing characters. --force implied.
  • File attributes (.darnattributes) β€” Gitattributes-style rules for overriding text/binary detection. Includes sensible defaults for lockfiles, source maps, and minified assets. Files over 1 MB default to binary.
  • TLS backend selection β€” native-tls (default) for macOS/Linux-gnu, rustls for musl static builds. No OpenSSL needed for statically-linked binaries.
  • Property-based testing β€” 13 modules converted to bolero property tests covering roundtrips, idempotency, and validation invariants.

New Features

  • --porcelain global flag for scriptable output on all commands
  • -v/--verbose global flag enables debug-level tracing
  • .darnattributes file for text/binary/auto classification per glob pattern
  • darn clone now accepts automerge URLs (automerge:<bs58check>) in addition to raw IDs
  • Parallel file discovery with ShardedDirCache and progress callbacks
  • Remote file deletion detection β€” files removed on the remote are cleaned up locally
  • Streaming UTF-8 validation (64 KB chunks instead of full-file reads)

TLS & Build

  • Feature flags: native-tls (default) and rustls on both darn_core and darn_cli
  • musl targets build with --no-default-features --features rustls (pure Rust TLS, no system OpenSSL)
  • tungstenite dependency trimmed to default-features = false to avoid pulling in OpenSSL transitively
  • Release profile: lto = "fat", codegen-units = 1, panic = "abort", strip = "symbols"

CI

  • build.yml β€” 5-target matrix (x86_64/aarch64 Γ— gnu/musl + aarch64-apple-darwin) plus Nix build; automatic nightly releases
  • test.yml β€” ubuntu + macOS matrix plus Nix-based test run
  • quality.yml β€” build, check, nightly rustfmt, clippy with -D warnings
  • cargo-audit.yml β€” daily + on-push dependency vulnerability scanning
  • spellcheck.yml β€” markdown spellcheck with custom dictionary

Testing

  • 13 modules now use bolero property tests (path, file, directory, refresh, peer, manifest, discover, ignore, attributes, workspace/id, workspace/registry, file/name, file/metadata/permissions)
  • Once-guarded test signer ensures CI works without pre-existing ~/.config/darn/signer/
  • Tests migrated from .expect() panics to -> TestResult with ?
  • Removed tests that only exercised external libraries

Bug Fixes

  • File discovery now respects .darnattributes and includes dotfiles like .darnignore
  • Large files (>1 MB) default to binary storage, avoiding expensive character-level CRDT overhead
  • Fixed tungstenite default features pulling in OpenSSL on musl targets
  • Fixed feature unification where workspace dependency defaults re-enabled native-tls

Breaking Changes

  • Automerge document schema updated to Patchwork conventions β€” existing v0.2 workspaces need migration
  • anyhow replaced with eyre/color-eyre
  • Repository moved to github.com/inkandswitch/darn

Dependencies

  • Added: color-eyre, eyre, globset, sha2, bolero (dev)
  • Removed: anyhow
  • Updated: console 0.15 β†’ 0.16
  • Nix: Rust pinned to 1.90.0, nightly rustfmt pinned to 2026-02-23