Skip to content

benbusby/yeetfile

Repository files navigation



A privacy-focused encrypted file sending service and file/password vault

Latest Release License: AGPLv3

Tests (CLI) Tests (Web) Vuln Scan

SourceHut GitHub

Contents

  1. About
  2. Features
    1. YeetFile Send
    2. YeetFile Vault
    3. Accounts
    4. Other
  3. How It Works / Security
  4. Self-Hosting
  5. Development
    1. Requirements
    2. Setup
    3. Building
    4. Environment Variables
  6. Support

About

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.

Features

YeetFile Send

send example

  • 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)

YeetFile Vault

vault example

  • File and password storage + folder creation
  • File/password/folder sharing w/ YeetFile users
    • Read/write permissions per user
  • No upload size limit

Accounts

  • 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

Other

  • Server-specific passwords (optional for self-hosting)
  • Easily self-hosted
    • Official CLI can be configured to use any server

How It Works / Security

See: https://docs.yeetfile.com/security

Self-Hosting

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).

Development

Requirements

  • Go v1.20+
  • PostgreSQL 15+
  • Node.js 22.2+
    • npm install typescript
  • A Backblaze B2 account (optional)

Setup

  1. Start PostgreSQL
  2. Create a database in PostgreSQL named "yeetfile"
    1. This can be customized to your preference, just use the YEETFILE_DB_* environment variables outlined below to configure before launching the server.
  3. Build YeetFile server (see next section)
  4. Run YeetFile server: ./yeetfile-server

Building

Server

make backend

CLI

make cli

Environment Variables

All environment variables can be defined in a file named .env at the root level of the repo.

General Environment Variables

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

Backblaze Environment Variables

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

Misc Environment Variables

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)

Support

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.