{"id":51032013,"url":"https://github.com/dineshkn-dev/tora","last_synced_at":"2026-06-22T01:30:59.590Z","repository":{"id":365284709,"uuid":"1271162897","full_name":"dineshkn-dev/tora","owner":"dineshkn-dev","description":"A premium, security-first, macOS-native BitTorrent client built with Swift, SwiftUI, and libtorrent-rasterbar.","archived":false,"fork":false,"pushed_at":"2026-06-16T17:00:44.000Z","size":4535,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T18:27:23.340Z","etag":null,"topics":["bittorrent","bittorrent-client","libtorrent","macos","native-app","p2p","swift","swiftui","torrent","torrent-client"],"latest_commit_sha":null,"homepage":"https://dineshkn-dev.github.io/tora/","language":"Swift","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/dineshkn-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"Docs/SECURITY_TEST_PLAN.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-16T11:51:32.000Z","updated_at":"2026-06-16T16:58:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dineshkn-dev/tora","commit_stats":null,"previous_names":["dineshkn-dev/tora"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dineshkn-dev/tora","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshkn-dev%2Ftora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshkn-dev%2Ftora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshkn-dev%2Ftora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshkn-dev%2Ftora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dineshkn-dev","download_url":"https://codeload.github.com/dineshkn-dev/tora/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dineshkn-dev%2Ftora/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34630770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bittorrent","bittorrent-client","libtorrent","macos","native-app","p2p","swift","swiftui","torrent","torrent-client"],"created_at":"2026-06-22T01:30:59.124Z","updated_at":"2026-06-22T01:30:59.586Z","avatar_url":"https://github.com/dineshkn-dev.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"Docs/assets/logo.png\" width=\"160\" height=\"160\" alt=\"Tora Logo\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eTora\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eA premium, security-first, macOS-native BitTorrent client built with Swift, SwiftUI, and libtorrent-rasterbar.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-macOS_14.0%2B-blue?style=flat-square\" alt=\"Platform: macOS 14.0+\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/language-Swift_5.10-orange?style=flat-square\" alt=\"Language: Swift 5.10\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-green?style=flat-square\" alt=\"License: MIT\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/engine-libtorrent_2.0-cyan?style=flat-square\" alt=\"Engine: Libtorrent 2.0\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"Docs/assets/screenshot.png\" width=\"700\" alt=\"Tora App Interface Dashboard Mockup\"\u003e\n\u003c/p\u003e\n\n---\n\n## Status\n\nTora is currently in early active development. The security-first project skeleton, validation layers, dynamic bridge boundary, CI workflow, and automated production packaging pipelines are fully implemented and ready.\n\n## Security Posture\n\nUnlike generic clients, Tora is built on a fail-closed, secure-by-default architecture:\n\n* 🔒 **Isolated Engine**: Libtorrent is strictly isolated behind a thin `TorrentService` boundary. No raw handles can escape.\n* 🛡️ **Path Validation**: Download and save paths are recursively validated to prevent filesystem traversals or system directory pollution.\n* 🚫 **No Auto-Opening**: Tora will never automatically open or execute downloaded files.\n* 🔏 **Sandbox Boundary**: The app defaults to a dedicated downloads sandbox folder: `~/Downloads/Tora`.\n* 🔌 **Fail-Closed Connections**: Local network-discovery settings (LPD, UPnP, NAT-PMP) are disabled by default and require explicit review to enable.\n\n---\n\n## Quick Start\n\n### Build Requirements\n* macOS Sonoma (14.0) or newer\n* Xcode 15 / Swift 5.10+\n* Homebrew (for libtorrent engine bindings)\n\n### 1. Development Build (Fail-Closed)\nTo run a fast, fail-closed development build without installing external system dependencies:\n```sh\nswift test\nswift run Tora\n```\n*Note: In this mode, calls requiring libtorrent will return a safe mock response until linked.*\n\n### 2. Full Build (Libtorrent-Enabled)\nInstall libtorrent and build with linked bindings:\n```sh\nbrew install libtorrent-rasterbar\nTORA_LIBTORRENT_PREFIX=\"$(brew --prefix libtorrent-rasterbar)\" swift build\n```\n\n---\n\n## Interactive Developer Manual\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🛠️ Local Development Automation Scripts\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\nTora includes shell commands and Finder-friendly shortcuts for key development tasks:\n\n| Command | File Path | Description |\n| :--- | :--- | :--- |\n| **Run Dev** | `Commands/dev.sh` | Builds and runs Tora from SwiftPM. |\n| **Build Prod** | `Commands/prod.sh` | Compiles a production `.app`, runs ad-hoc code-signing, and launches it. |\n| **Run Tests** | `Commands/test.sh` | Runs unit tests (with libtorrent-enabled tests if library is installed). |\n| **Watch Files** | `Commands/watch.sh` | Automatically rebuilds and restarts Tora when source files change. |\n\n*Finder Launchers are also available in `Commands/` as `.command` scripts (e.g., `Commands/Prod.command`) for quick double-click launching.*\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e⚓ Local Git Automation (Pre-commit / Pre-push Hooks)\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\nTo set up pre-commit validation (runs unit tests) and pre-push validation (runs full libtorrent build):\n```sh\nScripts/install-git-hooks.sh\n```\nThese hooks run automatically to verify code correctness before syncing upstream.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e⚡ Technical Architecture: Libtorrent Bridge\u003c/b\u003e\u003c/summary\u003e\n\u003cbr\u003e\n\nTora isolates unsafe C++ bindings using a structured bridge boundary:\n```mermaid\ngraph TD\n    ToraApp[Sources/ToraApp] --\u003e ToraUI[Sources/ToraUI]\n    ToraUI --\u003e ToraCore[Sources/ToraCore]\n    ToraCore --\u003e ToraLibtorrentBridge[Sources/ToraLibtorrentBridge]\n    ToraLibtorrentBridge --\u003e LibtorrentC[\"libtorrent-rasterbar (C++)\"]\n```\n* **Protocol Isolation**: The Swift app depends exclusively on `TorrentServiceProtocol`.\n* **Zero C++ Leaks**: All raw C++ pointers, standard containers (`std::vector`), and Libtorrent types are fully contained inside `Sources/ToraLibtorrentBridge` to prevent runtime undefined behaviors or memory leaks in Swift code.\n\u003c/details\u003e\n\n---\n\n## License\n\nTora is licensed under the [MIT License](LICENSE).\nFor security concerns, please refer to our [Security Policy](SECURITY.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdineshkn-dev%2Ftora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdineshkn-dev%2Ftora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdineshkn-dev%2Ftora/lists"}