• Stars
    star
    580
  • Rank 74,365 (Top 2 %)
  • Language
    Go
  • License
    GNU General Publi...
  • Created over 2 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

USENET-inspired, uncensorable, decentralized internet discussion system running on IPFS & OrbitDB

Superhighway84

Superhighway84

===============================================================================
                        INTERACTIVE ASYNC / FULL DUPLEX
===============================================================================

                              Dial Up To 19.2 Kbps
                                  
                                      with

    _  _ _ __ ____                  __   _      __                   ___  ____
   /  / / // / __/_ _____  ___ ____/ /  (_)__ _/ / _    _____ ___ __( _ )/ / /
  _\ _\_\_\\_\ \/ // / _ \/ -_) __/ _ \/ / _ \/ _ \ |/|/ / _ \/ // / _  /_  _/
 /  / / // /___/\_,_/ .__/\__/_/ /_//_/_/\_, /_//_/__,__/\_,_/\_, /\___/ /_/
                   /_/                  /___/                /___/

 ::: UNCENSORABLE USENET-INSPIRED DECENTRALIZED INTERNET DISCUSSION SYSTEM :::


   The V.H.S. (Very High Speed) Superhighway84 platform is more than just the
  fastest decentralized, uncensorable, USENET-inspired communications platform 
         available. It is also the first one to be based on the latest 
                        IPFS technology available today!

    Superhighway84 offers the most spectacular features under the Spectrum.
                                       
                             100% Error Protection
                         Data and Character Compression
                         Alternate Bell Compatible Mode
                         Long Haul Satellite Operation
                              Network Diagnostics
                                 Fallback Mode
                                   And More!


                    The Superhighway84 modern, uncensorable, 
                   decentralized internet discussion system.
                       It should cost a lot more than $0.


Screenshot

Superhighway84 is an open source, terminal-based, IPFS-powered, USENET-inspired, uncensorable, decentralized peer-to-peer internet discussion system with retro aesthetics.

More info here.

Installation

Prerequisites

Download the kubo 0.16 release and unpack it:

$ tar -xzf ./kubo_*.tar.gz

If you haven't used IPFS so far, initialize the IPFS repository using the following command:

$ ./kubo/ipfs init

If you had used IPFS an already have an IPFS repository in place, either (re)move it from ~/.ipfs or make sure to export IPFS_PATH before running the ipfs init command, e.g.:

$ export IPFS_PATH=~/.ipfs-sh84
$ ./go-ipfs/ipfs init

From Release

Download the latest release and unpack it:

$ tar -xzf ./superhighway84_*.tar.gz
$ ./superhighway84

If you initialized the IPFS repo under in a custom location, you need to prefix IPFS_PATH:

$ IPFS_PATH=~/.ipfs-sh84 ./superhighway84

The binary superhighway84 can be moved wherever you please.

From Source

Clone this repository

Then cd into the cloned directory and run:

$ go build .

The binary will be available at ./superhighway84 and can be moved wherever you please.

Running

First, check ulimit -n and verify that it's at a reasonable amount. IPFS requires it to be large enough (>= 2048) in order to work properly over time.

Second, if your hardware shouldn't be a beefy computer but instead one of those flimsy MacBooks, older hardware, a Raspberry or a low-memory VPS it is advisable to set the previously created IPFS repository to the lowpower profile.

$ ipfs config profile apply lowpower

This should help with CPU usage, file descriptors and the amount of network connections. While during the startup period you might still see peers peaking between 1k and 3k, connections should ultimately settle somewhere between 100 and 300 peers.

Afterwards you can simply launch the binary:

$ superhighway84

A setup wizard will help you with initial configuration. Please make sure to have at least HOME and EDITOR exported in your environment.

In case you're intending to run the official IPFS daemon and Superhighway84 in parallel, be sure to adjust the ports in their respective IPFS repos (e.g. ~/.ipfs and ~/.ipfs-sh84) so that they won't utilize the same port numbers. The ports 4001, 5001 and 8080 are relevant and should be adjusted to something other for every new repo/IPFS node that will run in parallel, e.g.:

  "Addresses": {
    "Swarm": [
      "/ip4/0.0.0.0/tcp/4002",
      "/ip6/::/tcp/4002",
      "/ip4/0.0.0.0/udp/4002/quic",
      "/ip6/::/udp/4002/quic"
    ],
    "Announce": [],
    "NoAnnounce": [],
    "API": "/ip4/127.0.0.1/tcp/5002",
    "Gateway": "/ip4/127.0.0.1/tcp/8081"
  },

NOTE: When running Superhighway84 for the first time it might seem like it's "hanging" at the command prompt. Usually it isn't hanging but rather searching for peer it can connect to in order to synchronize the database. Depending on how many people are online, this process might take some time, please be patient.

Connectivity

If you're having trouble connecting to the IPFS network that might be due to your network setup. Please try the IPFS AutoRelay feature in such a case:

$ ipfs config --json Swarm.RelayClient.Enabled true

