{"id":23562273,"url":"https://github.com/justintimperio/onionsoup","last_synced_at":"2026-06-22T21:31:38.466Z","repository":{"id":268290086,"uuid":"903603436","full_name":"JustinTimperio/onionsoup","owner":"JustinTimperio","description":"OnionSoup is a message encryption application that protects and verifies communications between users without exposing a shared secret or contacting a centralized server.","archived":false,"fork":false,"pushed_at":"2024-12-31T19:28:41.000Z","size":4005,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-26T18:40:33.515Z","etag":null,"topics":["fyne","golang","messaging","pgp","rsa","tor"],"latest_commit_sha":null,"homepage":"","language":"Go","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/JustinTimperio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2024-12-15T03:21:43.000Z","updated_at":"2024-12-16T01:37:50.000Z","dependencies_parsed_at":"2024-12-15T20:32:17.049Z","dependency_job_id":"5020a6ea-9871-488c-bf71-d7f52f4c4728","html_url":"https://github.com/JustinTimperio/onionsoup","commit_stats":null,"previous_names":["justintimperio/onionsoup"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/JustinTimperio/onionsoup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinTimperio%2Fonionsoup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinTimperio%2Fonionsoup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinTimperio%2Fonionsoup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinTimperio%2Fonionsoup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JustinTimperio","download_url":"https://codeload.github.com/JustinTimperio/onionsoup/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JustinTimperio%2Fonionsoup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34666961,"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-22T02:00:06.391Z","response_time":106,"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":["fyne","golang","messaging","pgp","rsa","tor"],"created_at":"2024-12-26T16:16:42.029Z","updated_at":"2026-06-22T21:31:38.440Z","avatar_url":"https://github.com/JustinTimperio.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/logo.png\"\u003e\n\u003c/p\u003e\n\nOnionSoup is a message encryption application that uses asymmetric RSA or PGP cryptography to protect and verify communications between users without exposing a shared secret or contacting a centralized server.  It is designed to provide a simple and secure way for users to communicate with each other without exposing their identities to a third party. OnionSoup uses Tor and the Tor Onion Service to route all traffic through the Tor network, which provides a layer of anonymity that is not possible over clearnet. \n\nIt is written in Go using the Fyne toolkit to provide a native application for Windows, Mac, and Linux. Prebuilt binaries are included for each operating system, but you can also build them yourself with the instructions below. Please note, if you want to use the live conversation feature, **you will need to have Tor installed and accessible from the command line**.\n\n*OnionSoup is still under heavy development. Bugs will be present, and the API may change and become incompatible with old versions.*\n## Usage\n\n### Conversations\n![Conversation](docs/conversation.gif)\n\n### Single Messages\n![Single Message](docs/single_message.gif)\n\n### Generating Keys \n![Generate Key](docs/generate_key.gif)\n\n## Starting a Conversation\nThis example highlights how 2 parties (Alice and Bob), can bootstrap a conversation without exposing a shared secret or their identity. To create a conversation:\n1. Alice and Bob generate their public and private keys and bootstrap their perspective conversation server.\n2. Alice and Bob exchange their public keys over the clearnet or tor. \n3. Either party now can generate a conversation bootstrap token and send it to the other party over the same channel as the public keys (for our example, Alice will send the bootstrap token to Bob).\n4. After receiving the bootstrap token, Bob pastes the bootstrap token into the start conversation dialog and submits the request. When the request is submitted, a bootstrap sequence will start and attempt to establish a secure messaging channel between the parties bidirectional over Tor. \n5. The session will remain open until either party closes their session, which will terminate the conversation.\n\n## Installation\n\n### Linux\n1. Download the prebuilt `tar.xz` from the Release page and extract it.\n2. Install tor using the package manager (IE `sudo apt install tor`).\n3. Run `make user-install` \n4. Open OnionSoup!\n\n### Windows\n1. Download the prebuilt `exe.zip` from the Release page and extract it.\n2. Download and install the tor expert bundle from [here](https://www.torproject.org/download/tor/) and start the daemon service with `c:\\Tor\\tor.exe –-service install`\n3. Open OnionSoup!\n\n### Mac\n*Mac Builds are currently not working, please see [this issue](https://github.com/JustinTimperio/onionsoup/issues/1)*\n\n## Building from Source\n\nTo bundle the assets into the program run:\n```bash\n~/go/bin/fyne bundle -package data -o data/bundled.go data/assets\n```\n\n### Linux\n```bash\n~/go/bin/fyne-cross linux -arch=amd64,arm64 -app-id=\"OnionSoup\"\n```\n\n### Windows\n```bash\n~/go/bin/fyne-cross windows -arch=amd64,arm64 -app-id=\"Onion.Soup\"\n```\n\n### Mac\n*Mac Builds are currently not working, please see [this issue](https://github.com/JustinTimperio/onionsoup/issues/1)*\n```bash\n~/go/bin/fyne-cross darwin -arch=amd64,arm64 -app-id=\"Onion.Soup\" --macosx-sdk-path /full-path/macos-sdk/MacOSX15.2.sdk\n```\n\n\n## Design\n\n### Components\nOnionSoup is made possible by these amazing projects:\n- [Go](https://go.dev/)\n- [Tor](https://www.torproject.org/)\n- [Bine](https://github.com/cretz/bine)\n- [Fyne](https://fyne.io/)\n- [Echo](https://echo.labstack.com/)\n- [gopenpgp](https://github.com/ProtonMail/gopenpgp)\n\n### Message Flow\n```mermaid\ngraph TD;\n    subgraph Onion\n        Alice-Guard-Node --\u003e Alice-Relay-Node;\n        Alice-Relay-Node --\u003e Alice-Exit-Node;\n\n        Bob-Guard-Node --\u003e Bob-Relay-Node;\n        Bob-Relay-Node --\u003e Bob-Exit-Node;\n    end;\n\n    Alice-Exit-Node --\u003e Bob-Tor-Daemon;\n    Bob-Exit-Node --\u003e Alice-Tor-Daemon;\n\n    Alice-Tor-Daemon --\u003e Alice-Guard-Node;\n    Bob-Tor-Daemon --\u003e Bob-Guard-Node;\n\n    subgraph Alice\n        Alice-Tor-Daemon;\n        subgraph Alice-OnionSoup\n            Alice-Echo-Server;\n            Alice-Fyne-GUI;\n            Alice-Tor-Connector;\n\n            Alice-Tor-Connector \u003c--\u003e Alice-Echo-Server;\n            Alice-Fyne-GUI --\u003e Alice-Tor-Connector;\n            Alice-Echo-Server --\u003e Alice-Fyne-GUI;\n        end;\n        Alice-Tor-Connector \u003c--\u003e Alice-Tor-Daemon;\n    end;\n\n    subgraph Bob; \n        Bob-Tor-Daemon;\n        subgraph Bob-OnionSoup\n            Bob-Echo-Server;\n            Bob-Fyne-GUI;\n            Bob-Tor-Connector;\n\n            Bob-Tor-Connector \u003c--\u003e Bob-Echo-Server;\n            Bob-Fyne-GUI --\u003e Bob-Tor-Connector;\n            Bob-Echo-Server --\u003e Bob-Fyne-GUI;\n        end;\n        Bob-Tor-Connector \u003c--\u003e Bob-Tor-Daemon;\n    end;\n```\n\n## Contributing\nFeel free to help out when:\n\n- Reporting a bug\n- Discussing the current state of the code\n- Submitting a fix\n- Proposing new features\n\n### We Develop with Github\nWe use github to host code, to track issues and feature requests, as well as accept pull requests.\n\n### All Code Changes Happen Through Pull Requests\n1. Fork the repo and create your branch from `master`.\n2. If you've added code that should be tested, add tests.\n3. If you've changed APIs, update the documentation.\n4. Ensure the test suite passes.\n5. Make sure your code lints.\n6. Issue that pull request!\n\n### Any contributions you make will be under the MIT Software License\nIn short, when you submit code changes, your submissions are understood to be under the same [MIT License](http://choosealicense.com/licenses/mit/) that covers the project. Feel free to contact the maintainers if that's a concern.\n\n### Report bugs using Github's [Issues](https://github.com/JustinTimperio/onionsoup/issues)\nWe use GitHub issues to track public bugs. Report a bug by opening a new issue; it's that easy!\n\n### Write bug reports with detail, background, and sample code\n**Great Bug Reports** tend to have:\n\n- A quick summary and/or background\n- Steps to reproduce\n  - Be specific!\n  - Give sample code if you can.\n- What you expected would happen\n- What actually happens\n- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustintimperio%2Fonionsoup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjustintimperio%2Fonionsoup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjustintimperio%2Fonionsoup/lists"}