Contents
YeetFile is a file vault and file/text transferring service, with both a web and CLI client officially supported. All content is encrypted locally, and the server is incapable of decrypting any transmitted content.
- Send files and text with shareable links
- Links don't require an account to open
- Configurable upload settings
- Expiration date/time configurable to X minutes/hours/days (max 30 days)
- Number of downloads (max 10)
- Optional password protection
- Free text transfers (up to 2000 characters)
- File and password storage + folder creation
- File/password/folder sharing w/ YeetFile users
- Read/write permissions per user
- No upload size limit
- Email not required at signup
- Account ID-only signup allowed
- Signup not required for text-only transfers
- Options to pay for vault/send upgrades
- Payments handled via Stripe
- BTC and XMR supported via BTCPay
- Not required when self-hosting
- Ability to recycle payment ID to remove record of payment
- Server-specific passwords (optional for self-hosting)
- Easily self-hosted
- Official CLI can be configured to use any server
See: https://docs.yeetfile.com/security
You can quickly create your own instance of YeetFile using docker compose
:
docker compose up
This will create the Postgres db and the server running on
http://localhost:8090. You can modify the docker-compose.yml to use an external
data volume by running docker volume create --name=yeetfile_data
and
including the following in your docker-compose.yml:
volumes:
yeetfile_data:
external: true
You should create your own .env
file with whichever variables needed to customize your instance
(see: Environment Variables).
- Go v1.20+
- PostgreSQL 15+
- Node.js 22.2+
npm install typescript
- A Backblaze B2 account (optional)
- Start PostgreSQL
- Create a database in PostgreSQL named "yeetfile"
- This can be customized to your preference, just use the
YEETFILE_DB_*
environment variables outlined below to configure before launching the server.
- This can be customized to your preference, just use the
- Build YeetFile server (see next section)
- Run YeetFile server:
./yeetfile-server
make backend
make cli
All environment variables can be defined in a file named .env
at the root level of the repo.
Name | Purpose | Default Value | Accepted Values |
---|---|---|---|
YEETFILE_HOST | The host for running the YeetFile server | 0.0.0.0 |
|
YEETFILE_PORT | The port for running the YeetFile server | 8090 |
|
YEETFILE_DEBUG | Enable (1) or disable (0) debug mode on the server (do not use in production) | 0 |
0 or 1 |
YEETFILE_STORAGE | Store files in B2 or locally on the machine running the server | b2 |
b2 or local |
YEETFILE_DB_HOST | The YeetFile PostgreSQL database host | localhost |
|
YEETFILE_DB_PORT | The YeetFile PostgreSQL database port | 5432 |
|
YEETFILE_DB_USER | The PostgreSQL user to access the YeetFile database | postgres |
|
YEETFILE_DB_PASS | The password for the PostgreSQL user | None | |
YEETFILE_DB_NAME | The name of the database that YeetFile will use | yeetfile |
|
YEETFILE_DEFAULT_USER_STORAGE | The default bytes of storage to assign new users | 15000000 (15MB) |
-1 for unlimited, > 0 bytes otherwise |
YEETFILE_DEFAULT_USER_SEND | The default bytes a user can send | 5000000 (5MB) |
-1 for unlimited, > 0 bytes otherwise |
YEETFILE_SERVER_SECRET | Used for encrypting password hints and 2FA recovery codes | 32 bytes, base64 encoded | |
YEETFILE_DOMAIN | The domain that the YeetFile instance is hosted on | http://localhost:8090 |
A valid domain string beginning with http:// or https:// |
YEETFILE_SESSION_AUTH_KEY | The auth key to use for user sessions | Random value | 32-byte value, base64 encoded |
YEETFILE_SESSION_ENC_KEY | The encryption key to use for user sessions | Random value | 32-byte value, base64 encoded |
YEETFILE_SERVER_PASSWORD | Enables password protection for user signups | None | Any string value |
YEETFILE_MAX_NUM_USERS | Enables a maximum number of user accounts for the instance | -1 (unlimited) | Any integer value |
YEETFILE_SERVER_SECRET | The secret value used for encrypting user password hints | 32-byte value, base64 encoded | |
YEETFILE_CACHE_DIR | The dir to use for caching downloaded files (B2 only) | None | Any valid directory |
YEETFILE_CACHE_MAX_SIZE | The maximum dir size the cache can fill before removing old cached files | 0 | An int value of bytes |
YEETFILE_CACHE_MAX_FILE_SIZE | The maximum file size to cache | 0 | An int value of bytes |
These are required to be set if you want to use Backblaze B2 to store data that has been encrypted before upload.
Name | Purpose |
---|---|
YEETFILE_B2_BUCKET_ID | The ID of the bucket that will be used for storing uploaded content |
YEETFILE_B2_BUCKET_KEY_ID | The ID of the key used for accessing the B2 bucket |
YEETFILE_B2_BUCKET_KEY | The value of the key used for accessing the B2 bucket |
These can all be safely ignored when self-hosting, but are documented here for anyone interested in hosting a public-facing instance, with or without paid account upgrades.
Name | Purpose |
---|---|
YEETFILE_EMAIL_ADDR | The email address to use for correspondence |
YEETFILE_EMAIL_HOST | The host of the email address being used |
YEETFILE_EMAIL_PORT | The port of the email host |
YEETFILE_EMAIL_USER | The SMTP login for the email address |
YEETFILE_EMAIL_PASSWORD | The SMTP password for the email address |
YEETFILE_EMAIL_NO_REPLY | The no-reply email address for correspondence |
YEETFILE_BTCPAY_WEBHOOK_SECRET | The webhook secret for the BTCPay instance |
YEETFILE_STRIPE_KEY | The Stripe secret key |
YEETFILE_STRIPE_WEBHOOK_SECRET | The Stripe webhook secret |
YEETFILE_UPGRADES_JSON | A JSON array describing the available account upgrades (see shared.Upgrade struct) |
For feature requests and bugs, you can create an issue on GitHub, or submit a ticket on SourceHut (account not required).
For issues related to the official YeetFile instance, you can reach out via email to support@yeetfile.com.
For security related issues, please email me directly.