pinemere

Tree-structured file synchronization. Content-addressed storage with Merkle-tree deduplication, built for people who have too many copies of things they care about.

$ curl -fsSL https://pinemere.website/install.sh | sh

Why pinemere

Tree dedup

Merkle-tree dedup

Every file gets a content hash. Identical blocks across your entire pool are stored once, synced once. Move a 4 GB directory and transfer zero bytes.

Verification

BLAKE3 verification

End-to-end integrity checks on every transfer. No silent corruption, no partial writes. If a bit flipped, you will know before it propagates.

Streaming

Streaming transfers

Diffs are computed and streamed concurrently. No staging directory, no temp files. Peak throughput on a gigabit link: ~112 MB/s with dedup enabled.

Mesh targets

Multi-target mesh

Define multiple sync targets in pinemere.toml. Each target gets its own schedule, retention, and conflict policy. Fan-out to NAS, cloud, and offsite in one command.

Recent posts

v0.2.4 — streaming dedup and ignore patterns

The release that finally made pinemere usable for daily backups. Streaming mode, .pineignore, and a rewritten manifest format.

How Merkle-tree dedup actually works in pinemere

A walkthrough of the chunking strategy, hash tree construction, and why we ended up with variable-size blocks.

NVMe vs spinning rust: sync benchmarks

Real numbers from syncing 48 GB of photos across different storage backends.