Lagrange
Lagrange is a versatile 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.
Lagrange is designed to be platform-independent. It relies on a small number of essential libraries for complex features like text rendering and cryptography. It is written in C and uses SDL 3 for hardware-accelerated graphics and OpenSSL for secure communications.
Screenshot (showing "skyjake.fi/lagrange/")
Features
- Beautiful typography with full Unicode support
- Autogenerated page style and symbol for each Gemini domain
- Scrolling and paginated view modes
- Smart suggestions when typing the URL — search bookmarks, history, identities
- Sidebars for page outline, managing bookmarks, viewing history, and other features
- Identity management — create and use TLS client certificates
- Audio playback: built-in MP3, Ogg Vorbis, WAV support
- Sync user data across devices
- Gempub books
- Curses-based TUI as an alternative to the graphical interface
- And more! Open `about:help` in the app, or see help.gmi
help.gmi (latest release)
Downloads
Prebuilt binaries are available for Windows 64-bit, macOS 10.13 or later (arm64 and x86_64), Linux AppImage (x86_64, aarch64, and armhf), and Android:
Download Lagrange
Mobile
Lagrange in Apple App Store (v1.21)
Beta builds are available for both iOS (TestFlight) and Android (as APKs):
iOS: Pre-releases on TestFlight
Android: F-Droid Repository
Android: Latest APK (22 MB)
Source
You can build from source on POSIX-compatible platforms:
Source code and resources (.tar.gz, 7.3 MB)
What's new?
News and announcements (@lagrange@skyjake.fi)
Git tags Gemini feed
Releases RSS feed
v2.0
Release announcement
- Syncing user data across devices with end-to-end encryption. (Relies on a sync server.)
- Paginated view mode that behaves like an e-reader. Content is presented as pages with up to four columns on screen.
- Enhanced Gempub support with all chapters combined into a single sequence of pages.
- Bookshelf for managing your Gempub book collection. Book metadata is synced across devices (e.g., source URLs, reading positions).
- Any Gemtext page can be saved as a Gempub book to the bookshelf.
- Subscribing to Tinylog feeds.
- Reader tab: feed entries get a dedicated (pinned) tab with entry navigation. Tinylog response link chains are expanded when entry contents are available.
- Bookmark trash: deleted bookmarks go into a trash folder instead of being immediately gone.
- View tools: convenient floating bar for tab-specific actions (identity pinning, auto-reload, paginated mode).
- Per-protocol and per-site theme customization and content settings.
- New document themes: Arboreal, Ember, and Paper.
- Hyphenation for English text (disabled by default).
- Support for system fonts and color Emoji. On macOS, iOS, Android, and Windows, UI icons use system-provided icon fonts.
- Revised UI design: rounded corners, a new slider widget, and improved tab bar appearance.
- Native file open/save dialogs (via SDL3).
- Improved performance of document parsing and layout.
- Support for ECDSA and Ed25519 client certificates. (ECDSA is the new default.)
- TUI: Mouse input is supported.
- Many bug fixes and various smaller enhancements.
Feedback
If you have questions, comments or improvement ideas, you can reach me via:
s/Lagrange
Bug reports and feature requests
GitHub issue tracker
Codeberg: PRs only
UI translations (Weblate)
@jk@skyjake.fi
Email (plain or encrypted)
Known issues
Flatpak
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.
Wayland
Modern versions of SDL should work well with Lagrange using the "wayland" SDL video driver. This is the default if a Wayland session is detected. On old versions of SDL, setting the `SDL_VIDEODRIVER=x11` environment variable may help.
Documentation and tutorials
OS-specific installation instructions
How to compile (in README.md)
The repository README details the basic build steps, configuration options, and has a few platform-specific notes.
See also
Gemlog posts about Lagrange
Font Library
Authors and contributors 🥇
Emoji test page
Lagrange for handheld Linux consoles
Home