Jirafeau vs PicoShare: Simple File Sharing Compared

Quick Verdict

Jirafeau is the better pick if you need expiring links, password-protected downloads, or one-time download links. PicoShare wins if you want the simplest possible file host with permanent links and guest upload support. Both are lightweight, but they solve different problems: Jirafeau is built for ephemeral sharing, PicoShare is built for persistent hosting.

Overview

Jirafeau and PicoShare are both self-hosted file sharing tools that prioritize simplicity over features. Neither tries to be a full file management platform like Nextcloud. They exist to do one thing: let you upload a file and get a shareable link.

Jirafeau is a PHP application that has been around since 2008. It stores everything on the filesystem with no database, supports expiring links, password protection, and one-time downloads. It is mature, stable, and does exactly what it advertises.

PicoShare is a newer Go application by Michael Lynch (of TinyPilot fame). It compiles to a single binary, uses SQLite for metadata, and strips file sharing down to its absolute minimum. No expiration by default, no password protection on individual files — just upload and share. It adds guest upload links, which let you give someone a URL to upload files to your server without an account.

Feature Comparison

FeatureJirafeauPicoShare
LanguagePHPGo (single binary)
DatabaseNone (file-based)SQLite
Expiring linksYes (configurable per upload)No by default (server-wide max configurable)
Password-protected downloadsYesNo
One-time downloadsYesNo
Guest upload linksNoYes
Max file sizeConfigurable (PHP limits)Configurable (no hard limit)
AuthenticationAdmin passwordShared passphrase
APIBasic (upload/delete)REST API
File previewYes (images, text)Yes (images, video, audio, text)
Docker image size~30 MB~25 MB
RAM usage (idle)~15 MB~20 MB
LicenseAGPL-3.0AGPL-3.0
Mobile-friendly UIBasicYes
Custom brandingLimitedNo
File deduplicationYes (content-hash based)No
Encryption at restOptional (server-side)No

Docker Compose Configurations

Jirafeau

Create a docker-compose.yml:

services:
  jirafeau:
    image: mojo42/jirafeau:4.6.0
    container_name: jirafeau
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - jirafeau-data:/data
      - jirafeau-media:/jirafeau/media
    environment:
      # Admin password for the web interface
      - ADMIN_PASSWORD=change-this-to-a-strong-password
      # Base URL where Jirafeau is accessible (include trailing slash)
      - WEB_ROOT=https://share.example.com/
      # Maximum upload size in bytes (0 = unlimited, limited by PHP)
      - MAX_FILE_SIZE=0
      # Default expiration time: none, minute, hour, day, week, month, quarter, year
      - DEFAULT_EXPIRATION=month
    networks:
      - jirafeau-net

networks:
  jirafeau-net:

volumes:
  jirafeau-data:
  jirafeau-media:

Start the stack:

docker compose up -d

Jirafeau is accessible at http://your-server:8080. The admin panel is at http://your-server:8080/admin.php.

PicoShare

Create a docker-compose.yml:

services:
  picoshare:
    image: mtlynch/picoshare:1.4.3
    container_name: picoshare
    restart: unless-stopped
    ports:
      - "4001:4001"
    volumes:
      - picoshare-data:/data
    environment:
      # Port PicoShare listens on inside the container
      - PORT=4001
      # Shared secret used to authenticate to the web UI
      - PS_SHARED_SECRET=change-this-to-a-strong-passphrase
      # Optional: maximum file lifetime (e.g., "876000h" for ~100 years, or "720h" for 30 days)
      # Omit or set to "never" for no expiration
      # - GC_LIFETIME=never
    networks:
      - picoshare-net

networks:
  picoshare-net:

volumes:
  picoshare-data:

Start the stack:

docker compose up -d

PicoShare is accessible at http://your-server:4001. Log in with the shared secret you configured.

Installation Complexity

Both tools are trivially simple to deploy. Jirafeau needs no database — it writes everything to the filesystem. PicoShare uses an embedded SQLite database that requires zero configuration. Neither has external dependencies like PostgreSQL or Redis.

Jirafeau has slightly more configuration surface because of its PHP heritage. You may need to tweak PHP upload limits if you hit file size caps. PicoShare avoids this entirely since Go handles uploads natively without intermediary limits.

Winner: PicoShare, by a small margin. Fewer configuration knobs means fewer things to get wrong.

Performance and Resource Usage

Both tools are extremely lightweight. You can run either on a Raspberry Pi without breaking a sweat.

ResourceJirafeauPicoShare
RAM (idle)~15 MB~20 MB
RAM (under load)~30 MB~40 MB
CPUNegligibleNegligible
DiskApplication + uploaded filesApplication + SQLite DB + uploaded files

Jirafeau’s file deduplication saves disk space if users upload identical files. PicoShare stores every upload independently.

For large files, PicoShare handles uploads more cleanly because Go’s HTTP server streams data directly to disk. Jirafeau relies on PHP’s upload handling, which can hit memory limits with very large files unless you tune php.ini settings.

Community and Support

MetricJirafeauPicoShare
GitHub stars~1,000~2,000
First release20082022
Update frequencyOccasionalRegular
DocumentationGood (README + wiki)Good (README + blog posts)
Community sizeSmall but stableGrowing

Jirafeau is mature and stable. It does not change often because it does not need to — the feature set is complete for its purpose. PicoShare is more actively developed, with Michael Lynch regularly adding features and writing detailed blog posts about the development process.

Use Cases

Choose Jirafeau If…

  • You need expiring links — send a file that self-destructs after a set time
  • You want password-protected downloads — share sensitive files with a second layer of security
  • You need one-time downloads — the link dies after a single use, useful for sensitive documents
  • You want file deduplication — save disk space when users upload the same file multiple times
  • You prefer no database at all — pure filesystem storage is easier to back up and migrate
  • You want encryption at rest for uploaded files

Choose PicoShare If…

  • You want the simplest possible file host — upload, get link, done
  • You need guest upload links — let others upload files to your server without giving them an account
  • You want permanent links by default — no worrying about links expiring unexpectedly
  • You prefer a modern Go binary over PHP — single process, no web server configuration
  • You want better media previews — PicoShare renders video, audio, and text files in the browser
  • You value active development and a developer who writes about the project publicly

Final Verdict

These two tools serve different philosophies of file sharing.

Jirafeau is the better choice for ephemeral, security-conscious sharing. If you routinely send files that should expire, require a password, or self-destruct after one download, Jirafeau has those features built in and battle-tested over nearly two decades. It is the self-hosted equivalent of a secure file drop.

PicoShare is the better choice for permanent, no-fuss file hosting. If you want to upload a file, get a link, and have that link work forever, PicoShare does that with zero friction. Guest upload links are a killer feature that Jirafeau lacks — they let you receive files from others without exposing your admin interface.

For most people running a personal file sharing server, PicoShare is the better starting point. Its defaults are sane, the UI is cleaner, and guest uploads cover the most common “I need someone to send me a file” use case. Switch to Jirafeau if you specifically need expiring or password-protected links — those features are worth the slightly more complex setup.

Comments