Skip to main content

PICARD

Protocol-Introspecting Chunk Adapter for Resilient Data

For the self-taught, the unconventional, and anyone who was ever told to stay in their lane. Keep building, keep exploring.


PICARD encrypts your data, slices it into chunks, and scatters those chunks across whatever protocol endpoints you configure: DNS TXT records, social media APIs, MQTT brokers, S3 buckets, Bluetooth advertisements, or all of the above at once. Pull it back and it reassembles. With multi-adapter scatter, no single endpoint holds enough ciphertext to reconstruct anything. No central server. No monthly storage fees. It mounts as a regular filesystem.

Not efficient. Protocol-agnostic.


How It Works

plaintext
  → AES-256-GCM encrypt     (Argon2id key, per-block salt + nonce)
  → PCHK chunk              (protocol-sized pieces)
  → scatter across adapters (DNS, Redis, Reddit, S3, MQTT, …)
  → sealed envelope          (HKDF sub-key, correlation tag per adapter)

retrieve
  ← fan out to all adapters
  ← collect, verify, assemble
  ← decrypt

Each block is independently encrypted with its own random salt and nonce. Chunks scatter round-robin or via RAID profiles. No adapter sees plaintext; no adapter sees enough ciphertext to reconstruct anything.

The local index (an AES-256-GCM encrypted SQLite database) maps paths to chunk locations. Lose the passphrase, lose the data.

The origin: a wall and some birds

It was a cool Berlin morning. From my patio I stared at a plain stucco wall capped by red brick. A blur of wings caught my eye, a small bird veering into a drain hole near the roofline and vanishing. Another head appeared from a different hole, chirping. Five drain holes, five nests. The gutters were meant to move water, not host families, yet the birds had found shelter, cover, and easy access. I had never noticed because I had never bothered to look.

Our digital infrastructure carries more than it was designed to store. DNS TXT records accept arbitrary text within spec. MQTT retained messages persist data on the broker. ICMP echo packets carry a payload field. Social media APIs accept freeform structured text. Each of these protocols defines fields intended for metadata, discovery, or diagnostics. Those fields can carry bytes just as well as their designers' intended use cases.

Medium: A Wall, Some Birds, and The Internet Protocols We Aren't Looking At, Christopher Neitzert, May 2025


Web Dashboard

picard web opens a browser dashboard at http://localhost:8471.

PICARD dashboard overview Storage surface by category, adapter health, and encryption details at a glance.

PICARD adapter registry 259 adapters browsable by category, with required parameters and one-click add.


Quickstart

pip install picard-store

export PICARD_PASSPHRASE="your-passphrase"   # or picard will prompt

picard init                                  # create picard.toml

# edit picard.toml to add your adapters, then:
picard put myfile.txt --as /docs/myfile.txt
picard get /docs/myfile.txt -o recovered.txt
picard ls
picard tree /

From source:

git clone https://github.com/neitzert/picard
cd picard
pip install -e ".[dev]"
python -m pytest --tb=short -q

Configuration

# picard.toml

[general]
block_size = 65536

[[adapters]]
name       = "dns-primary"
type       = "dns"
enabled    = true
params     = { nameserver = "10.10.10.10", domain = "chunks.example.com" }

[[adapters]]
name       = "s3-backup"
type       = "s3"
enabled    = true
tor_proxy  = true              # route through Tor SOCKS5
params     = { bucket = "picard-chunks", prefix = "data/" }

[[adapters]]
name         = "reddit-stash"
type         = "reddit"
enabled      = true
browser_mode = "headed"        # api | headless | headed
params       = { subreddit = "u_myuser" }

[[raid]]
level    = "raid5"
adapters = ["dns-primary", "s3-backup", "filesystem"]

[scatter.paranoid]
raid_level   = "raid10"
min_adapters = 4

Scatter profiles: quiet, resilient, speed, paranoid


CLI Reference

Core operations

Command Description
picard put <file> --as <path> Store a file
picard get <path> -o <file> Retrieve a file
picard ls [path] List files
picard rm <path> Delete
picard cp / mv Copy / rename
picard tree / Directory tree
picard verify <path> Chunk integrity check

Filesystem

Command Description
picard mkdir / ln / head / tail / touch / log / stat / find Standard filesystem operations
picard fsck Consistency check and repair
picard mount <mountpoint> FUSE mount
picard webdav WebDAV server (port 8471)

Infrastructure

Command Description
picard web Web dashboard (dark/light, drag-and-drop)
picard scatter-report Storage surface map
picard adapters / profiles List adapters and scatter profiles
picard recover Journal crash recovery
picard tor-check / tor-serve / tor-peer / tor-mount Tor operations
picard init Create default picard.toml

