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.
Web Dashboard
picard web opens a browser dashboard at http://localhost:8471.
Storage surface by category, adapter health, and encryption details at a glance.
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.
Research and Legal Notice
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(), anddelete_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)
| File | Size | Uploaded | |
|---|---|---|---|
| picard_store-0.2.0.tar.gz | 722.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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