More information on this can be found here: https://github.com/ipfs/kubo/blob/master/docs/experimental-features.md#autorelay

Configuration

Superhighway84 will guide you through the basic configuration on its first run. The configuration is stored at the path that you specified in the setup wizard. After it was successfully created, it can be adjusted manually and will take effect on the next launch of Superhighway84.

Configuration options that might be of interest:

ArticlesListView =
  The view to be used for the articles lit. Possible values:
  0 - threaded view, latest thread at the top
  1 - list view, latest article at the top

[Profile]
  From =
    The identifier that is being shown when posting an article, e.g. your name,
    username or email that you'd like to display

  Organization =
    An optional organization that you'd like to display affiliation with

[Shortcuts]
  The shortcuts for navigating Superhighway84, can be reset to its defaults by
  simply removing the whole [Shortcuts] block and launching Superhighway84

  The structure is as following:

  `<key code> = "event"`

  The key codes can be looked up under the following link:

  https://pkg.go.dev/github.com/gdamore/tcell/v2#Key

  For simple ASCII characters use their ASCII code, e.g. `114` for the character 
  `r`.

Usage

The default keyboard shortcuts are:

     C-r: Refresh
     C-h: Focus groups list
C-l, C-k: Focus articles list
     C-j: Focus preview pane
     C-q: Quit
       k: Move up in list
       j: Move down in list
       h: Move left in list
       l: Move right in list
       g: Move to the beginning of list/text
       G: Move to the end of list/text
      CR: Select item in list
       n: Publish new article
       r: Reply to selected article

However, you are free to customize these within your configuration file, under the section Shortcuts.

Submit Article

When submitting a new article or a reply to an article, the $EDITOR is launched in which a document with a specific structure will be visible. This structure consists of the HEADER, a SEPARATOR and the BODY and looks like this:

Subject: This is the subject of the article
Newsgroup: test.sandbox
= = = = = =
This is the multiline
body of the article

The HEADER contains all headers that are required for an article to be submitted. These are:

  • Subject:
    The subject of the article that will be shown in the articles list. The subject must only contain of printable ASCII characters.

  • Newsgroup:
    The newsgroup under which the article will be submitted, this can either be an existing group or a new group. Please try to follow the convention when creating new groups. The newsgroup must only contain of printable ASCII characters.

The SEPARATOR contains of 6 equal signs and 5 spaces, alternating each other, followed by a new line.

The BODY can contain of multiline text.

Known Limitations

  • The OrbitDB that Superhighway84 uses is a public database, meaning everyone can alter its data. Since its using a standard docstore, PUT and DELETE events can alter existing data. This issue will be solved in the future by customizing the store to ignore these types of events.

  • Superhighway84 is bound to the version of IPFS that Berty decides to support for go-orbit-db. go-orbit-db updates, on the other hand, seem to introduce breaking changes from time to time, which are hard to debug as someone without in-depth knowledge nor documentation. Since Superhighway84 is pretty much a one-man-show it would be quite challenging to fork go-orbit-db in order to keep it up to date with IPFS and make its interface more stable. Unfortunately there doesn't seem to be an alternative to Berty's go-orbit-db as of right now, so Superhighway84 is basically stuck with it. If you happen to know your way around IPFS and maybe even go-orbit-db, and would like to support this project, please get in touch!

  • If you have a newer IPFS version installed than the one used by Superhighway84, please make sure to not upgrade the IPFS_REPO that Superhighway84 is using. Otherwise you will get an error when starting Superhighway84 that will tell you that there is an IPFS repository mismatch:

    > panic: Your programs version (11) is lower than your repos (12).
    

    If this should be the case, please follow the instructions provided here:

    #42 (comment)

  • If you encounter the following issue your IPFS repo version might be older than what Superhighway84 is using:

    > panic: ipfs repo needs migration
    

    In this case you might want to follow the IPFS migration guide here:

    https://github.com/ipfs/fs-repo-migrations/blob/master/run.md

    Alternatively use the same IPFS version as used by Superhighway84 to initialize a dedicated Superhighway84 repository. Please refer to the INSTALLATION part for how to do so.

Credits

  • Superhighway84 name, code and graphics by mrusme
  • Logo backdrop by Swift

More Repositories

1

journalist

Journalist. An RSS aggregator.
Go
246
star
2

neonmodem

Neon Modem Overdrive
Go
212
star
3

reader

reader is for your command line what the “readability” view is for modern browsers: A lightweight tool offering better readability of web pages on the CLI.
Go
166
star
4

zeit

Zeit, erfassen. A command line tool for tracking time spent on activities.
Go
137
star
5

canard

Canard. A command line TUI client for the journalist RSS aggregator.
Go
126
star
6

gomphotherium

Gomphotherium (/ˌɡɒmfəˈθɪəriəm/; "welded beast"), a command line Mastodon client.
Go
77
star
7

mercator

OpenStreetMap but as terminal user interface (TUI) program
Go
63
star
8

kiwi