Most commands accept --json for machine-readable output.


Filesystem Mount

picard mount exposes the virtual filesystem via FUSE. Standard shell tools work: cp, ls, mv, rm, mkdir, cat, chmod, ln -s, and df all behave as expected.

Platform requirements:

Platform Requirement
Linux sudo apt install libfuse-dev (or distro equivalent)
macOS brew install --cask macfuse
Windows WinFSP, or use picard webdav with Explorer's Map Network Drive

Known limitations: no hard links, no file locking (flock/fcntl). Writes buffer the whole file in RAM and flush on close. Do not run SQLite WAL mode or Git object stores directly inside a mount.

picard webdav is the zero-driver alternative. Start it, point Explorer, Finder, or Nautilus at http://localhost:8471, and drag files in.


MCP Server

PICARD exposes storage tools as an MCP server for Claude and other MCP-compatible agents:

{
  "mcpServers": {
    "picard-store": {
      "command": "picard-mcp",
      "env": { "PICARD_PASSPHRASE": "your-passphrase" }
    }
  }
}

See docs/mcp.md for available tools and setup details.


Adapters

259 adapters in three tiers by authorization requirement. Full list: docs/adapters.md.

Tier 1: Your own infrastructure

No third-party authorization required. These are the primary use case.

Category Examples
Local / database Filesystem, Redis, PostgreSQL, S3, SQLite, etcd, CouchDB, Cassandra
Self-hosted services WebDAV, Matrix (own homeserver), MQTT (own broker), XMPP, IRC
Mail / calendar SMTP/IMAP, CalDAV, CardDAV
P2P / decentralized IPFS, BitTorrent DHT, Nostr, Ethereum (own wallet), Tor hidden services
Steganography Image LSB, audio WAV LSB, EXIF, XLSX hidden cells, ZIP comments

Tier 2: Third-party platforms

Require a valid account and API authorization on the relevant platform. Each adapter's source includes a platform-specific Terms of Service notice.

Category Examples
Social Bluesky, Reddit, Discord, Telegram, Mastodon, Twitter/X, Tumblr
Media YouTube, TikTok, Spotify, SoundCloud, Imgur, Flickr, Twitch
Professional LinkedIn, GitHub, Slack, Notion, HuggingFace, Medium, Hacker News, Pinterest, Steam
Package registries PyPI, npm, crates.io, RubyGems

Note on package registry adapters (PyPI, npm, crates.io, RubyGems): these are research demonstrations. Some contain intentional friction in their write paths that prevents out-of-the-box use against public registries. If an adapter silently succeeds but data does not appear, or fails with an unexpected protocol error, read the source. The fix in each case is a small, deliberate change. This is by design.

Tier 3: RF spectrum and regulated hardware

Authorization requirements vary by jurisdiction, frequency, and device type. Read the regulatory notice in each adapter's source before use.

Category Examples
Radio LoRa/LoRaWAN, SDR (receive-only without license), WiFi beacons, AX.25/amateur radio
Short-range Bluetooth LE, NFC, ZigBee
Hardware buses CAN bus (own hardware only), USB-HID, serial

Each adapter implements write_chunk() and read_chunk(). It does not manage encryption or track manifests. It stores bytes and retrieves them.


Cryptographic Posture

All symmetric: Argon2id key derivation, HKDF-SHA256 sub-keys, AES-256-GCM authenticated encryption, HMAC-SHA256 for transport auth and correlation tags. No public-key cryptography in the storage path.

AES-256 provides 128-bit security against Grover's algorithm on a fault-tolerant quantum computer, matching the security target of NIST post-quantum standards. The ciphertext format carries a version byte so the cipher suite can be swapped without re-encrypting stored data.


Honest Downsides

PICARD is not magic, perhaps poetic. It is certainly not efficient, will not be fast, and offers zero guarantees.

  • Reads are slow. Writes may partially fail.
  • Chunk loss means data loss. No global index, no recovery path if too many chunks go missing.
  • Best for small, critical datasets (a few MB to low GB). Larger files compound both retrieval slowness and chunk-loss risk.
  • Adapters age. As protocols evolve or get patched, adapters may need updates.
  • Invisible to standard monitoring. Chunks are opaque to conventional storage tools unless you know where to look.

If you need uptime guarantees, deterministic performance, or expect everything to work without tinkering, this is probably not for you.


PICARD is an experimental computer science research project exploring protocol-agnostic storage abstractions. It is published for educational, experimental, and interoperability research purposes under the MIT license.

Users are solely responsible for ensuring their use complies with applicable law and the terms of service of any third-party platform or network accessed through a PICARD adapter. PICARD does not authorize access to systems, accounts, or infrastructure the user does not own or have explicit permission to use.

Full dual-use notice and terms

Like most security and systems research, PICARD has dual-use capabilities: the same techniques that enable resilient personal storage can, in principle, be misused. Publishing this work does not endorse or encourage misuse; it serves the community's interest in understanding these surfaces so they can be studied, defended against, and properly accounted for.

Acceptable use. Any use of PICARD to violate applicable law (including but not limited to computer fraud and abuse statutes, electronic communications privacy law, or the Terms of Service of any platform) immediately and irrevocably voids any claim to acceptable use under this project. If you use PICARD to break the law or violate platform Terms of Service, you are entirely on your own. The authors provide no support, defense, or indemnification for unlawful or unauthorized use. This is not a disclaimer of liability; it is a boundary.

Each adapter's source includes a platform-specific notice. Read it before you use the adapter.

The full terms are in TERMS.md. On first run, picard will prompt you to accept them. Pass --accept-terms to accept permanently, or set PICARD_ACCEPT_TERMS=1 for scripted use.

By using PICARD you accept full responsibility for your actions and their consequences. You agree to indemnify, defend, and hold harmless the authors, contributors, and maintainers of PICARD from and against any and all claims, liabilities, damages, losses, costs, and expenses arising out of or related to your use or misuse of this software.

On ethics. Ethics in this context is the mortar between the bricks, not an optional coat of paint. The premise of this research is not that protocol fields are available for any purpose; it is that understanding them as storage substrates is a useful contribution to the literature, and that the community benefits from knowing these surfaces exist. Exploration is fine, even necessary, but it comes with the obligation to think through collateral damage, disclose what you find, and leave breadcrumbs for defenders to address if they choose. Running PICARD responsibly means using it on infrastructure you control, resisting the urge to turn research findings into personal leverage, and being ready to stop when the experiment tips from curiosity into something else.


Test Coverage and Contributing

The core cryptographic path, orchestrator, RAID layer, index, and scatter profiles are fully tested (4,236 tests). Many protocol adapters have unit tests with mocked transports; a significant portion has not been exercised against live infrastructure, particularly the browser-automation paths and adapters for exotic protocols (RF, hardware buses, satellite, raw sockets).

Pull requests are welcomed, especially for:

  • Integration tests for adapter browser paths (see tests/integration/)
  • Tests or fixes for untested or partially-tested adapters
  • Real-world validation of exotic protocol adapters
  • New adapters (include at least a mocked unit test covering write_chunk(), read_chunk(), and delete_chunk())
  • Documentation improvements and usage examples

Open an issue for bugs or questions.


Documentation

Doc Contents
Architecture Data flow, key hierarchy, RAID, scatter profiles
Adapters Full adapter list, writing custom adapters
CLI Reference All commands with examples
MCP Server Agent storage interface, setup, available tools
FUSE Mount Mounting, performance, platform notes
WebDAV Network drive mounting, native OS drag-and-drop
Tor Anonymity, hidden services, .onion peers
Network Transport layer, peer discovery, remote adapters
Identifying PICARD in the Wild Observability, confidentiality, and attribution across 18 platforms

License

MIT. Copyright 2024–2026 Christopher Neitzert.

In the wild, anything left open long enough becomes habitat.

Metadata

Release files for picard-store 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for picard-store 0.2.0
File Size Uploaded
picard_store-0.2.0.tar.gz 722.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for picard-store 0.2.0
File Interpreter ABI Platform
picard_store-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / picard_store-0.2.0.tar.gz

Download URL picard_store-0.2.0.tar.gz
Size 722.4 kB
Tags Source
SHA-256 checksum
How to use checksums
01d4d52974921770d6e15f1be5bec42dc5d07905eeac7efe8662881d769e9bb7
BLAKE2b-256 checksum
How to use checksums
f98c7623b726206fdc6c4607e01b1064ef7d74bc7eacc50d964187f3289c23f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / picard_store-0.2.0-py3-none-any.whl

Download URL picard_store-0.2.0-py3-none-any.whl
Size 557.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
41e5974d0f44b2f1fc5b0f353905f57a1a7dc0e55e16d3c184bbf9acb136687c
BLAKE2b-256 checksum
How to use checksums
f3515f0dc48503f97f9c2315247c290a420ff49870b4f5b29b71204f5fed95b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page