_______ _______ _______ _______ _______ _______
( ____ ) ( ___ ) |\ /| ( ____ \ |\ /| ( ___ ) ( ____ ) ( ____ \
| ( )| | ( ) | | ) ( | | ( \/ | ) ( | | ( ) | | ( )| | ( \/
| (____)| | (___) | | | _ | | | (_____ | (___) | | (___) | | (____)| | (__
| _____) | ___ | | |( )| | (_____ ) | ___ | | ___ | | __) | __)
| ( | ( ) | | || || | ) | | ( ) | | ( ) | | (\ ( | (
| ) | ) ( | | () () | /\____) | | ) ( | | ) ( | | ) \ \__ | (____/\
|/ |/ \| (_______) \_______) |/ \| |/ \| |/ \__/ (_______/
Self-hosted, multi-user, end-to-end encrypted file & video sharing. Each account uses its own private Telegram channel as the storage backend and gets clean shareable URLs that embed nicely in Discord and Twitter/X.
- AES-256-GCM at rest (chunked, streamed)
- Multi-user with username + password (bcrypt)
- Per-user Telegram credentials (encrypted in the DB)
- Upload from local file or a URL
- Optional auto-expiry (1h / 3h / 6h / 12h / 1d / 3d / never)
- One-binary, no build step, no external storage
python3 -m venv .venv && source .venv/bin/activate
pip install -r backend/requirements.txt
cp .env.example .env # then edit SECRET_KEY
uvicorn backend.main:app --reloadOpen http://localhost:8000, hit NEW USER? SETUP and the in-app wizard walks you through:
- Pick username + password (availability check live).
- Yes/no — do you have a Telegram account? If no, link to telegram.org.
- Create a private channel.
- Create a bot via @BotFather, grab the token, add the bot as Admin.
- Find your channel ID via @userinfobot (forward a message from the channel) — looks like
-1001234567890. - Paste token + channel ID. PawShare tests the connection and you land on the dashboard.
PawShare stores its SQLite DB and .env next to the repo by default. On
hosts with ephemeral filesystems, mount a volume and point DATA_DIR at it
so accounts and uploads survive redeploys:
DATA_DIR=/data
(Railway: add a Volume and set its mount path to /data.)
See .env.example. Only SECRET_KEY is strictly required;
FILE_ENCRYPTION_KEY is auto-generated on first start and persisted to
.env (back it up — losing it makes existing uploads undecryptable).
- Python 3.11+ / FastAPI / SQLite / APScheduler
- Vanilla HTML+CSS+JS (no build step)
- Bcrypt + JWT auth
- Docker, Render, Railway deploy configs included
Use alternate Telegram accounts for your bot and channel. Mass abuse will get the bot — and possibly the linked phone number — restricted by Telegram.
MIT — see LICENSE.