Minimalist, easy-to-host service for sharing images and other files.
License: AGPL-3.0. Built with: Go, HTML, TypeScript, Shell, JavaScript, Nix, CSS, Dockerfile. Website: https://pico.rocks. Source: https://github.com/mtlynch/picoshare.
### From Docker To run PicoShare within a Docker container, mount a volume from your local system to store the PicoShare sqlite database. ```bash docker run \ --env "PORT=4001" \ --env "PS_SHARED_SECRET=somesecretpass" \ --publish 4001:4001/tcp \ --volume "${PWD}/data:/data" \ --name picoshare \ mtlynch/picoshare ``` ### From Docker + cloud data replication If you specify settings for a [Litestream](https://litestream.io/)-compatible cloud storage location, PicoShare will automatically replicate your data. You can kill the container and start it later, and PicoShare will restore your data from the cloud storage location and continue as if there was no interruption. ```bash PORT=4001 PS_SHARED_SECRET="somesecretpass" LITESTREAM_BUCKET=YOUR-LITESTREAM-BUCKET LITESTREAM_ENDPOINT=YOUR-LITESTREAM-ENDPOINT LITESTREAM_ACCESS_KEY_ID=YOUR-ACCESS-ID LITESTREAM_SECRET_ACCESS_KEY=YOUR-SECRET-ACCESS-KEY docker run \ --publish "${PORT}:${PORT}/tcp" \ --env "PORT=${PORT}" \ --env "PS_SHARED_SECRET=${PS_SHARED_SECRET}" \ --env "LITESTREAM_ACCESS_KEY_ID=${LITESTREAM_ACCESS_KEY_ID}" \ --env "LITESTREAM_SECRET_ACCESS_KEY=${LITESTREAM_SECRET_ACCESS_KEY}" \ --env "LITESTREAM_BUCKET=${LITESTREAM_BUCKET}" \ --env "LITESTREAM_ENDPOINT=${LITESTREAM_ENDPOINT}" \ --name picoshare \ mtlynch/picoshare ``` Notes: - Only run one Docker container for each Litestream location. - PicoShare can't sync writes across multiple instances. ### Using Docker Compose To run PicoShare under docker-compose, copy the following to a file called `docker-compose.yml` and then run `docker-compose up`. ```yaml version: "3.2" services: picoshare: image: mtlynch/picoshare environment: - PORT=4001 - PS_SHARED_SECRET=dummypass # Change to any password ports: - 4001:4001 command: -db /data/store.db volumes: - ./data:/data
Self-hosting gives you three things SaaS can’t: data ownership (the files live on disks you control), cost predictability (a one-time setup vs. recurring per-seat fees that grow with your household or team), and longevity (open-source means the app keeps working even if the maintainers move on, since you can pin a working version). The trade-off is that you take on the operational work of running a server, applying updates, and handling backups.
Most self-hosted apps run comfortably on modest hardware — a Raspberry Pi 4, a mini PC, a NAS with Docker support, or a small VPS is usually enough for personal or family use. CPU and RAM requirements scale with how many simultaneous users or how much data you push through PicoShare. Storage requirements depend on the kind of data you keep; check the README for guidance on data retention.
Last verified: 2026-05-22