Skip to content

matteoepitech/flick

Repository files navigation

⚡ Flick

Share files in a flick.

Upload a file, get a simple code like ocean-tiger-42, share it. That's it.

GitHub Repo stars Go Next.js PostgreSQL Docker



⚡ 🚀 🎉

What is Flick?

Flick is a sleek and lightweight self-hosted file sharing tool built with Go and Next.js. It's not here to replace WeTransfer or Dropbox but rather to offer a simple, modern, and hassle-free way to share files from your own server with minimal effort.

You send a file and Flick gives you a short code that is easy to remember or say out loud. The other person enters the code, from the website or the terminal, and gets the file. Files clean themselves up: they expire after a while or after a few downloads.

$ flick myfile.pdf
Uploading the file myfile.pdf... (2097152 bytes)
Uploading 100% |████████████████████████████████| (2.1/2.1 MB, 46 MB/s)

Code: ocean-tiger-42 [15m left]
Code copied to clipboard.
$ flick
Specify the code: ocean-tiger-42
Searching the code ocean-tiger-42...
Downloading 100% |████████████████████████████████| (2.1/2.1 MB, 51 MB/s)

Why Flick?

✅  No accounts, no long links: just a short code, easy to say over the phone
✅  Self-destructing files: expire by time, by download count, or both
✅  Your server, your rules: max file size, duration, rate limits, all configurable
✅  Open-source and self-hosted: your files never leave your server

What's in a Name?

A "flick" is a quick, effortless movement of the finger. That's exactly how sharing a file should feel. 😄

Quick Start

Get Flick running in minutes.

Docker (recommended)

All you need is Docker installed on your server.

git clone https://github.com/matteoepitech/flick.git
cd flick

# Create your configuration
cp .env.example .env

# Start everything: database, migrations, API, web app
make up

Open http://localhost. 🎉

Important

Set a strong POSTGRES_PASSWORD in .env before starting for the first time.

Note

Everything goes through the bundled Caddy reverse proxy. To serve Flick on your own domain with automatic HTTPS (Let's Encrypt) and HTTP/3, just set it in .env:

FLICK_SITE_ADDRESS=flick.example.com

No certificate to generate or manage: Caddy takes care of it.

Service URL
🌐 Web app http://localhost
⚙️ API http://localhost/api/v1

To stop Flick, run make down. Your data is kept safe.

Development mode

Use the dev stack when you want to hack on Flick: the API is rebuilt from source and the web app hot-reloads.

make dev        # start the dev stack
make down-dev   # stop and clean up
make help       # see all available commands

The CLI

Prefer the terminal? On Debian/Ubuntu, install flick straight from the APT repository:

curl -fsSL https://apt.d3l.tech/apt/flick.gpg | sudo tee /usr/share/keyrings/flick.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/flick.gpg] https://apt.d3l.tech/apt stable main" | sudo tee /etc/apt/sources.list.d/flick.list
sudo apt update && sudo apt install flick

On other platforms (macOS, Windows, other Linux), grab the flick binary from apt.d3l.tech/releases - the CLI keeps itself up to date afterwards.

# Send a file
flick holiday-photos.zip

# Send with custom rules: expires in 1 hour, max 3 downloads
flick holiday-photos.zip --exp 1h --mdc 3

# Receive a file (it will ask you for the code)
flick

# Set your defaults (server address, expiration...)
flick configure

You can also build the binaries yourself:

make build      # requires Go 1.26+, outputs to build/bin/

Features

Flick combines effortless sharing with full control over your server.

📦  Sharing Essentials

  • Human-friendly codes in the word-word-number format, easy to type and remember
  • Share code copied automatically to your clipboard after upload
  • Self-destructing files: expiration by time, by download count, or both
  • Fast transfers with HTTP/3 (QUIC) and automatic HTTPS, served at the edge by Caddy

🌐  Web Experience

  • Send: drag and drop a file, get your code
  • Receive: enter a code, download the file
  • Dashboard for admins with stats, users and server settings
  • Localized interface with light and dark mode

🛡️  Control and Limits

  • Configurable max file size, default and max expiration, download counts
  • Rate limiting per user, per IP, and global hourly caps
  • PostgreSQL persistence with automatic database migrations

Configuration

The server creates a default configuration on first start. The main knobs:

Setting Default What it does
max_file_size_mb 1000 Biggest file allowed
default_expiration 15m How long files live by default
max_expiration 4h Longest a file can live
default_download_count 1 Downloads allowed by default
max_download_count 5 Most downloads allowed per file
activate_rate_limit true Protect your server from abuse

Technologies Used

Contributing

Contributions are welcome! Feel free to open an issue or submit a pull request.

Star History

Star History Chart


Made with ❤️ · © 2026 Flick. All rights reserved.

About

Share files with simple codes instead of links. Fast, self-hosted and open-source.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors