TROVE

Don't hand them your phone.
Give them a link to your Trove.

Trove makes a folder on your phone or computer easily browsable as a website on your local Wi-Fi. Friends scan the QR code or tap the URL, browse, pick and choose which files to download from your folder, all available from any web browser.
No accounts. No Cloud. No Telemetry.

Why this exists

You shouldn't have to hand over your phone.

Your friend has a phone full of vacation photos. You want to keep a few. An unlocked phone passing around a table...what could go wrong?! Their messages, notifications, every other photo they have...the path between you and those snapshots has somehow become an absurdity.

The alternatives don't help. Upload everything to someone else's server, then download — two devices ten feet apart, and every photo takes a tour of a data center: electricity burned, water evaporated to cool the racks, CO2 vented for bytes that never needed to leave the room. Plug in a cable, hope the OS cooperates, dig through DCIM/Camera. Run a third-party "file manager" that wants permission to read every byte on the device, then asks to share more than was meant to be shared.

Trove is the missing tool. They pick the folder to share. Trove turns it into a small read-only website on the Wi-Fi. You tap the link on your phone, see the folder in your browser, pick what you want. Their phone stays in their pocket. Stop the share, the URL goes dark. No accounts were created. No data left the network — no roundtrip, no data center, minimal carbon cost.

It's the way file sharing should have always been.

v0.1.0 — Browse a folder on someone else's device from your own. Phone or desktop, both directions, both speaking Faveat Trove Protocol v1.0. Small, auditable, GPLv3+. No accounts. No Cloud. No Telemetry. Minimal carbon cost.

— state of the project, May 2026

How it works

Four steps. No setup.

There's nothing to configure. The folder you point Trove at is the folder you share. That's the whole mental model.

1

Pick a folder

AndroidOpen the app, tap Pick a folder, choose one in the system picker.

DesktopDrop faveat_trove.py into the folder you want to share.

2

Start sharing

AndroidTap Start sharing.

DesktopRun one command in that folder.python3 faveat_trove.py

3

Share the URL

Trove shows a URL with an auth token, plus a QR code for phones. Copy the link or hold up the QR.

4

They browse

Friend opens the link in any browser. Browses, previews, downloads. Done.

Why it matters

Built like a tool, not a service.

  • It's local. The server listens on your local network — bytes go straight from your disk to the visitor's browser, no third party in between. No data center, no roundtrip — minimal carbon cost, just the watts your router was already drawing.
  • It's auditable. The desktop reference is one Python file, ~170 KB, stdlib only — read the whole thing in an evening. The Android source is a focused Kotlin codebase with a small dependency tree (AndroidX, Compose, Ktor, ZXing). Both are GPLv3+.
  • It's read-only. Visitors can browse, preview, and download. They cannot upload, modify, or delete anything. By design, not by configuration.
  • It's stateless. Stop the server, the share is gone. No accounts, no databases, no log files left on disk.
  • It runs everywhere you do. Linux, macOS, and Windows on the desktop; Android 14+ on the phone. No installer needed for desktop, no Termux needed for Android.
  • It's interoperable. Phone and desktop implementations both speak Faveat Trove Protocol v1.0. A folder served from a phone and a folder served from a laptop look and behave identically — same lightbox, same search, same keyboard shortcuts, byte-level wire compatibility.
  • It's free. GPLv3+ source. Use it, modify it, share it. Forever.

Features

Small surface area. Sharp execution.

Trove does one thing — let your friends browse a folder over the network — and tries to do every part of that thing well.

Three views

Grid, list, and details (with sortable columns). Choose what fits.

Search

Full-text with prefix-match boost, accent-insensitive, copper highlights.

Lightbox + metadata

Preview images, audio, video, PDFs, text. Sidebar shows dimensions, duration, bitrate, embedded album art, line counts.

Multi-select + zip

Pick the files you want. Trove zips and streams them. Metadata extracts in parallel, so 200-video folders populate in seconds.

HTTPS support

Pass --cert + --key. mkcert workflow documented.

Auth tokens

192-bit CSPRNG. Constant-time compare. HttpOnly + SameSite=Strict cookie after first hit. Byte-identical 401s — no path enumeration.

QR code

Pure-Python encoder on the reference; ZXing on Android. Scan from a phone — no typing tokens.

Resumable downloads

RFC 7233 single-range requests. Drop a connection mid-download, the browser reconnects from where it left off.

