Skip to content

Grove

Grove logo showing three oak trees joined into one canopy

A lean Python Blossom server for opaque, content-addressed blobs.

Grove stores bytes exactly as supplied, verifies their SHA-256 identity, and uses signed Nostr authorization to manage ownership.

Get started View the source

Storage beneath a simple canopy

Grove is a deliberately small implementation of the Blossom protocol. It provides the storage boundary an application needs without trying to become a media platform, identity provider, key custodian, or general cloud drive.

Content addressed

Every blob is named by the SHA-256 digest of its exact bytes. Grove hashes each upload while streaming it and rejects content that does not match the signed expected digest.

Nostr authorized

Uploads, owner listings, and deletion use signed kind 24242 authorization events. Grove verifies the event ID, BIP-340 signature, action, expiry, server scope, and blob hash.

Operationally modest

One Python process, a local filesystem, and SQLite provide a comprehensible deployment for a personal server, community service, or appliance.

Grove does not need to know what it holds

Grove stores opaque bytes. It can observe ciphertext, hashes, sizes, media types, uploader public keys, timing, network metadata, and access patterns, but it does not receive Acorn private keys or attachment-encryption keys.

private file -> Acorn encrypts -> opaque ciphertext -> Grove stores
                      |
                      +-> encrypted private record on a relay
                          contains the key and blob reference

This division is intentional. Acorn owns confidentiality; Grove provides content-addressed availability. A generic Blossom client can still upload plaintext, so confidentiality is a property of the client path—not a claim Grove makes about every stored blob.

Understand the Acorn boundary Read the security statement

Part of the Mainstay product family

Grove is an independently useful storage service and a sibling in the Mainstay product family. Mainstay is the unified application, Lockbox is the hardware-first local appliance, and continuity is the shared capability.

Good boundaries, not barriers. Grove provides opaque, content-addressed blob availability; Acorn provides encryption and recovery; Spurline preserves the associated relay events; and Safebox Web provides current user workflows. The Blossom protocol lets those responsibilities cooperate without requiring Grove to become the application, key custodian, or system of record.

Implemented today

Grove implements retrieval, range requests, streaming upload, upload preflight, Nostr authorization, authenticated owner listing, and owner-scoped deletion across BUD-01, BUD-02, BUD-06, BUD-11, and BUD-12.

It intentionally does not yet implement mirroring, media transformation, payments, reports, quotas, or external object storage. The current local filesystem and SQLite design is for a single Grove process.

Review the protocol surface See project status