Pimoroni Keybow based, WiFi-enabled Macro Pad (a.k.a. poor-man's Elgato Stream Deck)
Elixir
54
star
9

planor

The Cloud Aviator: TUI client for cloud services (AWS, Vultr, Heroku, Render.com, Fleek, ...)
Go
49
star
10

dotfiles

dotfiles
Vim Script
48
star
11

lemon

Lemon – LED Monitor – is a $79.43 opensource alternative to LaMetric that supports GitHub-, IFTTT- and Zapier-webhooks and even integrates with Pushover!
Python
47
star
12

snoo

A Reddit command line client written in Node.js, using modern ES-features
JavaScript
41
star
13

ninjaberry

Ninjaberry: Raspberry Pi UI for @Bettercap
Python
39
star
14

palm-webos-development-tmbundle

Palm webOS (formerly Palm Pre) Development Bundle for TextMate
33
star
15

geld

Geld. A command line tool for tracking money and budgets.
Go
32
star
16

xbsapi

Alternative xBrowserSync API that is a single binary and supports SQLite3, PostgreSQL and MySQL
Go
27
star
17

addrb

addrb: A lightweight CLI / TUI address book that supports CardDAV
Go
26
star
18

conclusive

Conclusive. A command line client for Plausible Analytics.
Rust
24
star
19

node-socket-laravel-session

This is an example of how to check a Laravel request for a valid session within Node.js/Socket.io
JavaScript
22
star
20

wth

What The Heck: The better personal information dashboard for your terminal
Go
22
star
21

caldr

A lightweight CLI / TUI calendar that supports CalDAV
Go
20
star
22

lbaction-npm

NPM (LauchBar 6 Action)
JavaScript
17
star
23

cexec

Execute any command, cache its output and get cached output on subsequent execution
Go
14
star
24

synology-btsync-fix

Synology BitTorrent Sync (btsync) Fix
Shell
12
star
25

torqer

Ready-to-use Tor proxy Docker container, with privoxy on top.
Shell
10
star
26

cloudcash

Check your cloud spending from the CLI, from Waybar, and from the macOS menu bar!
Go
9
star
27

hue2influx

Sync Philips Hue component states to InfluxDB.
Python
9
star
28

bookmarkdown

A super lightweight tool for accessing links from a markdown file
Go
6
star
29

lbaction-stockprice

Stock Price (LaunchBar 6 Action)
JavaScript
5
star
30

melon

Melon – Multimedia- & Entertainment Linking and Operation Node – is a daemon that allows linking media devices (e.g. Sonos, Televisions) and operating them through one API
Python
5
star
31

pushover-to-xmpp

Tiny Pushover to XMPP bridge written in Go
Go
5
star
32

paperknife.js

paperknife.js is a RFC 2822 compliant e-mail address parser/validator developed with PEG.js.
PEG.js
5
star
33

go-poolsuite

Poolsuite FM player as Go module
Go
5
star
34

uveira

Offline Wikipedia CLI for dumpster-dive MongoDB imports
Go
4
star
35

mrusme

@mrusme
4
star
36

tdrs

Weltraum TDRS is a lightweight ZeroMQ-based event hub.
C++
4
star
37

lbaction-ssh

SSH (LaunchBar Action)
JavaScript
4
star
38

fpmail

Fetch- & Procmail Docker Container
Dockerfile
4
star
39

marine_diesel

Elixir client library for the Docker API.
Elixir
4
star
40

primacorn

Test your crappy [Primacom](https://www.primacom.de) cable internet connection for packet losses and automatically report them to Primacom.
Ruby
4
star
41

RIOT-drivers

This repository contains of implementations of various sensor/device drivers for @RIOT-OS
C
3
star
42

tdrs-node

TDRS Node.js client reference implementation
JavaScript
3
star
43

symmetry454

A Go implementation of the Symmetry454 calendar.
Go
3
star
44

cmdr

A minimalistic single-binary tool that can be used as Docker ENTRYPOINT to run multiple commands simultaneously
Rust
3
star
45

deb-builder

Idiomatic Debian Package Builder
Dockerfile
2
star
46

xbscli

Command line interface for xbsapi and the official xBrowserSync API
Go
2
star
47

distccd

distcc (daemon) docker container
Dockerfile
2
star
48

mrusme.github.io

About @mrusme
2
star
49

aieq

Adafruit/Arduino Indoor Environmental Quality
C++
2
star
50

go-fleek

Tiny Go client library for the Fleek API
Go
2
star
51

go-render

Tiny Go client library for the Render.com API
Go
2
star
52

pieq

(Raspberry) Pie Indoor Environmental Quality
Python
2
star
53

image2kiwi

Converter from Images (JPEG, PNG, GIF, ...) into Kiwi `frames` JSON-arrays.
Python
2
star
54

overpush

A self-hosted, drop-in replacement for Pushover, that uses XMPP as delivery method and offers the same API for submitting messages, so that existing setups (e.g. Grafana) can continue working and only require changing the API URL.
Go
2
star