Hardened by default

Strict CSP with per-request nonce.
X-Content-Type-Options, X-Frame-Options, Permissions-Policy on every response.
POST size + field caps. HEAD disabled.

Themes + keyboard

Dark, light, full keyboard navigation, in-browser help modal.

File formats

What Trove recognizes.

Files in the categories below get the right preview, the right MIME type, and the right thumbnail icon. Anything not in the list still serves and downloads cleanly — it just gets a generic "other" icon.

Image
jpgjpegpnggifwebpbmpsvgicoheicheifavif preview, dimensions in sidebar
Audio
mp3wavflacoggogam4aaacopus preview, duration & bitrate, embedded album art
Video
mp4webmmovm4vmkvavi3gpogvmpgmpeg preview, duration & bitrate (codec support depends on browser)
PDF
pdf inline preview where the browser supports it; download otherwise
Archive
ziptargztgzbz2tbzxztxz7zrarzstjarapkwar entry count for zips
Document
docdocxxlsxlsxpptpptxodtodsodprtfepub typed icon, direct download
Text & code
txtmdrstjsoncsvtsvxmlyamlymltomlinicfgconfpropertiesloghtmlhtmcssscsssasslessjsjsxtstsxktktsjavascalapyrbgorsccppcchhppswiftdartluaplphprsqlshbashzshfishps1batcmdmakemkm3um3u8plscuesrtvttassssarssatomopmlgpxkmlnfodesktopicsvcf inline lightbox preview, line count & encoding in sidebar (capped at 200 KB)
Other
Any extension not listed above generic icon, full download support, range-resume works

The list above is the canonical set as of v0.1.0; both the Python reference and the Android app use it. Both implementations also send the right Content-Type for these extensions even when the OS reports application/octet-stream, which is why files like .mkv play in browsers that should be able to play them.

Privacy commitment

Privacy by architecture.

Trove can't leak data because the architecture doesn't allow for it. There is no telemetry, because there is no network code that calls home. There is no cloud, because there is no server but yours.

  • Read-only by design. Trove cannot upload, modify, or delete any file. The server has no filesystem write paths.
  • Local network by default. The server is reachable from your LAN. On a typical home setup behind NAT the public internet can't reach it. No data leaves your home; no data center is in the loop. Pass --bind 127.0.0.1 to restrict to this machine only.
  • No telemetry, no CDNs, no external requests. The page makes zero outbound calls. Auditable by reading the source.
  • No accounts. Authentication is a per-session token, generated at startup and discarded at shutdown. Nothing to "create."
  • No third parties. Stdlib only. No vendored libraries phoning home, no analytics, no error reporting.
  • Source-available. GPLv3+. Read it, modify it, audit it, share it. Forever.

Hostile networks

Not every Wi-Fi plays nice.

Trove needs a Wi-Fi where two devices on the same network can actually see each other. That's most home Wi-Fi. It's not most guest Wi-Fi.

  • Hotel, café, library, community guest Wi-Fi. These intentionally block devices from seeing each other — "AP isolation" or "client isolation." Trove can't reach across that block; nothing on top of HTTP can.
  • Your own phone's hotspot. Android hotspots may block connected devices from reaching each other. There's no setting to change this. Your best bet is a regular Wi-Fi network.
  • The Android app helps. It detects when you're on a network that's likely to block connections and warns you if nobody connects within 30 seconds, so you're not left wondering whether it's the app or the network.
  • What we don't do. Suggest your visitor join your home Wi-Fi. That solves connectivity at the cost of privacy — your home network stays untouched.

Get Trove

Three paths in. All free.

Install the Android app, run the Python file on a desktop, or clone the source for both. All three speak the same protocol — pick whatever fits the device in your hand.

Native app · Android 14+ · GPLv3+

For your phone

Real launcher icon, real foreground service, system folder picker. No Termux. The Faveat Trove app for Android.

Get the APK →

~170 KB · Python 3.8+ · GPLv3+

For your computer

One Python script. Drop it in the folder you want to share. Run it. Linux, macOS, Windows.

Download faveat_trove.py

Both repos · Codeberg · GPLv3+

For the tinkerers

Source for both implementations, protocol spec, 150+ test security suite, brand assets, build guides.

Open on Codeberg →

Stand on the shoulders

For those who came before, and those who carry on.