{"id":21115912,"url":"https://github.com/thomasjo/detwitter","last_synced_at":"2026-01-02T02:32:55.755Z","repository":{"id":3765632,"uuid":"4842081","full_name":"thomasjo/detwitter","owner":"thomasjo","description":"An insane idea centered around the concept of a decentralized Twitter-like service","archived":false,"fork":false,"pushed_at":"2012-06-30T20:58:53.000Z","size":100,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-21T04:41:39.313Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thomasjo.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}},"created_at":"2012-06-30T11:38:22.000Z","updated_at":"2018-11-01T09:29:33.000Z","dependencies_parsed_at":"2022-09-13T09:50:25.005Z","dependency_job_id":null,"html_url":"https://github.com/thomasjo/detwitter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomasjo%2Fdetwitter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomasjo%2Fdetwitter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomasjo%2Fdetwitter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomasjo%2Fdetwitter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thomasjo","download_url":"https://codeload.github.com/thomasjo/detwitter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243560852,"owners_count":20310994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-20T02:02:19.546Z","updated_at":"2026-01-02T02:32:50.703Z","avatar_url":"https://github.com/thomasjo.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# deTwitter\nThis crazy idea got sparked by a [blog post][1] that proposes the idea of a\ndecentralized Twitter-like service, which made its way to me thanks to\n[@aral](https://twitter.com/aral) and\n[@mattgemmel](https://twitter.com/mattgemmell).\n\n\n## Crazy? Maybe...\nMy proposition is that this is entirely within the realm of possibility.\nWhat I intend to discover is the feasibility and practicality of such a\nsystem.\n\n\n## Some initial thoughts\nI'm thinking it might be possible to build this and hopefully make it\nsomewhat tamper-proof by building it on a shasum system similar to what Git\nuses, in particular in conjunction with its signed tags that leverage GPG.\n\nIn addition by building it to function with a protocol similar to BitTorrent\nwithout trackers, it might be possible to distribute status updates between\nall connected clients. Essentially some form of naked P2P.\n\nThere are some immediate concerns that come to mind with a decentralized P2P\napproach, such as if there are few clients, each client might have tobe asked\nto store all recent (assuming we only want to persist status updates for a\nlimited time) status updates. This might not be such a big ask however, as\nit's reasonable to assume that few clients means fewer status updates.\nThe algorithm should perhaps be tuned during initial testing to find a\nreasonable distribution factor that will minimize, or hopefully eliminate,\nloss of status updates to due client connectivity (some form of\nself-adjusting redundacy factor).\n\nIn addition, how is discovery supposed to work? How do we make sure this\nworks behind a firewall, router with NAT and similar?\n\n\n## Hurdles that most likely needs to be crossed\n 1. Discovery.\n 2. Routing.\n 3. Secure, tamper-proof messaging.\n 4. Firewall and NAT workarounds.\n 5. Redundancy algorithm(s).\n 6. Distributed queries (e.g. search).\n 7. ?\n\nOnce all (or at least most) hurdles have been crossed, we need to begin\ndefining and documenting a basic protocol. A formal protocol is necessary\nfor all connected clients to communicate.\n\n\n## Resources\n -  [Paper describing and comparing Gnutella and Freenet][2]\n -  [The original Freenet paper][3]\n -  [Distributed routing as employed in Freenet][4]\n -  [The Dark Freenet][5]\n\n\n[1]: http://inessential.com/2012/06/29/matthew_on_twitter_restrictions\n[2]: http://www.sysdesign.ca/archive/berkes_gnutella_freenet.pdf\n[3]: https://freenetproject.org/papers/ddisrs.pdf\n[4]: https://freenetproject.org/papers/swroute.pdf\n[5]: https://freenetproject.org/papers/freenet-0.7.5-paper.pdf\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomasjo%2Fdetwitter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthomasjo%2Fdetwitter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomasjo%2Fdetwitter/lists"}