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
On openSUSE Tumbleweed:
sudo zypper install lagrange
On other platforms (e.g., *BSD), you'll need to compile the source tarball (CMake).
- Bidirectional text, complex scripts, and right-to-left paragraph layout.
- Improved TOFU: error pages if untrusted/expired, public key fingerprints, server port.
- Uploads with the Titan protocol.
- Customizable UI color palette.
- Caching page layout and inline media in memory for faster backward navigation.
- Reorganized Preferences dialog.
- Input settings: keyboard/mouse scroll speed, Return key modifiers.
- Setting for adjusting line spacing.
- Gopher: improved content conversion, handling of preformatted blocks.
- macOS: keyboard shortcut for the system Emoji/symbol picker.
- (v1.6.1) Fixed a potential crash and incorrect behavior when entering and copying text in an input field; URL field contents not being selected after opening a new tab.
- (v1.6.2) Fixed crash when Titan response is a redirect. Fixed issues with buffered graphics and non-HarfBuzz text. Added --tab-url option. Input field improvements: expand Upload to full height; Home/End behavior; scroll with mouse wheel/trackpad; visual tweaks; incorrect behavior when holding down Shift while typing and deleting. macOS: Update UI when toggling dark mode while app is in the background.
- (v1.6.3) Input field improvements: highlight domain name in URLs, hide default Gemini scheme if narrow, selecting all text, retain focus in background. Fixed bugs: delay when splitting the view; initial split view background; line break modifier affecting all input fields; potential hang when aborting a connection.
- (v1.6.4) UTF-8 text files can be viewed in the app regardless of file extension. Added ENABLE_RESIZE_DRAW build option. Fixed bugs: cursor positioning and text insertion around variation selectors; "Unknown Status Code" in Page Information; network requests getting stuck before anything is sent; possible crash when clicking on sidebar items; freeze after a network request is cancelled (OpenBSD); page contents not reflowing during window resize.
- (v1.6.5) Audio init errors are no longer fatal. Fixed tab button appearance, cursor movement regression, right-clicking on sidebar tab buttons, crash with KMSDRM video driver, and minor text rendering artifacts.
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.