Preview release

The offline-first
content platform.

Fyr runs as a local web server for maps, books, AI, and knowledge archives. It works completely without internet once content is present — ideal for homes, field use, air-gapped networks, or low-bandwidth environments.

Everything you need, completely offline.

Access and manage a vast library of knowledge from a single local interface.

Offline Maps

Render vector maps locally using PMTiles, with absolutely no external tile server required.

Native Library

Read EPUB, PDF, Markdown, and natively parse ZIM files (Wikipedia & Kiwix-format) entirely on-device.

Local AI Assistant

Load and chat with GGUF language models like Qwen2.5, Llama 3.2, and Phi-3.5 without sending a single byte of data to the cloud.

Download Queue

Fetch maps, books, AI models, POI data, and misc files from curated or custom sources directly via the UI.

Central Content Management

Import local files, inspect the content inventory, manage roles (Open, Password-protected, or Read-only kiosks), and organize all assets in one place.

Raspberry Pi Ready

Native linux/arm64 support. Deploy Fyr on a Raspberry Pi and optionally turn it into a standalone Wi-Fi hotspot for fully off-grid access. See the guide →

Designed for speed and clarity.

Explore the clean local dashboard and workspace interfaces.

http://localhost:8080
Fyr Dashboard Screenshot Fyr Workspace Screenshot

One-Minute Quick Start

Already have Docker installed? Launch Fyr instantly with a single command.

Terminal
docker run --rm -p 8080:8080 \
  -e FYR_HOST=0.0.0.0 \
  -e DATA_DIR=/data \
  -v fyr-data:/data \
  hexagon/fyr:latest

Open http://localhost:8080 in your browser to begin.


Detailed Installation Guide

This guide serves as the authoritative reference for deploying Fyr. Choose the path that fits your specific hardware and environment requirements.

Option A: Docker on an Existing System

Use this path for a fast, repeatable deployment on Linux, macOS, or Windows.

Production Image

docker run --rm -p 8080:8080 \
  -e FYR_HOST=0.0.0.0 \
  -e DATA_DIR=/data \
  -v fyr-data:/data \
  hexagon/fyr:latest

Dev Image

docker run --rm -p 8080:8080 \
  -e FYR_HOST=0.0.0.0 \
  -e DATA_DIR=/data \
  -v fyr-data:/data \
  hexagon/fyr:dev
  • Access: Open http://localhost:8080 on the same machine, or http://<host-or-device-ip>:8080 from another device.
  • Persistence: Keep -v fyr-data:/data to persist maps, books, models, and downloads.
  • Images: hexagon/fyr:dev is for testing and validation; use hexagon/fyr:latest for production.

Persist Data Across Reinstalls and Upgrades

Fyr keeps user data only in DATA_DIR (/data in Docker examples). Reuse the same mount target on every run to keep data between container replacements.

Host folder bind-mount (direct host access):

docker run --rm -p 8080:8080 \
  -e FYR_HOST=0.0.0.0 \
  -e DATA_DIR=/data \
  -v /path/to/fyr-data:/data \
  hexagon/fyr:latest

Windows PowerShell bind-mount example:

docker run --rm -p 8080:8080 `
  -e FYR_HOST=0.0.0.0 `
  -e DATA_DIR=/data `
  -v C:\fyr-data:/data `
  hexagon/fyr:latest

⚠️ Note on Bind Mount Permissions & UID 1000

When using a host folder bind-mount (e.g., -v /path/to/fyr-data:/data), file permission issues can occur if the host directory ownership does not match the container's execution user (typically UID 1000). If Fyr encounters permission denied errors when writing downloads or user data, ensure the host directory is owned by the correct user or fix it using:

sudo chown -R 1000:1000 /path/to/fyr-data

Option B: From Source (Development)

Use this path when you want to develop Fyr or run local code changes.

Prerequisites

  • Rust stable toolchain
  • Node.js 24 (recommended to match CI)
  • npm

Build and Run

1. Build frontend assets:

cd crates/ui/frontend
npm ci
npm run build
cd ../../..

2. Build backend binary:

cargo build --release -p server --bin fyr

3. Run Fyr:

./target/release/fyr

Note: For Windows PowerShell use .\target\release\fyr.exe

Optional Runtime Overrides:

  • DATA_DIR (default ./public/data)
  • FYR_HOST (default 127.0.0.1; use 0.0.0.0 for Docker/LAN access)
  • FYR_PORT (default 8080)

Option C: Raspberry Pi OS From Scratch

Use this path to deploy Fyr on a clean Raspberry Pi. Fyr images natively support linux/arm64, which matches Raspberry Pi 64-bit OS perfectly.

1) Flash and Update Raspberry Pi OS

Flash Raspberry Pi OS 64-bit (Bookworm recommended) using Raspberry Pi Imager. Boot and update packages:

sudo apt update
sudo apt full-upgrade -y
sudo reboot

After reboot: sudo apt update

2) Install Docker

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker --version

3) Run Fyr

Once Docker is installed, follow Option A above to run Fyr — the same Docker commands and environment variable overrides apply.

To start Fyr automatically on every boot:

docker run -d --restart unless-stopped --name fyr \
  -p 8080:8080 \
  -e FYR_HOST=0.0.0.0 \
  -e DATA_DIR=/data \
  -v fyr-data:/data \
  hexagon/fyr:latest

4) Optional: Set Up as a Wi-Fi Hotspot

Turn your Raspberry Pi into a standalone Wi-Fi hotspot so phones, tablets, and laptops can connect directly to Fyr — no existing router or internet connection required. This is ideal for field use, classrooms, or off-grid deployments.

  • Requires: Raspberry Pi 3B+ or newer (built-in Wi-Fi), or a supported USB Wi-Fi adapter.
  • OS: Raspberry Pi OS Bookworm — NetworkManager (nmcli) is the default and is used below.

Create the hotspot (replace Fyr and offline-fyr with your preferred SSID and password):

sudo nmcli device wifi hotspot \
  ifname wlan0 \
  con-name fyr-hotspot \
  ssid "Fyr" \
  password "offline-fyr"

Enable the hotspot to start automatically on every boot:

sudo nmcli connection modify fyr-hotspot connection.autoconnect yes
sudo nmcli connection modify fyr-hotspot connection.autoconnect-priority 10

Bring it up immediately without rebooting:

sudo nmcli connection up fyr-hotspot

Once devices connect to the Fyr Wi-Fi network, they can reach Fyr at http://10.42.0.1:8080 (the default hotspot gateway address assigned by NetworkManager).

💡 Tip: Sharing an Ethernet Connection

If the Raspberry Pi is also connected via Ethernet (eth0), NetworkManager will automatically share that connection through the hotspot, giving connected devices internet access when available.


Quick Verification Checklist

  • docker ps (if running in Docker) shows the Fyr container as running.
  • Your browser can open /api/status on your target host and port.
  • The DATA_DIR location is writable by the system.
  • Port 8080 is not blocked by a firewall or occupied by another service.

Full Documentation

Use the docs below for role-specific guidance. Fyr is currently in preview, so check docs with each upgrade.