``` "Lagrange" written in all caps __ __ __ ___ | /\ / _` |__) /\ |\ | / _` |__ |___ /~~\ \__> | \ /~~\ | \| \__> |___ ``` # Release notes ## 1.3 * Added a language translation feature. It uses a self-hosted LibreTranslate instance running on `xlt.skyjake.fi`. * Only one instance of Lagrange is allowed to run per user directory. This prevents instances from overwriting each other's data. * A server certificate can also be verified by Certificate Authorities. When "CA file" and/or "CA path" are set in Preferences, CA verification will mark a certificate as trusted. * Added "about:about" that lists all the available "about:" pages. * Added option to word wrap plain text files. This is on by default because there is no horizontal scrolling for plain text. * Gopher: Handling the 'h' line type. * Large images are downscaled to an appropriate size for presentation. * Improved font glyph caching to avoid stuttering during scrolling. All required glyphs are cached after a page load finishes. This allows more efficient copying of glyphs as the operations can be batched. * Improved event handling to support touchscreens on any platform. * Fixed use of multiple search terms for quick lookup. * Fixed handling of IDNs when the user sets a server certificate as trusted via the UI. * Fixed handling of multiple feeds having an entry with the same URL. * Fixed percent-decoding of URLs on the command line and coming in via system URL handlers. User interface: * Added unread feed entry count to the sidebar. * Default page scroll keybindings changed: PageUp/Down scroll a whole page, and Space/Shift+Space scrolls half a page. If you're changed these bindings, you'll need to rebind them. * UI scaling factor is applied immediately when closing Preferences. Restarting is no longer necessary. * Window scaling changes automatically when moving window to a different display. * Added a context menu for toggling sidebars. The menu appears when right-clicking on the navbar or the sidebar tab buttons. * Added a cut/copy/paste context menu to input fields. * Reload button moved into the URL field. * Added an "Import..." button to the empty Identities sidebar. * Narrow URL input fields will not display the default "gemini" scheme. * Keyboard modifiers can be customized using the `modmap.txt` configuration file. * Caps Lock can be used as a modifier key. * Fixed background activity indicators overlapping each other. * Fixed minor blending artifacts with the current heading shown on the right side of the page. Visual design: * The icon of Gemini links to the same domain can be overridden with the Emoji or other pictograph at the start of the link label. For an example, see Astrobotany. * Links are shown as bold text and tinted with the page theme color. * The spacing of bullet lists vs. link lists is more consistent. * Adjustments to the "Colorful Dark", "Colorful Light", and "Gray" themes. "Gray" looks different in dark and light UI modes. * Popup menus have icons for items to make it faster to find the item you're looking for. * Soft shadows for popup menus. * Scrollbars fade away on macOS/iOS and dim on other platforms. * Tabs in Preferences look the same as tabs in the sidebar. * Cleaner unread feed item appearance. * URL fields highlight the domain name. Command line usage: * Added `--help`, `--version` options. * A previously started instance can be controlled with command line options. * `--list-tab-urls` prints a list of the currently open URLs. ## 1.2.3 * Fixed XML parser hanging on numeric character entities. * Fixed "Monospace Body" option causing Gemtext line markup to be visible. * Fixed bookmarking a wrapped link. Now the entire label text gets used instead of just the clicked segment. * Fixed handling of non-advancing monospace glyphs. * CMake: Automatically check if `lib/the_Foundation` is up-to-date. * CMake: Build configuration fails if an SSL library is not found. * Reverted default bookmarks having "Getting Started" as a remote bookmark source. Now it's just a regular bookmark. ## 1.2.2 * Stability improvements. * Whitespace is no longer normalized when using the monospace body setting. * Fixed issues with percent-encoded Gopher paths. * macOS: Try to prevent forced use of high-performance GPU. ## 1.2.1 * Fixed crash when creating a bookmark. ## 1.2 New features: * Atom feed subscriptions: Atom XML documents are automatically converted to Gemini feed index pages. This is a built-in version of the Atom-to-Gemini example on the Help page. * Inline downloads: right-click on any link that is openable inside Lagrange and select "Download Linked File". * Editable bookmark icons: use your favorite Unicode character as the symbol to represent a bookmarked site. * Searching via URL field: non-URL text entered in the field is passed onto the configured search query URL (Preferences > Network). An indicator is shown if a query will take place. * Tab auto-reloading: configure a reloading interval using the page context menu ("Set Auto-Reload..."). Auto-reloading is part of the persistent state of the tab. * "Iosevka" and "Source Sans Pro" (the UI font) can be used as heading and body fonts. * User preference for aligning all pages to the top of the window. * Keybinding (F11) for toggling fullscreen mode. On macOS, the shortcut is ⌃⌘F as before. * Keybinding for finding text on page. UI design: * Enhanced navbar: adjusted spacing, URL field has a maximum width, tab titles have less pronounced borders. * Improved sidebar appearance: bold subheadings, larger feed icons, adjusted spacing, background color. * Font consistency: all UI elements use the same font (i.e., no more monospace input fields). * Added setting for UI accent color (teal, orange). * General fine-tuning of the color palette. * Dialog buttons are aligned to the right edge, leaving room for additional action buttons on the left. * Page Information button is embedded in the URL field. * Page Information dialog is attached to its button. * Site icons use a different color in tab titles for visual distinction. * Fade background behind modal dialogs. * Responsive page margins. * Windows: Added a custom window frame to replace the default Windows one. This looks nicer but does not behave exactly like a native window frame. Added a setting to Preferences for switching back to the default frame. Other changes: * Help is opened on first run instead of the "About Lagrange" page to make it easier to discover important Gemini links like the FAQ. * "Go to Root" respects a user name found in the URL. One can still "Go to Parent" to get above the user level. * Feed entries are sorted by refresh time if they are published on the same date. * Don't show future-dated feed entries in Feeds. * Middle-clicking on links: open new tab in background or foreground depending on the Shift key. * Shift+Insert can be used for pasting clipboard contents into input fields. * Removed a strange violet-on-green color theme pairing. Bug fixes: * Fixed text prompt dialogs closing and accepting the entered text when switching focus away from the app. * Scroll position remains fixed while horizontally resizing the window or sidebars. * Fixed a crash when opening the audio player menu. * Fixed Gopher requests that were using URL (percent) encoded characters. * Windows: Fixed a flash of white when the window is first opened. ## 1.1.4 * Fixed feed entry highlight/read status issue in the sidebar. * Fixed Gopher menu links that contain spaces. * Fixed vertical alignment of short pages: top banner is excluded because it is not part of the content. ## 1.1.3 * Fixed crash when deleting a bookmark that was being used as a remote bookmark source. * Fixed potential crash at shutdown. * Fixed URL path decoding not respecting reserved characters. * AppImage: Disable SSE 4.1 for improved compatibility. * Windows: Fixed portable build so it stores user files under the "userdata" directory and not under AppData\Roaming\. ## 1.1.2 * Fixed potential crash at launch. * Fixed input query from a background tab being applied to the foreground tab. An input query now forces a tab to the foreground. * Fixed window scroll position moving when resizing vertically. * Fixed feed refresh waiting forever if a server doesn't respond. * Fixed hover state not being cleared when right-clicking links. * Fixed remote bookmarks not appearing if they lacked a user-friendly name on the source page. ## 1.1.1 * Fixed focus cycling inside dialogs. Widgets outside a dialog are not allowed to be focused. * Fixed missing cursor in the New Identity "Valid until" field. * Fixed "Import Links as Bookmarks" so it can be used to import local copies of remote bookmarks when viewing the remote source page. * Fixed a cosmetic issue in the Import Identity dialog where part of the widget frames were not drawn. * Fixed word wrapping issue in unread feed entry titles. * Fixed opening a URI that contains a fragment in the default browser. The fragment is no longer omitted. * Fixed default value for the Line Width setting. * Linux: Check monitor DPI for UI scaling like on Windows and macOS. * Allow reloading the same URL when clicking on a link or bookmark, or pressing Enter in the navbar. * Bookmark URLs are normalized by removing the default Gemini port. * Added a list of environment variables to "about:debug". * XDG: Respect `XDG_CONFIG_HOME` environment variable for storing user files. * XDG: Use the configured XDG download directory as default Downloads location. * The default set of bookmarks now uses a remote source. => gemini://skyjake.fi/lagrange/getting_started.gmi "Getting Started" bookmarks ## 1.1 * Added identity importing: existing client certificates in PEM format can be imported from the current page, from clipboard, or from drag-and-dropped files. * Added setting for maximum cache size. This is the amount of fetched data kept in memory for page navigation and content lookup. The default is 10 MB. * Added option to show full link URL when hovering on it. * Added support for Finger links (courtesy of John Cowan). * Added keybindings for page reload, opening link in new tab via home row keys (${SHIFT+}F), and hovering on a link via home row keys (H). * Added keybinding for switching to next set of links for home row navigation. * Added keybindings for new tab, close tab, adding a bookmark. * Added a bold UI font. It is used for unread feed entries and default dialog buttons. * Better alignment of quick lookup result icons and labels. * Remote bookmarks are grouped under their source in the bookmark list. * A bookmark's icon is updated after loading the page so it matches the site. * Trusting a new server certificate manually will update the current page without reloading. * Middle-clicking on a tab title closes the tab. * Internal state files now use an ".lgr" extension. If downgrading after running v1.1, note that the old version will not read these. * Fixed timestamps of visited URLs. Your browsing history will be cleared but can still be viewed manually in "visited.txt". * Fixed issue where "heading" feed entries would turn unread after a while. * Fixed duplicate U key for home row navigation. * Fixed an issue with Unicode characters in quick lookup search terms. ## 1.0.3 * Improved font glyph caching: only rasterize glyphs when drawing text, and retry after failure. This makes initial document layout faster and avoids issues with permanently lost glyphs. * Fixed parts of text disappearing when the glyph cache fills up. The cache also uses less memory now. * Fixed percent-encoding of spaces when copying URLs to clipboard. * Fixed feed entry context menu showing the wrong menu item for Mark as Read/Unread. * Fixed parentheses and brackets being trimmed from feed entry titles. * Fixed quotes appearing continuous even when there are empty lines in between. * Fixed quote border line not showing up on empty quote lines. * Fixed handling of redirection in a background tab — redirected URL would open in the current tab. * Fixed Gemini URL normalization with regard to default port. * Fixed a very minor memory leak. * Fixed missing "gopher:" URL scheme registration on macOS. ## 1.0.2 * Fixed URL input field showing the wrong URL when opening tabs in the background. * Fixed trusting a renewed server certificate when multiple tabs are open. * Fixed opening sidebar feed entries in new/background tab with modifier keys. * Fixed editing identity notes. The entered new notes were not being applied. * Server certificate domain name check accepts a matching CN even when SAN doesn't match. ## 1.0.1 * Fixed percent-encoding of the query string. * Fixed cursor positioning in input fields. ## 1.0 * Added remote bookmarks. Any bookmarked 'text/gemini' page with the "remotesource" tag is a source of remote bookmarks. Each link on the page is shown as a remote bookmark in Bookmarks. * Added a way to export bookmarks via the special page "about:bookmarks". The page can also list all bookmarks by tag or by creation date. * Added context menu item for duplicating a bookmark. * Import all links on a page as bookmarks. (Importing tags is not supported in this version.) * Links can be bookmarked via context menu. * Open links with an unrecognized scheme in the default browser. * Open sidebar items in new/background tab via context menu or modifier keys. * "Edit Feed..." menu item shows the Feed Settings dialog. * Removed unimplemented menu items. ## 0.13.2 * Added a little spinner to indicate ongoing requests. * Fixed very thin progress bar on HiDPI displays. * Fixed link to Help page from the Identities sidebar tab. * Fixed incorrect text colors in the UI (e.g., selected lookup result). * macOS: Disable menu shortcuts for navigation when editing text to prevent accidental page changes. ## 0.13.1 * Fixed build failure on Linux. ## 0.13 * Support for Internationalized Domain Names (IDN) in network requests. * Percent-encoded URL paths are shown decoded in the UI, and encoded in outgoing requests. * Added option to disable decoding of percent-encoded paths for the UI. * Quick search via URL bar shows entries from subscribed feeds. * Added keybindings for zooming. * Improved usability of page content searching (${CTRL+}F, Escape). * Clicking on a certificate warning shows the Certificate Status dialog. * macOS: Keyboard shortcuts in native menus are updated according to bindings. * Tweaked handling of Emojis in monospace text. They are given more space as needed, but the original monospace spacing is restored after whitespace. * Fira Mono replaced with Iosevka Term Extended. * Fixed use of variable-width fonts in input fields. * Fixed handling of Unicode joiners and modifiers (by ignoring them, since we lack the glyphs). * Fixed a layout issue with sidebars where the bottommost content line was occasionally not visible. * Fixed exit when a hook program didn't read its input. * Fixed crash when using an identity (with LibreSSL on OpenBSD). ## 0.12.1 * 'text/*' content falls back to plain text. * Minimized visual artifacts in Unicode box-drawing characters (overlapping/gaps) by fine-tuning glyph scaling. * Fixed truncated tab titles when opening tabs in background. * Fixed possible exit if hook program not found (SIGPIPE). * REQUEST_URL is set in the environment when running MIME hooks. * "about:debug" lists the configured MIME hooks. * macOS: Fixed excessive CPU usage while idling. ## 0.12 * Added MIME hooks: pipe Gemini responses through external programs for arbitrary processing. (See "about:help" for usage.) * Added a right-hand sidebar; have a sidebar on the right or on both sides at once. * Added a clear warning banner when there is an issue with the server's TLS certificate. * Follow Weiph/pikkulogs — subscribe to new headings on pages. * Added UI for subscribing: feed name, entry type (Gemini feed or new headings). * Added keyboard shortcut ${SHIFT+}${CTRL+}D for subscribing to page. * Feeds sidebar is capped to 100 entries. "about:feeds" shows all known entries. * Network connections have a timeout in case server doesn't respond at all. * Adjusted spacing before/after links to reflect use of empty lines in the source. * Clicking on page area unfocuses URL input field. * Added keybindings for switching tabs. * Gopher: Query links have a 🔍 icon. * Fixed handling of "file:///" URIs on Windows. * Fixed misaligned Unicode box-drawing characters. * Fixed missing error page if status code is unknown (torture test 34). * Fixed detection of invalid headers (torture test 39). * Fixed rendering of soft hyphens (torture test 50). ## 0.11 * Added feed subscriptions. A subscription is any bookmark with the "subscribed" tag. Subscribed feeds are refreshed in the background while Lagrange is running. * Added a new sidebar tab for feeds. * Added "about:feeds" to show entries from all subscriptions on one page. * Added icons for special bookmark tags, and context menu items for toggling "homepage" and "subscribed". * Improved stability: fixed data races, undefined behavior, thread leaks. * Wide preformatted blocks can be scrolled horizontally with the mouse wheel or trackpad. * Line widths are slightly narrower for improved readability. * Light mode UI color palette is less saturated, more sepia-toned. * Tall menus/dialogs can be scrolled with the mouse wheel. * Improved download progress updates: never update more often than the UI can be refreshed. * macOS: Control-Click works as a right mouse click. * Unix: Location of `xdg-open` is no longer hardcoded. * Fixed large downloads (10 MB+) stopping prematurely due to a decryption error. * Fixed window contents not being updated during window resizing. * Fixed selection/search markers disappearing when scrolling down. * Fixed displaying of "about:" URLs in history. * Fixed build on FreeBSD (tested on 12.1). ## 0.10 * Added option to load inline images when pressing Space or ↓ for a more focused reading experience — just keep tapping a single key to proceed. If an image link is visible, it will be loaded instead of scrolling. This option is disabled by default. * Added context menu item to save inline images to Downloads. * Added an option to use a proxy server for Gemini requests. * Added a new keyboard link navigation mode focusing on the home row keys. The default keybinding for this is "F". * Added a keybinding to activate keyboard link modifier mode. The keyboard link keys are active while the modifier is held down. The default is ${ALT}. * Clearing and resetting keybindings via a context menu. * Added a Window tab in the Preferences dialog; moved some of the settings around for better organization. * Improved page search visualization: if the match is inside a link URL, the link icon is now highlighted. Previously these matches were not visualized in any way. * Improvements to URI parsing with regard to RFC 3986. Cases that are handled better are double slashes, query-only relative URIs, relative URIs that begin with a tilde, IPv6 literals, username in the authority. * Replaced EB Garamond with Tinos for improved readability. * Replaced Kosugi Maru with Noto Sans CJK JP for better glyph coverage. * Fixed font sizing of level 3 headings. * Fixed download progress indicators sometimes remaining visible even after leaving the page. ## 0.9 * Clicking on the top banner of a page (where the site icon and hostname are shown) navigates to the root directory of the site. * Added menu items and keybindings for navigating to site root or the parent directory. * Added option to use a monospace body text font on all Gemini and/or Gopher pages. * Remember redirect source URLs as visited but not shown in the History tab. Note that "visited.txt" is no longer fully compatible if opened in an older version of Lagrange. * "gopher:" scheme is allowed in command line arguments. * XDG: .desktop file declares support for opening Gopher URLs. * Fixed an issue where copying the URL input field would not place anything on the clipboard. * Fixed the Lagrange window visibly changing position during launch. * Fixed crash when a single percent sign was typed in an input field. * macOS: Fixed native menu keyboard shortcuts causing redundant command activations. * macOS: Fixed assigning keybindings when there is an equivalent native menu shortcut. ## 0.8.1 * Fixed potential lockup when navigating back to a query prompt. * macOS: Improved handling of scroll wheel events from a mouse. ## 0.8 * Added support for Gopher. * Added support for the full palette of 8-bit ANSI foreground colors. * Added option to disable smooth scrolling. * Added button to manually set server certificate as trusted (if the certificate is valid but untrusted). * Added keybindings for Back/Forward navigation. * Added a context menu item for opening HTTP links in the default browser even when a proxy is configured. * Revised identity creation dialog: changed field order, added warning about temporary identities not being saved. * ${CTRL+}Click opens tab in background, ${SHIFT+}${CTRL+}Click opens as foreground tab. The same modifier keys work with keyboard navigation. * Improved word wrapping of emoticons (:D). * Automatic redirects allowed when the destination URL uses the same scheme as the originating URL. For example, when using a proxy, HTTP(S) is allowed to automatically redirect to other HTTP(S) URLs. * Windows: Fixed handling of drag-and-dropped and command line file paths. ## 0.7.2 * Fixed parsing of the server's response. In some cases it was possible that the response was only partially read. * Fixed handling of TLS/SSL connection being closed without the socket being closed. ## 0.7.1 * Fixed build on OpenBSD. * Fixed build with LibreSSL. * Fixed a potential crash at app shutdown. * Fixed a potential crash when a thread exits. * Fixed a potential lockup when a thread exits. * Linux/Unix: Open "mailto:" links with xdg-open instead of the web browser. ## 0.7 * Basic set of user-configurable key bindings. * Sidebar: Added a "New Identity" button and a link to "about:help" if there are no identities. * Faster drawing of certain UI elements: site icon and current heading in the left margin, unfocused input fields, timestamp at the end of the page. * History is not updated until a network request finishes. * Improved opening connections when multiple IP addresses are found for a hostname. * Fixed handling of TLS/SSL errors and hostname lookup problems — an error page is shown. * Fixed an issue where window contents were not being updated immediately after the window gets exposed when using, e.g., openbox or dwm. ## 0.6 * Added an indicator to visualize progress of network requests. * Added new color themes for page content: Colorful Light, Black, Gray, Sepia, High Contrast. * Added page content color theme selection in Preferences. * Added quote indicator option: icon or vertical line. * Added a new font for Korean glyphs. * Smoother smooth scrolling, making it easier to keep one's eyes on the content throughout the motion. * Windows: Register Lagrange as a handler of "gemini:" URLs. * macOS: Fixed glitchy window dragging during audio playback. * Fixed timestamps of cached pages. ## 0.5 * Added MP3 support in the audio player (using mpg123). * Added volume control in the audio player. * Metadata in Vorbis and MP3 audio content (title, artist, etc.) is shown in the audio player menu. * Added new serif fonts: EB Garamond and Literata. * Allow configuring separate fonts for headings and body text for better visual distinction. * Preferences dialog remembers the previously open tab. * Paste from clipboard on middle mouse button click. * Open links in new tab with middle mouse button. * Fixed failure to find resources when launching via PATH. * Fixed color saturation setting not affecting the default color theme. => https://mpg123.org/ mpg123: MPEG audio player and decoder library ## 0.4.1 * Set keyboard focus to URL input field after opening a new tab. * Pause other audio players when a new one is started. One can still choose to have multiple audio players playing simultaneously by unpausing them again. * Fixed dismissing an audio player that is still downloading content. The partially downloaded data is discarded. * Fixed saving pages whose name starts with a tilde. * Fixed saving pages restored from cache. * Windows: The app is now distributed as an installer created with Inno Setup. * Windows: All binaries are signed. ## 0.4 * Added audio playback with support for streaming. Supported audio formats in this release are WAV (PCM, mono/stereo, 8/16/24/32 integer/float) and Ogg Vorbis. Shoutout to Sean Barrett et al. for stb_vorbis. * Added inline audio player that works like inline images. Clicking on an audio link opens the audio player below the link (works for URLs that have file extension .wav/.ogg). * Visual fine-tuning: increased Fira Sans line spacing; list bullets use an accent color; adjusted accent colors in the light mode palette. * Sidebar has a maximum width — the document must remain visible. * Windows: Support for HiDPI displays and the system UI scaling factor. The UI will be scaled according to your settings automatically without having to adjust the UI scaling in Preferences. * macOS: Use OpenGL on 10.13 for potentially better compatibility. * Fixed a memory leak when closing tabs. * Fixed unnecessary continual window redrawing related to the scrollbar hover outline. => https://github.com/nothings/stb stb: single-file public domain libraries for C/C++ ## 0.3 * Added style customization. * Added new font option: Fira Sans. * Added a setting for maximum line width. * Added a setting for adjusting color saturation. * Added an option for "Outline on scrollbar": page outline appears when mouse is hovering over the scrollbar. * Added an option for site icon and current top heading that appear when the window is wide enough. * Added tabs in Preferences for better grouping. * Added "Open Link in Background Tab" in link context menus. * More flexible text selection behavior when starting on empty space. * Smaller first paragraph font size. * Fixed centering of popups so they remain centered when window is resized. * Fixed sizing and alignment of Unicode symbols in preformatted text. * Fixed sizing of Japanese glyphs in UI text (e.g., tab titles). ## 0.2.1 * Fixed window size/state restoration issues, e.g., after window is maximized. * Windows: Fixed text disappearing when window is resized. ## 0.2 * Added an icon for quote paragraphs. * Added Downloads folder to Preferences. * Added "Save to Downloads" menu item (${CTRL+}S) for saving page contents. * Added a download progress indicator in the URL input field. * Added a progress indicator for inline image fetching. * Added `--sw` option to force software rendering. * Added macOS touch bar buttons for Back, Forward, Find, New Tab, and sidebar modes. * Home button opens a random bookmark with the "homepage" tag. * Improved context menu when right-clicking on links or the page. * Recognize and handle "mailto:" links. * Fixed behavior of images on single-image pages; cannot be hidden like inline images. * Fall back to software rendering automatically if accelerated graphics are not available. * Minor bug fixes. ## 0.1.1 * Fixed a potential crash at startup. * Fixed bug where user's query input is handled by all tabs. * Default sidebar mode is Bookmarks. * Windows: Fixed opening HTTP links in the default web browser. ## 0.1 * The major version zero is reserved for non-feature-complete releases. * Beautiful typography using Unicode fonts. * 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. * Identity management — create and use TLS client certificates. * Light and dark UI themes. * Select and copy text with the mouse. * Find text on the page. * Open image links inline on the same page. * Open links via keyboard shortcuts. * Instant back/forward navigation. * Smooth scrolling. * Scaling page content (50%...200%). * Scaling factor for the UI (for arbitrary monitor DPI). * Persistent app state — tabs and history are restored on next run.