Turn Telegram into your personal encrypted cloud drive.
Free forever. Zero-knowledge. No credit card. No limits.
Quick Start β’ Why TAS β’ Features β’ Security β’ Docs β’ Contributing
Google Drive scans your files. Dropbox costs $12/mo. iCloud locks you into Apple. Every "free" cloud storage either reads your data, charges you money, or caps your storage.
Meanwhile, Telegram gives every user unlimited storage with a bot API β and nobody's using it.
TAS compresses, encrypts, and uploads your files to your own private Telegram bot chat. Your password never leaves your machine. Telegram only sees encrypted noise. You get a real CLI-powered cloud drive β with mount, sync, share, and search β for $0/month, forever.
Your Machine Telegram Cloud
ββββββββββββββββββββ ββββββββββββββββββββββββ
β β Compress β β
β tas push ββββ Encrypt ββββ π Encrypted Blobs β
β tas mount ββββ Chunk ββββ π Private Bot Chat β
β tas sync β β π Your Data, Safe β
β β Decrypt β β
β tas pull ββββ Decomp ββββ β Download on demandβ
β β β β
ββββββββββββββββββββ ββββββββββββββββββββββββ
SQLite Index Unlimited & Free
Three commands. Two minutes. Zero cost.
npm install -g @nightowne/tas-cli
tas init # Connect your Telegram bot (guided wizard)
tas push secret.pdf # Upload β encrypted, compressed, done
tas pull secret.pdf # Download β decrypted, verified, instantThat's it. You now have encrypted cloud storage.
|
|
Drag and drop files into Telegram storage like it's a regular drive.
tas mount ~/cloud # Mount your Telegram storage
# Now use Finder, Explorer, or any app β files sync to Telegram
tas unmount ~/cloudRequires
libfuseβapt install fuse libfuse-devon Linux,brew install macfuseon macOS.
Dropbox-style: register a folder, and TAS watches for changes and uploads automatically.
tas sync add ~/Documents # Register a folder
tas sync start # Watch & auto-upload changes
tas sync pull # Download everything back
tas sync status # See what's syncedGenerate one-time download links with a sleek dark-themed download page. Files are decrypted on-the-fly β the link holder never sees your password.
tas share create report.pdf --expire 1h --max-downloads 3
# β http://localhost:3000/d/a1b2c3d4...
tas share list # See active shares
tas share revoke a1b2c3d4 # Revoke anytimeOrganize and find files instantly.
tas tag add report.pdf work Q4
tas search "report" # Search by filename
tas search -t work # Search by tagOne command to check if everything is healthy.
tas doctor
# β Node.js 20.11.0
# β Config v2 (encrypted token)
# β Database: 42 files, 1.3 GB total
# β Disk space: 50 GB free (32% used)
# β Encryption: AES-256-GCM, PBKDF2-SHA512 600,000 iterations
# β¨ All systems go!First-class JSON output, environment variable support, and zero interactivity mode.
export TAS_PASSWORD="your-password" # Skip prompts
export TAS_DATA_DIR="/custom/path" # Custom data location
tas push backup.tar.gz # Non-interactive upload
tas list --json | jq '.[].filename' # Pipe to jq
tas status --json # Machine-readable status
# Works with: cron β’ GitHub Actions β’ Docker β’ systemd β’ any CI/CDTAS implements zero-knowledge encryption β we can't read your data, Telegram can't read your data, nobody can read your data without your password.
| Layer | Implementation | Why It Matters |
|---|---|---|
| Cipher | AES-256-GCM | Same cipher used by governments & banks |
| Key Derivation | PBKDF2-SHA512, 600k iterations | OWASP 2025 compliant β brute-force resistant |
| Salt | 32 bytes, cryptographically random | Unique per file β no rainbow tables |
| IV | 12 bytes, cryptographically random | Unique per file β no pattern analysis |
| Auth Tag | 16 bytes GCM authentication | Tamper detection β any bit flip = rejected |
| Bot Token | Encrypted at rest (AES-256-GCM) | Even your config file is protected |
| Password Hash | PBKDF2-based verification | Your password hash is computationally expensive to crack |
| Integrity | SHA-256 verified on every download | Bit-perfect downloads, guaranteed |
| Share Server | XSS-safe, RFC 6266 headers | Hardened against injection attacks |
π¦ a7f3b2c1e9d4.tas β 12.4 MB β application/octet-stream
That's it. An opaque encrypted blob. No filename, no content, no metadata. Just noise.
Built like professional backup tools (inspired by restic, rclone, borg):
| Feature | Details |
|---|---|
| Exponential Backoff | Auto-retry with jitter on Telegram 429 errors and network timeouts |
| Rate Limiting | Built-in 1 msg/sec limiter β never hits Telegram's rate limits |
| Integrity Verification | SHA-256 hash check after every single download |
| Resume Uploads | Interrupted? Run tas resume to pick up where you left off |
| Graceful Shutdown | SIGINT/SIGTERM handled cleanly β zero data corruption risk |
| Self-Diagnostics | tas doctor validates your entire setup in seconds |
Core Commands
tas init # π Interactive setup wizard
tas push <file> # β¬οΈ Upload (encrypt + compress + upload)
tas pull <file|hash> # β¬οΈ Download (download + decrypt + verify)
tas list [-l] [--json] # π List all files
tas delete <file|hash> # ποΈ Remove from index (--hard to delete from Telegram)
tas status [--json] # π Storage stats
tas search <query> # π Find files by name or tag
tas resume # π Resume interrupted uploads
tas verify # β
Verify all files exist & are intact
tas doctor # π©Ί System health checkMount & Sync
# FUSE Mount (use Telegram like a local folder)
tas mount <path> # Mount
tas unmount <path> # Unmount
# Folder Sync (Dropbox-style auto-upload)
tas sync add <folder> # Register a folder to sync
tas sync start # Start watching for changes
tas sync pull # Download all synced files
tas sync status # Show sync statusShare & Tags
# Temporary Share Links
tas share create <file> [--expire 24h] [--max-downloads 3]
tas share list # Active shares
tas share revoke <token> # Revoke a share link
# File Tags
tas tag add <file> <tags...>
tas tag remove <file> <tags...>
tas tag list [tag] # List tags or files with a specific tagsrc/
βββ cli.js # Commander-based CLI β all commands
βββ index.js # Streaming upload/download pipeline
βββ crypto/
β βββ encryption.js # AES-256-GCM + PBKDF2-SHA512 key derivation
βββ db/
β βββ index.js # SQLite index (files, chunks, tags, shares, sync)
βββ telegram/
β βββ client.js # Bot API wrapper β retry, rate-limit, streaming
βββ fuse/
β βββ mount.js # FUSE filesystem β mount Telegram as a folder
βββ share/
β βββ server.js # HTTP server β expiring download links
βββ sync/
β βββ sync.js # Folder watcher β Dropbox-style auto-sync
βββ utils/
βββ compression.js # Smart gzip (skips already-compressed formats)
βββ chunker.js # 49MB chunking with custom WAS1 file headers
βββ progress.js # Terminal progress bar with speed + ETA
βββ throttle.js # Bandwidth limiter (stream transform)
βββ branding.js # ASCII art + formatting
βββ cli-helpers.js # Password management + config resolution
Tech stack: Node.js Β· better-sqlite3 Β· node-telegram-bot-api Β· fuse-native Β· Commander Β· Chalk Β· Ora Β· Inquirer
| π Not a backup solution | Telegram can delete content. Use TAS alongside proper backups, not instead of them. |
| π 49 MB chunks | Files are automatically split due to Telegram Bot API limits. Fully transparent. |
| π Single-user | Designed for personal use. Not multi-tenant. |
| π FUSE = Linux/macOS | Mount feature requires libfuse. CLI works everywhere Node.js runs. |
| π No versioning (yet) | Overwriting a file replaces the previous version. |
git clone https://github.com/ixchio/tas
cd tas && npm install
npm test # 43 tests, all passingPRs welcome. See CONTRIBUTING.md for guidelines.
TAS is open source and we love contributions:
- π Found a bug? Open an issue
- π‘ Have an idea? Start a discussion
- π§ Want to contribute? Fork β Branch β PR β π
MIT β use it, fork it, ship it, sell it. Do whatever you want.
Built with β and stubbornness by @ixchio
If TAS saved you money, consider giving it a β
