Lagrange is a desktop GUI client for browsing Geminispace. It offers modern conveniences familiar from web browsers, such as smooth scrolling, inline image viewing, multiple tabs, visual themes, Unicode fonts, bookmarks, history, and page outlines.
Like Gemini, Lagrange has been designed with minimalism in mind. It depends on a small number of essential libraries. It is written in C and uses SDL for hardware-accelerated graphics. OpenSSL is used for secure communications.
- Beautiful typography with full Unicode support
- Autogenerated page style and Unicode icon for each Gemini domain
- Smart suggestions when typing the URL — search bookmarks, history, identities
- Sidebar for page outline, managing bookmarks and identities, and viewing history
- Multiple tabs and split view
- Identity management — create and use TLS client certificates
- Audio playback: MP3, Ogg Vorbis, WAV
- And more! Open `about:help` in the app, or see help.gmi
On macOS you can install and upgrade via Homebrew:
brew install --cask lagrange
Please check MacPorts if you are using macOS 10.12 or older.
On Fedora and any RHEL/CentOS Stream 8 and 9 derivatives (RHEL, CentOS Stream, Alma, Rocky) that have the EPEL repos enabled:
sudo dnf install lagrange
On openSUSE Tumbleweed:
sudo zypper install lagrange
On other platforms (e.g., *BSD), you'll need to compile the source tarball (CMake).
- Several keyboard UI navigation improvements.
- Support for the Spartan protocol.
- Bookmark indicator in the URL field.
- Viewing Gemtext and Markdown pages as source or styled text.
- Updated "Noto Emoji" font with characters for Unicode 14.
- macOS: Keep app running after all windows closed.
- Curses TUI: an alternative text-mode interface for terminal emulators (source build only; see README).
- (v1.13.1) Fixed a crash when opening Preferences.
- (v1.13.2) Fixed font selection and window state restoration issues.
- (v1.13.3) Changed bookmark indicator icon. Updated URL handlers for Gopher and Spartan. Bug fixes: error page on empty response; Spartan prompts, empty path, opening from command line; macOS app relaunch after update. Improved `build-tui.sh`.
- (v1.13.4) TUI: Full/VGA/mono color modes based on Curses's detected features. Bug fixes: TUI release build problems; ignore GUI env vars; opening Spartan URLs via OS.
- (v1.13.5) Adjusted "Go to Parent" behavior. Bug fixes: crash when viewing a ZIP file; misparsing filename from URL; macOS window state getting lost. TUI: Added simple characters mode, improved headings; ignore fontpacks; more interactive `build-tui.sh`.
- (v1.13.6) Added option to split tabs evenly (excluding sidebars). Bug fixes: crash when toggling plain text view; manually entered URLs shouldn't be inlined; split view mouse handling; popup positioning, scrolling, and scroll indicator issues; URL encoding issues; custom link icons with unsupported protocols; tab/window title from filename, avoid redundancy. macOS: Fixed sidebar animation glitch, tuned UI refresh with Metal backend.
- (v1.13.7) Improved/fixed proxy server certificate error handling.
If you have questions, comments or improvement ideas, you can reach me via:
Flatpak applications run in a sandbox that limits their access to the rest of the system. At the moment, Lagrange has not been fully adapted to use Flatpak Portal APIs, so the following are known issues:
- Unable to open HTTP/HTTPS links via the default browser.
- Multiple instances of the application overwrite each other's data.
The environment variable `SDL_VIDEODRIVER=wayland` can be used to force SDL to use Wayland instead of X11. However, SDL does not have full support for Wayland at the moment. You should set the Lagrange CMake build option ENABLE_POPUP_MENUS to NO. If there are issues with resizing windows, also set ENABLE_RESIZE_DRAW to NO.
Documentation and tutorials
The repository README details the basic build steps, configuration options, and has a few platform-specific notes.
A thorough walkthrough of how to upload text and files via Titan using the (beta) version of Lagrange on an iPhone.