opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

PicoShare: file sharing without limits, re-encoding, or signups for anyone
GitHub RepoImpressions2

Project Description

View on GitHub

PicoShare: The No-Nonsense Way to Host Your Own File Sharing

You know the drill. You need to send someone a large video file, a raw audio recording, or a giant PDF, and every free file-sharing service either caps your upload size, re-encodes your media into some compressed mess, or forces the recipient through a gauntlet of ads and "Download Now" buttons that are definitely not the actual download button. It's a frustrating loop of workarounds.

PicoShare is a self-hosted web app that cuts through all of that. It's a minimalist file-sharing service designed to do one thing: give you a clean, direct download link for any file, of any size, with zero restrictions and zero waiting for re-encoding. You run it yourself, you control it, and your recipients get a simple link that just works.

What It Does

PicoShare is a single-purpose web application written in Go. You deploy it to a server (or your home machine), access its web interface, and upload a file. In return, it hands you a direct download link you can share with anyone. No accounts, no captchas, no waiting in a processing queue.

Under the hood, it's a simple and efficient design. The application stores metadata in a SQLite database, and it's designed to be run as a lightweight container. The core philosophy is that file sharing should be fast and direct. When you upload a file, it's immediately available to download. There's no background job transcoding your video or compressing your images. What you upload is exactly what the recipient gets.

The architecture is built for simplicity, with configuration handled through environment variables. You set a shared secret for access and a port to listen on, and you're up and running. It's the kind of tool that feels refreshingly uncomplicated in a world of over-engineered web services.

Why It's Cool

The beauty of PicoShare lies in what it deliberately doesn't do. Here's what sets it apart from the file-sharing giants:

  • Direct download links, no strings attached. The link PicoShare generates is a true direct download. The recipient clicks it and gets the file. No landing pages, no ad walls, no "please enter your email to continue." It's just a clean, simple URL you can paste into a chat, an email, or a forum post.

  • No file type or size restrictions. Sites like Imgur are great for images, Vimeo for video, and SoundCloud for audio. But what if you need to share a .zip of source code, a .psd design file, or a raw 4K video that's 5 gigabytes? PicoShare doesn't care. If it's a file, it's welcome here. There's no artificial ceiling on upload size, so you can push large files without breaking a sweat.

  • No re-encoding, ever. This is the big one for media creators. Uploading a video to YouTube or Vimeo means waiting for it to be processed and re-encoded. With PicoShare, the moment your upload finishes, you have a link. It never resizes, never re-encodes, and never alters your file. If you want to share a lossless audio file or an uncompressed video, what you upload is exactly what the person on the other end downloads.

  • Self-hosted and private. You're not relying on a third-party service that might delete your files or change its terms. You own the infrastructure and the data. The setup is intentionally straightforward—run a Docker container, set a password, and you're done.

  • Optional cloud replication. This is a nice touch for reliability. If you configure a Litestream-compatible cloud storage location, PicoShare will automatically replicate your SQLite database. If you kill the container and start it again later, it will pull the data back down from the cloud and pick up right where it left off, as if nothing happened.

How to Try It

Getting started with PicoShare is about as easy as it gets. The Docker route is the quickest path. Just set a shared secret and a port, and you're live:

docker run \
  --env "PORT=4001" \
  --env "PS_SHARED_SECRET=somesecretpass" \
  --publish 4001:4001/tcp \
  --volume "${PWD}/data:/data" \
  --name picoshare \
  mtlynch/picoshare

That mounts a local directory to store the SQLite database, so your files and metadata persist across container restarts.

If you prefer to run it from source, it's equally simple:

PS_SHARED_SECRET=somesecretpass PORT=4001 \
  go run cmd/picoshare/main.go

For those who want a bit more resilience, you can add Litestream environment variables for cloud replication. Just set the bucket, endpoint, and access keys, and PicoShare will handle the rest. One caveat from the README: only run a single container per Litestream location, since PicoShare can't sync writes across multiple instances.

You can also use Docker Compose by copying the provided YAML config into a docker-compose.yml file and running docker-compose up. The project repository on GitHub has all the details and the full README.

Final Thoughts

PicoShare isn't trying to reinvent the wheel or add a thousand features. It's laser-focused on solving one annoying problem: getting a file from you to someone else without friction. It's perfect for developers who want a quick, self-hosted solution for sharing build artifacts, large logs, or media files with colleagues and clients. The lack of restrictions and the absence of re-encoding make it genuinely unique in a space dominated by restrictive, ad-supported services.

If you've ever been frustrated by the limitations of mainstream file-sharing sites, this is a breath of fresh air. It's a simple, reliable tool that gets out of your way and does exactly what it promises. Spin it up, upload a file, and share the link. That's the whole experience, and honestly, that's exactly the point.

Follow @githubprojects for more developer tools and open source projects.

Back to Projects
Project ID: 43dc0f74-d44d-49bb-b7f2-a6e9a4b2530aLast updated: August 26, 2026 at 08:38 AM