{"id":13629492,"url":"https://github.com/mrusme/superhighway84","last_synced_at":"2025-04-13T02:24:59.335Z","repository":{"id":38365364,"uuid":"441060342","full_name":"mrusme/superhighway84","owner":"mrusme","description":"USENET-inspired, uncensorable, decentralized internet discussion system running on IPFS \u0026 OrbitDB","archived":false,"fork":false,"pushed_at":"2024-08-01T20:07:13.000Z","size":9940,"stargazers_count":714,"open_issues_count":17,"forks_count":23,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-10-29T14:19:03.814Z","etag":null,"topics":["bbs","bulletin-board-system","censorship","censorship-circumvention","censorship-resistance","community","decentralization","decentralized","discussion-forum","forum","free-speech","ipfs","merkle-dag","orbitdb","p2p","p2p-database","p2p-network","uncensorable","usenet","web3"],"latest_commit_sha":null,"homepage":"https://xn--gckvb8fzb.com/superhighway84","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrusme.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"custom":["https://github.com/mrusme#support"]}},"created_at":"2021-12-23T04:22:29.000Z","updated_at":"2024-10-24T19:26:58.000Z","dependencies_parsed_at":"2023-09-29T00:22:29.064Z","dependency_job_id":"afa21b80-5f2e-4f7e-b2b3-4b47d3511011","html_url":"https://github.com/mrusme/superhighway84","commit_stats":{"total_commits":159,"total_committers":4,"mean_commits":39.75,"dds":"0.14465408805031443","last_synced_commit":"a91eebf7ca17936482ec009d03cf436fb61b2449"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fsuperhighway84","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fsuperhighway84/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fsuperhighway84/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fsuperhighway84/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrusme","download_url":"https://codeload.github.com/mrusme/superhighway84/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248655031,"owners_count":21140417,"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":["bbs","bulletin-board-system","censorship","censorship-circumvention","censorship-resistance","community","decentralization","decentralized","discussion-forum","forum","free-speech","ipfs","merkle-dag","orbitdb","p2p","p2p-database","p2p-network","uncensorable","usenet","web3"],"created_at":"2024-08-01T22:01:11.994Z","updated_at":"2025-04-13T02:24:59.309Z","avatar_url":"https://github.com/mrusme.png","language":"Go","funding_links":["https://github.com/mrusme#support"],"categories":["Go","Table of Contents"],"sub_categories":[],"readme":"Superhighway84\n--------------\n\n[![Superhighway84](superhighway84.jpeg)](superhighway84.png)\n\n```\n===============================================================================\n                        INTERACTIVE ASYNC / FULL DUPLEX\n===============================================================================\n\n                              Dial Up To 19.2 Kbps\n                                  \n                                      with\n\n    _  _ _ __ ____                  __   _      __                   ___  ____\n   /  / / // / __/_ _____  ___ ____/ /  (_)__ _/ / _    _____ ___ __( _ )/ / /\n  _\\ _\\_\\_\\\\_\\ \\/ // / _ \\/ -_) __/ _ \\/ / _ \\/ _ \\ |/|/ / _ \\/ // / _  /_  _/\n /  / / // /___/\\_,_/ .__/\\__/_/ /_//_/_/\\_, /_//_/__,__/\\_,_/\\_, /\\___/ /_/\n                   /_/                  /___/                /___/\n\n ::: UNCENSORABLE USENET-INSPIRED DECENTRALIZED INTERNET DISCUSSION SYSTEM :::\n\n\n   The V.H.S. (Very High Speed) Superhighway84 platform is more than just the\n  fastest decentralized, uncensorable, USENET-inspired communications platform \n         available. It is also the first one to be based on the latest \n                        IPFS technology available today!\n\n    Superhighway84 offers the most spectacular features under the Spectrum.\n                                       \n                             100% Error Protection\n                         Data and Character Compression\n                         Alternate Bell Compatible Mode\n                         Long Haul Satellite Operation\n                              Network Diagnostics\n                                 Fallback Mode\n                                   And More!\n\n\n                    The Superhighway84 modern, uncensorable, \n                   decentralized internet discussion system.\n                       It should cost a lot more than $0.\n\n\n```\n\n![Screenshot](screenshot01.png)\n\n[![Static \nBadge](https://img.shields.io/badge/Join_on_Matrix-green?style=for-the-badge\u0026logo=element\u0026logoColor=%23ffffff\u0026label=Chat\u0026labelColor=%23333\u0026color=%230DBD8B\u0026link=https%3A%2F%2Fmatrix.to%2F%23%2F%2521PHlbgZTdrhjkCJrfVY%253Amatrix.org)](https://matrix.to/#/%21PHlbgZTdrhjkCJrfVY%3Amatrix.org)\n\nSuperhighway84 is an open source, terminal-based, IPFS-powered, USENET-inspired,\nuncensorable, decentralized peer-to-peer internet discussion system with retro\naesthetics.\n\n[More info here.](https://xn--gckvb8fzb.com/superhighway84/)\n\n\n\n## Installation\n\n### Prerequisites\n\nDownload the [kubo 0.16\nrelease](https://github.com/ipfs/kubo/releases/tag/v0.16.0) and unpack it:\n\n```sh\n$ tar -xzf ./kubo_*.tar.gz\n```\n\nIf you haven't used IPFS so far, initialize the IPFS repository using the \nfollowing command:\n\n```sh\n$ ./kubo/ipfs init\n```\n\nIf you had used IPFS an already have an IPFS repository in place, either\n(re)move it from `~/.ipfs` or make sure to `export IPFS_PATH` before running the\n`ipfs init` command, e.g.:\n\n```sh\n$ export IPFS_PATH=~/.ipfs-sh84\n$ ./go-ipfs/ipfs init\n```\n\n\n### From Release\n\nDownload the [latest\nrelease](https://github.com/mrusme/superhighway84/releases/latest) and unpack\nit:\n\n```sh\n$ tar -xzf ./superhighway84_*.tar.gz\n$ ./superhighway84\n```\n\nIf you initialized the IPFS repo under in a custom location, you need to prefix\n`IPFS_PATH`:\n\n```sh\n$ IPFS_PATH=~/.ipfs-sh84 ./superhighway84\n```\n\nThe binary `superhighway84` can be moved wherever you please.\n\n\n\n### From Source\n\nClone this repository\n\n- from [GitHub](https://github.com/mrusme/superhighway84)\n  ```sh\n  $ git clone git@github.com:mrusme/superhighway84.git\n  ```\n- from \n  [Radicle](https://app.radicle.xyz/nodes/seed.xn--gckvb8fzb.com/rad:z4JkpNjyUemfCeU85iqssNEukoBn1)\n  ```sh\n  $ rad clone rad:z4JkpNjyUemfCeU85iqssNEukoBn1\n  ```\n\nThen cd into the cloned directory and run:\n\n```sh\n$ go build .\n```\n\nThe binary will be available at ./superhighway84 and can be moved wherever you\nplease.\n\n\n\n## Running\n\nFirst, check ulimit -n and verify that it's at a reasonable amount. IPFS\nrequires it to be large enough (\u003e= 2048) in order to work properly over time.\n\nSecond, if your hardware shouldn't be a beefy computer but instead one of\nthose flimsy MacBooks, older hardware, a Raspberry or a low-memory VPS it is\nadvisable to set the previously created IPFS repository to the `lowpower`\nprofile.\n\n```sh\n$ ipfs config profile apply lowpower\n```\n\nThis should help with CPU usage, file descriptors and the amount of network\nconnections. While during the startup period you might still see peers peaking\nbetween 1k and 3k, connections should ultimately settle somewhere between 100\nand 300 peers.\n\nAfterwards you can simply launch the binary:\n\n```sh\n$ superhighway84\n```\n\nA setup wizard will help you with initial configuration. Please make sure to\nhave at least HOME and EDITOR exported in your environment.\n\nIn case you're intending to run the official IPFS daemon and Superhighway84 in\nparallel, be sure to adjust the ports in their respective IPFS repos (e.g.\n`~/.ipfs` and `~/.ipfs-sh84`) so that they won't utilize the same port numbers.\nThe ports `4001`, `5001` and `8080` are relevant and should be adjusted to\nsomething other for every new repo/IPFS node that will run in parallel, e.g.:\n\n```json\n  \"Addresses\": {\n    \"Swarm\": [\n      \"/ip4/0.0.0.0/tcp/4002\",\n      \"/ip6/::/tcp/4002\",\n      \"/ip4/0.0.0.0/udp/4002/quic\",\n      \"/ip6/::/udp/4002/quic\"\n    ],\n    \"Announce\": [],\n    \"NoAnnounce\": [],\n    \"API\": \"/ip4/127.0.0.1/tcp/5002\",\n    \"Gateway\": \"/ip4/127.0.0.1/tcp/8081\"\n  },\n```\n\n**NOTE**: When running Superhighway84 for the first time it might seem like it's\n\"hanging\" at the command prompt. Usually it isn't hanging but rather searching\nfor peer it can connect to in order to synchronize the database. Depending on\nhow many people are online, this process might take _some time_, please be\npatient.\n\n\n\n## Connectivity\n\nIf you're having trouble connecting to the IPFS network that might be due to\nyour network setup. Please try the IPFS `AutoRelay` feature in such a case:\n\n```sh\n$ ipfs config --json Swarm.RelayClient.Enabled true\n```\n\nMore information on this can be found here:\nhttps://github.com/ipfs/kubo/blob/master/docs/experimental-features.md#autorelay\n\n\n\n## Configuration\n\nSuperhighway84 will guide you through the basic configuration on its first run.\nThe configuration is stored at the path that you specified in the setup wizard.\nAfter it was successfully created, it can be adjusted manually and will take\neffect on the next launch of Superhighway84.\n\nConfiguration options that might be of interest:\n\n```\nArticlesListView =\n  The view to be used for the articles lit. Possible values:\n  0 - threaded view, latest thread at the top\n  1 - list view, latest article at the top\n\n[Profile]\n  From =\n    The identifier that is being shown when posting an article, e.g. your name,\n    username or email that you'd like to display\n\n  Organization =\n    An optional organization that you'd like to display affiliation with\n\n[Shortcuts]\n  The shortcuts for navigating Superhighway84, can be reset to its defaults by\n  simply removing the whole [Shortcuts] block and launching Superhighway84\n\n  The structure is as following:\n\n  `\u003ckey code\u003e = \"event\"`\n\n  The key codes can be looked up under the following link:\n\n  https://pkg.go.dev/github.com/gdamore/tcell/v2#Key\n\n  For simple ASCII characters use their ASCII code, e.g. `114` for the character \n  `r`.\n```\n\n\n## Usage\n\nThe default keyboard shortcuts are:\n\n```\n     C-r: Refresh\n     C-h: Focus groups list\nC-l, C-k: Focus articles list\n     C-j: Focus preview pane\n     C-q: Quit\n       k: Move up in list\n       j: Move down in list\n       h: Move left in list\n       l: Move right in list\n       g: Move to the beginning of list/text\n       G: Move to the end of list/text\n      CR: Select item in list\n       n: Publish new article\n       r: Reply to selected article\n```\n\nHowever, you are free to customize these within your configuration file, under\nthe section `Shortcuts`. \n\n\n### Submit Article\n\nWhen submitting a new article or a reply to an article, the $EDITOR is launched\nin which a document with a specific structure will be visible. This structure\nconsists of the HEADER, a SEPARATOR and the BODY and looks like this:\n\n```\nSubject: This is the subject of the article\nNewsgroup: test.sandbox\n= = = = = =\nThis is the multiline\nbody of the article\n```\n\nThe HEADER contains all headers that are required for an article to be\nsubmitted. These are:\n\n- `Subject:`\\\n  The subject of the article that will be shown in the articles list. The\n  subject must only contain of printable ASCII characters.\n\n- `Newsgroup:`\\\n  The newsgroup under which the article will be submitted, this can\n  either be an existing group or a new group. Please try to follow\n  the convention when creating new groups.\n  The newsgroup must only contain of printable ASCII characters.\n\nThe SEPARATOR contains of 6 equal signs and 5 spaces, alternating each \nother, followed by a new line.\n\nThe BODY can contain of multiline text.\n\n\n\n## Known Limitations\n\n- The OrbitDB that Superhighway84 uses is a public database, meaning everyone\n  can alter its data. Since its using a standard _docstore_, PUT and DELETE\n  events can alter existing data. This issue will be solved in the future by\n  customizing the store to ignore these types of events.\n\n- Superhighway84 is bound to the version of IPFS that Berty decides to support \n  for go-orbit-db. go-orbit-db updates, on the other hand, seem to introduce\n  breaking changes from time to time, which are hard to debug as someone without\n  in-depth knowledge nor documentation. Since Superhighway84 is pretty much a\n  one-man-show it would be quite challenging to fork go-orbit-db in order to\n  keep it up to date with IPFS and make its interface more stable. Unfortunately\n  there doesn't seem to be an alternative to Berty's go-orbit-db as of right\n  now, so Superhighway84 is basically stuck with it.\n  If you happen to know your way around IPFS and maybe even go-orbit-db, and\n  would like to support this project, please get in touch!\n\n- If you have a newer IPFS version installed than the one used by\n  Superhighway84, please make sure to **not upgrade** the IPFS_REPO that\n  Superhighway84 is using. Otherwise you will get an error when starting\n  Superhighway84 that will tell you that there is an IPFS repository mismatch:\n\n  ```\n  \u003e panic: Your programs version (11) is lower than your repos (12).\n  ```\n\n  If this should be the case, please follow the instructions provided here:\n\n  https://github.com/mrusme/superhighway84/issues/42#issuecomment-1100582472\n\n- If you encounter the following issue your IPFS repo version might be older\n  than what Superhighway84 is using:\n\n  ```\n  \u003e panic: ipfs repo needs migration\n  ```\n\n  In this case you might want to follow the IPFS migration guide here:\n\n  https://github.com/ipfs/fs-repo-migrations/blob/master/run.md\n\n  Alternatively use the same IPFS version as used by Superhighway84 to\n  initialize a dedicated Superhighway84 repository. Please refer to the\n  INSTALLATION part for how to do so.\n\n\n\n## Credits\n\n- Superhighway84 name, code and graphics by [mrusme](https://github.com/mrusme)\n- Logo backdrop by\n  [Swift](https://twitter.com/Swift_1_2/status/1114865117533888512)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrusme%2Fsuperhighway84","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrusme%2Fsuperhighway84","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrusme%2Fsuperhighway84/lists"}