/ README.md
README.md
  1  # Nomad Network - Communicate Freely
  2  
  3  *This repository is [a public mirror](./MIRROR.md). All development is happening elsewhere.*
  4  
  5  Off-grid, resilient mesh communication with strong encryption, forward secrecy and extreme privacy.
  6  
  7  ![Screenshot](https://github.com/markqvist/NomadNet/raw/master/docs/screenshots/1.png)
  8  
  9  Nomad Network allows you to build private and resilient communications platforms that are in complete control and ownership of the people that use them. No signups, no agreements, no handover of any data, no permissions and gatekeepers.
 10  
 11  Nomad Network is build on [LXMF](https://github.com/markqvist/LXMF) and [Reticulum](https://github.com/markqvist/Reticulum), which together provides the cryptographic mesh functionality and peer-to-peer message routing that Nomad Network relies on. This foundation also makes it possible to use the program over a very wide variety of communication mediums, from packet radio to fiber optics.
 12  
 13  Nomad Network does not need any connections to the public internet to work. In fact, it doesn't even need an IP or Ethernet network. You can use it entirely over packet radio, LoRa or even serial lines. But if you wish, you can bridge islanded networks over the Internet or private ethernet networks, or you can build networks running completely over the Internet. The choice is yours. Since Nomad Network uses Reticulum, it is efficient enough to run even over *extremely* low-bandwidth medium, and has been succesfully used over 300bps radio links.
 14  
 15  If you'd rather want to use an LXMF client with a graphical user interface, you may want to take a look at [Sideband](https://github.com/markqvist/sideband), which is available for Linux, Android and macOS.
 16  
 17  ## Notable Features
 18   - Encrypted messaging over packet-radio, LoRa, WiFi or anything else [Reticulum](https://github.com/markqvist/Reticulum) supports.
 19   - Zero-configuration, minimal-infrastructure mesh communication
 20   - Distributed and encrypted message store holds messages for offline users
 21   - Connectable nodes that can host pages and files
 22   - Node-side generated pages with PHP, Python, bash or others
 23   - Built-in text-based browser for interacting with contents on nodes
 24   - An easy to use and bandwidth efficient markup language for writing pages
 25   - Page caching in browser
 26  
 27  ## How do I get started?
 28  The easiest way to install Nomad Network is via pip:
 29  
 30  ```bash
 31  # Install Nomad Network and dependencies
 32  pip install nomadnet
 33  
 34  # Run the client
 35  nomadnet
 36  
 37  # Or alternatively run as a daemon, with no user interface
 38  nomadnet --daemon
 39  
 40  # List options
 41  nomadnet --help
 42  ```
 43  
 44  If you are using an operating system that blocks normal user package installation via `pip`, you can return `pip` to normal behaviour by editing the `~/.config/pip/pip.conf` file, and adding the following directive in the `[global]` section:
 45  
 46  ```text
 47  [global]
 48  break-system-packages = true
 49  ```
 50  
 51  Alternatively, you can use the `pipx` tool to install Nomad Network in an isolated environment:
 52  
 53  ```bash
 54  # Install Nomad Network
 55  pipx install nomadnet
 56  
 57  # Optionally install Reticulum utilities
 58  pipx install rns
 59  
 60  # Optionally install standalone LXMF utilities
 61  pipx install lxmf
 62  
 63  # Run the client
 64  nomadnet
 65  
 66  # Or alternatively run as a daemon, with no user interface
 67  nomadnet --daemon
 68  
 69  # List options
 70  nomadnet --help
 71  ```
 72  
 73  **Please Note**: If this is the very first time you use pip to install a program on your system, you might need to reboot your system for the program to become available. If you get a "command not found" error or similar when running the program, reboot your system and try again.
 74  
 75  The first time the program is running, you will be presented with the **Guide section**, which contains all the information you need to start using Nomad Network.
 76  
 77  To use Nomad Network on packet radio or LoRa, you will need to configure your Reticulum installation to use any relevant packet radio TNCs or LoRa devices on your system. See the [Reticulum documentation](https://markqvist.github.io/Reticulum/manual/interfaces.html) for info. For a general introduction on how to set up such a system, take a look at [this post](https://unsigned.io/private-messaging-over-lora/).
 78  
 79  If you want to try Nomad Network without building your own physical network, you can connect to the [Unsigned.io RNS Testnet](https://github.com/markqvist/Reticulum#public-testnet) over the Internet, where there is already some Nomad Network and LXMF activity. If you connect to the testnet, you can leave nomadnet running for a while and wait for it to receive announces from other nodes on the network that host pages or services, or you can try connecting directly to some nodes listed here:
 80  
 81   - `abb3ebcd03cb2388a838e70c001291f9` Dublin Hub Testnet Node
 82   - `ea6a715f814bdc37e56f80c34da6ad51` Frankfurt Hub Testnet Node
 83  
 84  To browse pages on a node that is not currently known, open the URL dialog in the `Network` section of the program by pressing `Ctrl+U`, paste or enter the address and select `Go` or press enter. Nomadnet will attempt to discover and connect to the requested node.
 85  
 86  ### Install on Android
 87  You can install Nomad Network on Android using Termux, but there's a few more commands involved than the above one-liner. The process is documented in the [Android Installation](https://markqvist.github.io/Reticulum/manual/gettingstartedfast.html#reticulum-on-android) section of the Reticulum Manual. Once the Reticulum has been installed according to the linked documentation, Nomad Network can be installed as usual with pip.
 88  
 89  For a native Android application with a graphical user interface, have a look at [Sideband](https://github.com/markqvist/Sideband).
 90  
 91  ### Docker Images
 92  
 93  Nomad Network is automatically published as a docker image on Github Packages. Image tags are one of either `master` (for the very latest commit) or the version number (eg `0.2.0`) for a specific release.
 94  
 95  ```sh
 96  $ docker pull ghcr.io/markqvist/nomadnet:master
 97  
 98  # Run nomadnet interactively in a container
 99  $ docker run -it ghcr.io/markqvist/nomadnet:master --textui
100  
101  # Run nomadnet as a daemon, using config stored on the host machine in specified
102  # directories, and connect the containers network to the host network (which will
103  # allow the default AutoInterface to automatically peer with other discovered
104  # Reticulum instances).
105  $ docker run -d \
106    -v /local/path/nomadnetconfigdir/:/root/.nomadnetwork/ \
107    -v /local/path/reticulumconfigdir/:/root/.reticulum/ \
108    --network host
109    ghcr.io/markqvist/nomadnet:master
110  
111  # You can also keep the network of the container isolated from the host, but you
112  # will need to manually configure one or more Reticulum interfaces to reach other
113  # nodes in a network, by editing the Reticulum configuration file.
114  $ docker run -d \
115    -v /local/path/nomadnetconfigdir/:/root/.nomadnetwork/ \
116    -v /local/path/reticulumconfigdir/:/root/.reticulum/ \
117    ghcr.io/markqvist/nomadnet:master
118  
119  # Send daemon log output to console instead of file
120  $ docker run -i ghcr.io/markqvist/nomadnet:master --daemon --console
121  ```
122  
123  ## Tools & Extensions
124  
125  Nomad Network is a very flexible and extensible platform, and a variety of community-provided tools, utilities and node-side extensions exist:
126  
127  - [NomadForum](https://codeberg.org/AutumnSpark1226/nomadForum) ([GitHub mirror](https://github.com/AutumnSpark1226/nomadForum))
128  - [NomadForecast](https://github.com/faragher/NomadForecast)
129  - [micron-blog](https://github.com/randogoth/micron-blog)
130  - [md2mu](https://github.com/randogoth/md2mu)
131  - [Any2MicronConverter](https://github.com/SebastianObi/Any2MicronConverter)
132  - [Some nomadnet page examples](https://github.com/SebastianObi/NomadNet-Pages)
133  - [More nomadnet page examples](https://github.com/epenguins/NomadNet_pages)
134  - [LXMF-Bot](https://github.com/randogoth/lxmf-bot)
135  - [LXMF Messageboard](https://github.com/chengtripp/lxmf_messageboard)
136  - [LXMEvent](https://github.com/faragher/LXMEvent)
137  - [POPR](https://github.com/faragher/POPR)
138  - [LXMF Tools](https://github.com/SebastianObi/LXMF-Tools)
139  
140  ## Help & Discussion
141  
142  For help requests, discussion, sharing ideas or anything else related to Nomad Network, please have a look at the [Nomad Network discussions pages](https://github.com/markqvist/Reticulum/discussions/categories/nomad-network).
143  
144  ## Support Nomad Network
145  You can help support the continued development of open, free and private communications systems by donating via one of the following channels:
146  
147  - Monero:
148    ```
149    84FpY1QbxHcgdseePYNmhTHcrgMX4nFfBYtz2GKYToqHVVhJp8Eaw1Z1EedRnKD19b3B8NiLCGVxzKV17UMmmeEsCrPyA5w
150    ```
151  - Bitcoin
152    ```
153    bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6
154    ```
155  - Ethereum
156    ```
157    0x91C421DdfB8a30a49A71d63447ddb54cEBe3465E
158    ```
159  - Liberapay: https://liberapay.com/Reticulum/
160  
161  - Ko-Fi: https://ko-fi.com/markqvist
162  
163  
164  ## Development Roadmap
165  
166  - New major features
167      - Network-wide propagated bulletins and discussion threads
168      - Collaborative maps and geospatial information sharing
169  - Minor improvements and fixes
170      - Link status (RSSI and SNR) in conversation or conv list
171      - Ctrl-M shorcut for jumping to menu
172      - Share node with other users / send node info to user
173      - Fix internal editor failing on some OSes with no "editor" alias
174      - Possibly add a required-width header
175      - Improve browser handling of remote link close
176      - Better navigation handling when requests fail (also because of closed links)
177      - Retry failed messages mechanism
178      - Re-arrange buttons to be more consistent
179      - Term compatibility notice in readme
180      - Selected icon in conversation list
181      - Possibly a Search Local Nodes function
182      - Possibly add via entry in node info box, next to distance
183  
184  ## Caveat Emptor
185  Nomad Network is beta software, and should be considered as such. While it has been built with cryptography best-practices very foremost in mind, it _has not_ been externally security audited, and there could very well be privacy-breaking bugs. If you want to help out, or help sponsor an audit, please do get in touch.
186  
187  ## Screenshots
188  
189  ![Screenshot 1](https://github.com/markqvist/NomadNet/raw/master/docs/screenshots/1.png)
190  
191  ![Screenshot 2](https://github.com/markqvist/NomadNet/raw/master/docs/screenshots/2.png)
192  
193  ![Screenshot 3](https://github.com/markqvist/NomadNet/raw/master/docs/screenshots/3.png)
194  
195  ![Screenshot 4](https://github.com/markqvist/NomadNet/raw/master/docs/screenshots/4.png)
196  
197  ![Screenshot 5](https://github.com/markqvist/NomadNet/raw/master/docs/screenshots/5.png)