{"id":35118617,"url":"https://github.com/krishsharma0413/syncord","last_synced_at":"2026-01-13T22:53:12.196Z","repository":{"id":330738283,"uuid":"1123788390","full_name":"krishsharma0413/syncord","owner":"krishsharma0413","description":"Syncord is a CLI-based file synchronization and storage tool that uses Discord as an encrypted file storage.","archived":false,"fork":false,"pushed_at":"2026-01-01T03:33:41.000Z","size":27450,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T22:53:02.549Z","etag":null,"topics":["backup","cli","discord","discord-bot","drive","encryption","file-storage","python","python3","storage"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krishsharma0413.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-27T16:14:54.000Z","updated_at":"2026-01-10T14:57:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/krishsharma0413/syncord","commit_stats":null,"previous_names":["krishsharma0413/syncord"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/krishsharma0413/syncord","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krishsharma0413%2Fsyncord","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krishsharma0413%2Fsyncord/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krishsharma0413%2Fsyncord/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krishsharma0413%2Fsyncord/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krishsharma0413","download_url":"https://codeload.github.com/krishsharma0413/syncord/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krishsharma0413%2Fsyncord/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28405134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T21:51:37.118Z","status":"ssl_error","status_checked_at":"2026-01-13T21:45:14.585Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","cli","discord","discord-bot","drive","encryption","file-storage","python","python3","storage"],"created_at":"2025-12-27T22:54:32.548Z","updated_at":"2026-01-13T22:53:12.191Z","avatar_url":"https://github.com/krishsharma0413.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Syncord\n```\n                                                                  $$\\ \n                                                                  $$ |\n $$$$$$$\\ $$\\   $$\\ $$$$$$$\\   $$$$$$$\\  $$$$$$\\   $$$$$$\\   $$$$$$$ |\n$$  _____|$$ |  $$ |$$  __$$\\ $$  _____|$$  __$$\\ $$  __$$\\ $$  __$$ |\n\\$$$$$$\\  $$ |  $$ |$$ |  $$ |$$ /      $$ /  $$ |$$ |  \\__|$$ /  $$ |\n \\____$$\\ $$ |  $$ |$$ |  $$ |$$ |      $$ |  $$ |$$ |      $$ |  $$ |\n$$$$$$$  |\\$$$$$$$ |$$ |  $$ |\\$$$$$$$\\ \\$$$$$$  |$$ |      \\$$$$$$$ |\n\\_______/  \\____$$ |\\__|  \\__| \\_______| \\______/ \\__|       \\_______|\n          $$\\   $$ |                                                  \n          \\$$$$$$  |                                                  \n           \\______/ \n```\n\n**Syncord** is a CLI-based file synchronization and storage tool that uses **Discord** as an **encrypted file storage**.\n\nIt allows you to upload files or entire directories to Discord, encrypt and partition them locally, and later download and reconstruct them securely; all through a simple command-line interface or an optional TUI dashboard.\n\nSyncord is distributed as a **single executable (`syncord.exe`)** built using PyInstaller. The executable can be placed directly in your system `PATH` and used from anywhere.\n\n---\n\n## ✨ Features\n\n- 🔐 **End-to-end encryption**\n  - Files are encrypted locally before upload.\n  - Encryption key is never stored on Discord.\n  - Without the key, data cannot be recovered. Make sure not to change it after upload.\n\n- 📦 **Automatic file partitioning**\n  - Large files are split into chunks.\n  - Chunks comply with Discord upload limits (discord limits: 8MB; chunk size: 5MB pre-encryption; ~7MB post-encryption)\n  - Files are reassembled seamlessly on download. Thanks to SQLite tracking partitions.\n\n- 📁 **Directory uploads**\n  - Upload entire directories at once.\n  - download the entire directory and sub-directories too.\n\n\n- 🖥️ **CLI-first design**\n  - Simple, scriptable commands.\n  - Works globally when added to `PATH`\n\n- 🧭 **TUI dashboard**\n  - Interactive terminal interface.\n  - View stored files and usage information.\n\n- 📊 **Usage statistics**\n  - Track uploads, downloads, and storage usage.\n\n- 🗄️ **Local metadata database**\n  - SQLite-backed metadata.\n  - No dependency on Discord message history alone.\n\n---\n\n## 📦 Installation\n\n### Prebuilt Binary (Recommended)\n\n1. Download `syncord.exe`\n2. Place it in a directory included in your system `PATH`\n3. Verify installation:\n\n```bash\nsyncord --help\n```\n\nSyncord can now be invoked from **any directory**.\n\n---\n\n## ⚙️ Mandatory Initial Setup\n\n### ⚠️ **Syncord requires setup before first use.**  \nBoth the **Discord bot token** and the **Guild ID are mandatory**.\n\n### Required Configuration\n\n- Discord Bot Token.\n- Discord Guild ID (server where files will be uploaded).\n- Encryption key (generated locally).\n\n### One-time setup command\n\n```bash\nsyncord setup --token YOUR_DISCORD_BOT_TOKEN --guild-id YOUR_GUILD_ID --encryption-key\n```\n\n### Important Notes\n\n- 🔑 The encryption key is critical.\n- ❌ Losing the key means **permanent data loss**.\n- 🔒 Discord cannot decrypt or recover your files.\n- 🛑 Syncord will not function without a valid token and guild ID.\n\n---\n\n## 📤 Uploading Files\n\n### Upload a single file\n\n```bash\nsyncord upload file.ext\n```\n\n### Upload an entire directory\n\n```bash\nsyncord upload folder_name\n```\n\nBehavior:\n- All files inside the directory are processed.\n- Folder structure is logically preserved.\n- Each directory becomes its own Syncord folder namespace.\n\n---\n\n## 📥 Downloading Files\n\n```bash\nsyncord download folder_on_syncord/file\n```\n\nSyncord will:\n1. Locate all required partitions.\n2. Download them from Discord.\n3. Decrypt locally.\n4. Reassemble the original file.\n\nNOTE:\nIf no folder is provided, syncord assume it to be `default` where every file is uploaded.\n\n---\n\n## 🖥️ TUI Dashboard\n\n```bash\nsyncord dashboard\n```\n\nThe dashboard provides:\n- Stored file overview.\n- download folders and file.\n- Storage usage.\n- Interactive navigation.\n\n---\n\n## 📊 Usage Statistics\n\n```bash\nsyncord stats\n```\n\nDisplays:\n- Total files uploaded\n- Total downloads\n- Storage usage\n- Other tracked metrics\n\n---\n\n## 🧾 Command Summary\n\n```text\nsyncord setup        Mandatory initial configuration\nsyncord upload       Upload a file or directory\nsyncord download     Download and reconstruct a file\nsyncord dashboard    Launch terminal UI dashboard\nsyncord stats        Show usage statistics\n```\n\n---\n\n## 🔐 Security Model\n\n- All encryption happens **locally**.\n- Discord only stores encrypted binary chunks.\n- Metadata is stored locally using SQLite.\n- Discord never sees:\n  - File contents.\n  - Plaintext filenames.\n  - Encryption keys.\n\n\u003e Syncord assumes you trust your local system; not Discord.\n\n---\n\n## 📁 Project Structure\n\n```text\ndist/\n ├── syncord.exe          # executable\ncore/\n ├── db_manager.py        # SQLite metadata handling\n ├── setup.py             # Configuration \u0026 setup logic\n ├── partition.py         # File chunking \u0026 reconstruction\n ├── tui.py               # Terminal UI dashboard\n ├── encrypter.py         # Encryption \u0026 Decryption\n ├── discord_handler.py   # discord bot logic\nfiles/\n ├── uuid/file.bin        # temp storage\nmain.py                   # CLI entry point\n```\n\n---\n\n## ⚠️ Limitations \u0026 Notes\n\n- Requires a Discord bot with proper guild permissions. READ_MESSAGE_HISTORY \u0026 VIEW_CHANNEL \u0026 SEND_MESSAGES \u0026 ATTACH_FILES\n- Subject to Discord rate limits.\n- Not intended as a public cloud storage replacement.\n- Designed for personal or controlled environments.\n\n---\n\n## 📜 Disclaimer\n\nThis project is intended for **educational and personal use**.  \nEnsure compliance with Discord’s Terms of Service when using Syncord.\n\n---\n\n## 🧠 Future Updates\n\nIssue you might face and should be fixed soon:\n- rate limiting from discord because of constant up \u0026 down of bot on multi upload.\n  - Best solution: maintain the connection or bulk upload and download together instead of treating each file individually; would require to rewrite `partition.py` a little.\n- unexpected error of unclosed aiohttp client.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrishsharma0413%2Fsyncord","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrishsharma0413%2Fsyncord","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrishsharma0413%2Fsyncord/lists"}