A modern browser for Reticulum Network using Reticulum-Go and Micron-Parser-Go.
This project is under heavy active development and may be unstable on some platformas until v1.0
- NomadNet compatible - renders Micron (
.mu) pages served over Reticulum. - Full interface control - Hot reload interfaces.
- Multiple identities - create, import, export, rename, and switch between Reticulum identities.
- Document reader - open epub and PDF files downloaded over the network.
- Micron editor - write and preview
.mupages. - Extension system - install JS or WASM plugins with per-permission grants (network, storage, navigation).
- Runs anywhere - desktop builds for Linux, Windows, and macOS, an Android APK, and a headless server binary/Docker image for your server or rpi zero w.
- Localized UI - English, German, Spanish, and Russian, with more community translations welcome.
Guides by language in docs/:
| Language | Folder |
|---|---|
| English | docs/en/ |
| Russian | docs/ru/ |
| Spanish | docs/es/ |
| German | docs/de/ |
Start with Getting started in your language.
Grab the latest release for your system from GitHub Releases.
| Package | What you need on the host |
|---|---|
| Linux AppImage | Bundles GTK 4, WebKitGTK 6, and other libraries via linuxdeploy. No separate WebKit install. Some distros need FUSE or APPIMAGE_EXTRACT_AND_RUN=1. |
| Linux Flatpak | Flatpak plus the org.gnome.Platform runtime (GTK 4 and WebKitGTK 6). The app bundle does not ship those runtimes itself. |
| Linux Arch package | GTK 4 and WebKitGTK 6.0 from pacman (sudo pacman -U renbrowser-linux-*.pkg.tar.zst). |
| Linux plain binary | GTK 4 and WebKitGTK 6.0 at runtime, for example libgtk-4-1 and libwebkitgtk-6.0-4 on Debian/Ubuntu 24.04+, Fedora, or Arch. |
Windows .exe |
Microsoft Edge WebView2 Runtime. Usually already on Windows 10/11. The NSIS installer can install it if missing; the portable .exe does not. |
macOS .app |
Recent macOS with the system WebKit framework (no extra browser runtime to install). |
| Android APK | Android 5.0 or newer (API 21+). Universal APK covers arm64 and 32-bit ARM. |
| Server binary / Docker | No desktop GUI stack. Static Linux/FreeBSD/NetBSD builds; OpenBSD may link against the system libc. Docker image is linux amd64 only. |
The published image is ghcr.io/quad4-software/renbrowser.
The image runs as a non-root user, so create the host directories first (otherwise Docker creates them as root), pass your host UID/GID, and map config and profile data under /data:
mkdir -p "$HOME/.reticulum-go" "$HOME/.renbrowser"
docker run --rm --name renbrowser -p 8080:8080 \
--user "$(id -u):$(id -g)" \
-e HOME=/data \
-v "$HOME/.reticulum-go:/data/.reticulum-go" \
-v "$HOME/.renbrowser:/data/.renbrowser" \
-e REN_BROWSER_CONFIG=/data/.reticulum-go/config \
ghcr.io/quad4-software/renbrowser:latestThe same flags work with podman run instead of docker run. On Podman you can use --userns=keep-id instead of --user "$(id -u):$(id -g)". If SELinux blocks the bind mount, add :Z to the volume flags (for example -v "$HOME/.reticulum-go:/data/.reticulum-go:Z").
Then open http://localhost:8080 in any browser on the same machine.
For a custom build from this repo:
task build:docker
task run:dockerThe server image currently has no login screen. Only expose it on networks you trust, or put it behind a reverse proxy with access controls. See SECURITY.md.
For contributors or platforms without a pre-built package.
You will need:
- Go 1.26 or newer
- WebKitGTK-6.0 (for wails desktop apps)
- Node.js 22+ and pnpm 11+
- Task (optional, recommended)
- Reticulum config at
~/.reticulum-go/(or setREN_BROWSER_CONFIG)
Steps:
git clone https://github.com/Quad4-Software/Ren-Browser.git
# or via rngit: git clone rns://06a54b505bb67b25ef3f8097e8001edc/public/ren-browser
cd Ren-Browser
task build
# or make build
./bin/renbrowserGo modules pull Quad4 dependencies from GitHub automatically; no extra repos to clone.
Platform-specific builds:
task build:windows
task build:darwin
task build:android # universal APK (arm64 + armeabi-v7a)
task build:android:emu # emulator (host ABI)Installers (AppImage, Arch package, .app bundle, etc.):
task package
task package:linux:archNix flake:
nix develop
nix buildAndroid builds need the Android SDK (API 34, NDK r26+). Set ANDROID_HOME and run task android:install:deps if the build complains about missing tools.
Release APK signing uses a Java keystore (.jks or .keystore), not a public certificate file. A .p12 (PKCS#12) bundle also contains the private key and must be kept secret. Generate a release keystore locally (never commit it):
keytool -genkeypair -v -keystore release.keystore -alias renbrowser \
-keyalg RSA -keysize 4096 -validity 10000Point Gradle at it when packaging:
export ANDROID_KEYSTORE_FILE="$PWD/release.keystore"
export ANDROID_KEYSTORE_PASSWORD='your-store-password'
export ANDROID_KEY_ALIAS=renbrowser
export ANDROID_KEY_PASSWORD='your-key-password'
task package:androidStock Go 1.26.x still crashes under ARM Memory Tagging Extension (SEGV_MTESERR) because C.GoString / runtime.findnull over-reads tagged C memory. Tip has the Android fix (CLs 749062 / 751020). Go 1.27 should ship it. Upstream iOS support is still open (CL 751000).
Android and iOS app builds therefore use a local tip toolchain under build/tools/go-mte (gitignored), with a small iOS parity patch. First mobile build compiles that toolchain once (needs network + a bootstrap Go). Desktop and server builds keep system Go from go.mod.
task toolchain:mte # optional: prebuild the mobile Go toolchain
task build:androidOverride pin with GO_MTE_REF=<commit> or force a rebuild with GO_MTE_FORCE=1.
- Address bar: enter a NomadNet destination or use built-in schemes (
about:,settings:, etc.). - Discovery: find nodes announced on your Reticulum interfaces.
- Settings: manage interfaces, themes, extensions, and profile data.
- Data: bookmarks, history, and tabs are stored in
~/.renbrowser/renbrowser.db. Olderstate.jsonfiles are migrated on first launch.
Type license in the address bar to read the in-app license text.
Install extensions from Settings → Extensions (zip or folder), or unpack into ~/.renbrowser/plugins/<id>/ with a renbrowser.plugin.json manifest.
An example extension lives in extensions/hello-extension/. Extension authors work with permissions (storage, navigation, network, and related caps) declared in the manifest. See internal/plugins/manifest.go for the full schema.
Run Ren Browser as a web app without the desktop shell. Useful for homelab servers, Docker, or a machine that already runs Reticulum.
task build:server
./bin/renbrowser-server --host 0.0.0.0 --port 8080Cross-compile headless server binaries (pure Go, CGO_ENABLED=0):
task build:server GOOS=linux GOARCH=arm64 OUTPUT=bin/renbrowser-server-linux-arm64
task build:server GOOS=linux GOARCH=arm GOARM=6 OUTPUT=bin/renbrowser-server-linux-armv6
task build:server GOOS=freebsd GOARCH=amd64 OUTPUT=bin/renbrowser-server-freebsd-amd64
task build:server GOOS=windows GOARCH=amd64 OUTPUT=bin/renbrowser-server-windows-amd64.exeRelease builds also ship renbrowser-server-linux-amd64, linux-arm64, linux-armv6 (Raspberry Pi Zero W), freebsd-amd64, freebsd-arm64, openbsd-amd64, netbsd-amd64, and windows-amd64 (renbrowser-server-windows-amd64.exe).
Common environment variables (also readable from a .env file in the working directory):
| Variable | Purpose |
|---|---|
WAILS_SERVER_HOST / REN_BROWSER_HOST |
Bind address |
WAILS_SERVER_PORT / REN_BROWSER_PORT |
Port (default 8080) |
REN_BROWSER_CONFIG |
Path to Reticulum config |
REN_BROWSER_TRUST_PROXY |
Trust X-Forwarded-* from a reverse proxy |
REN_BROWSER_BASE_PATH |
URL prefix when served under a subpath |
Use --public-mode to keep favorites, history, and tabs in the browser (localStorage) instead of the server database.
task devRun the full quality gate before sending changes (make check or task check):
make check
task test:interop # optional; needs a live Reticulum network
make screenshots # optional; refresh README preview imagesPrefer Task? The same targets exist as task check, task screenshots, and so on. This repo also ships a Makefile if you do not want Task installed. Tree integrity helpers also use Make only: make tree-rsm-verify, make tree-rsm-sign, and make hooks-install (see SECURITY.md).
| Path | Contents |
|---|---|
main_desktop.go / main_server.go |
Desktop and headless entry points |
internal/ |
Reticulum, NomadNet, rendering, SQLite store, plugins |
frontend/ |
Svelte 5 UI |
build/ |
Packaging and platform tooling |
Regenerate with make screenshots or task screenshots. Images are written under screenshots/desktop/ and screenshots/mobile/ in dark/ and light/ subfolders. On Linux you can also capture the native window after launch:
REN_BROWSER_SCREENSHOT_DIR=screenshots/desktop REN_BROWSER_SCREENSHOT_THEME=dark ./bin/renbrowserPatches and guidance: CONTRIBUTING.md
Security reports: SECURITY.md
Legal and licensing questions: LEGAL.md
Ren Browser is released under the MIT License.