Bergamot WASM offline translation replaces Argos Translate and LibreTranslate. Packs are user-imported from local files and served same-origin. The app never downloads packs.
Conversation, Relay chat and the standalone Translator page use the local translation layer with quiet, opt-in message actions, original/translation toggles, remembered target languages and per-message/session caching.
Translation pack manager validates imported archives, rejects path traversal, and stores multiple packs under application storage.
Relay chat messages can be translated from the message context menu. Translated text is shown inline with a toggle.
Backend Landlock test probes cover translation-pack read/write under storage and the old Argos Translate CLI root has been removed.
Built-in geo-wasm converts WGS84, UTM, MGRS and Plus Code locally, so the map works offline without a network round trip.
The bundled starter_world.mbtiles is now a 30-degree world graticule covering z0-z4 instead of a solid placeholder, so the map is usable offline immediately.
Delivery failure tips throttle per peer, order by severity, cap the detail count and deduplicate diagnostic fetches so they do not get noisy.
DatabaseProvider closes idle live-thread SQLite handles after 120 seconds and dead-thread handles, preventing unbounded file-descriptor growth in containers.
Opt-in image support for Mesh Server and Micron pages. The parser recognizes img=1 image links and /media/ URLs, renders placeholders with alt text and size metadata, and loads the image only after an explicit click or when the policy is set to auto or always.
Page nodes serve /media/ images in webp, png, jpg, jpeg, bmp, gif and tiff, converting non-webp formats to webp and caching the result. /file/ stays webp-only, matching NomadNet 1.4.2.
Nomad page images download over the Reticulum page socket, report progress, reassemble chunked transfers and are cached per node and page path.
Page nodes grant file access only after a page request, so direct links to hosted files fail without first visiting the page.
Image loading on Micron pages is controlled by a global policy in Settings: never, manual, auto or always.
New tests cover the database file-descriptor oracle, delivery help tips, message cancel-send, raw message view, map bounds/provider handling and Micron image parsing.
Micron page output now exposes ARIA landmarks and semantic heading levels for screen readers. Rendered pages are wrapped in a main landmark, section headings receive heading role and level, links and inputs get focus and label hints, and the crash tab iframe document is marked as a document, receives the page path as its title, and advertises the current application locale.
New frontend tests cover the Micron accessibility attributes, crash tab iframe title, and crash tab document title.
The app shell now exposes a header landmark, a main content landmark, and a skip link so screen-reader and keyboard users can jump to the page body.
Primary side navigation is wrapped in a nav landmark, and each link receives an accessible name and aria-current when active.
AppModal now traps focus and restores it on close, and toast and loading states are announced with live regions.
The command palette is exposed as a dialog with role, aria-modal, and a combobox/listbox pattern for screen-reader users, and the Ctrl/Cmd+K shortcut is now routed through the configurable KeyboardShortcuts system.
The default keyboard shortcuts for opening the palette and toggling the sidebar are discoverable in the command palette, and navigation shortcuts are suppressed while a modal is open.
New frontend tests cover the command palette ARIA, command palette toggle-sidebar action, keyboard shortcut modal guard, and AppModal focusable-element discovery.
Settings sidebar gains a Simple and Advanced mode toggle. Simple mode hides technical sections (interfaces, transport, plugins and friends) while Advanced shows everything. Search always finds advanced settings.
The map restores proper tile attribution with a collapsible chip for OpenStreetMap, CARTO and OpenFreeMap sources, and the zoom control and scale line are themed to match the app.
Map tabs on wide screens gain a right-click context menu with rename, new tab, close, close others, close tabs to the right and close all.
The discovered-nodes toolbar button shows a spinner while nodes are being fetched.
Fixed pasting into nomad page input fields on Android. The WebView cannot show its own Paste menu for fields inside the rendered page frame, so long-press now opens an app Paste action that reads the system clipboard and inserts the text at the cursor.
Long-press on nomad page content on Android now opens the page/tab context menu, matching desktop right-click.
Fixed map tab right-click menu rendering behind the map toolbar: context menus now sit above page chrome.
The map scale now sits in a row with the credits chip at bottom-right, and map overlays are capped and stacked so toolbars, search, and info cards no longer overlap each other on narrow screens.
Relay chat gains a global Search tab that scans message history across every connected hub and room. Queries support quoted phrases, OR groups, NOT/-exclusion, field filters (from:, room:, hub:, kind:, date:) and fuzzy matching with result ranking. Results jump straight to the room.
Chat text now auto-links geographic references: Maidenhead grid locators (6+ characters, or any locator after a geo:/grid: prefix), lat/lon pairs, and other coordinate formats resolve locally and open the map with a marker.
Archives can be exported in bulk: an Export all (.zip) action below the search box downloads a zip bundle of the filtered set with a manifest, and each archive card gains an Export action that downloads the snapshot as a .mu file.
Relay chat member lists show avatar initials with presence dots, sticky online/offline headers, and a mention hint on hover. Right-clicking a member copies their identity hash.
Relay chat room headers now show the hub MOTD inline next to the room and hub name instead of a separate banner row.
Discovered interfaces fetch faster: the endpoint runs its filesystem scan and interface stats collection off the event loop and caches results briefly, and the map builds marker features in chunks so large sets stay responsive.
Tools page search icon no longer overlaps the placeholder text, and tool groups are now collapsible with count badges and persisted state.
The About page sandbox section shows the kernel Landlock ABI version when available.
The network visualiser adapts its batch size to measured apply time and pauses physics during silent refreshes when the frame rate is low, avoiding the 1-2 fps freeze on large graphs.
The messages split-view drop strip now only appears while dragging a conversation, freeing the space it occupied at rest. A conversation can also be opened in split view from its right-click menu.
Relay chat member rows gain a hover/tap direct-message action that lazily derives the member's LXMF address from their identity, waits for a path, then opens the conversation.
RRC hub hosts get anti-spam protections: per-peer session caps, a total session cap, and a rate limit on join/part/control traffic, plus a new Status tab in hub moderation showing relayed-message counts, drop counters, and a recent-events log.
All search inputs across the app now share a SearchInput component with consistent icon, clear button, loading spinner, and escape-to-clear. The icon-over-placeholder bug class is gone.
Offline mode with no basemap now shows a friendly in-map card with restore starter tiles, upload MBTiles and switch-to-online actions instead of a blank placeholder map.
Settings search tolerates typos: when strict matching finds nothing, queries like "mesages" still surface the messages settings.
Hosted relay hubs answer /history [room] [n] by replaying recent room messages to the requester only. Membership in the room is required, the count clamps to 50, and each request is logged in the host status events.
Relay chat gains a Bots tab for running LXMFy bots that join hubs as normal clients. Pick a hub and room list, set a nickname, mention-only mode, command prefix and reply cooldown, and the bot answers commands like uptime, ping, help and status in the rooms it joins.
The Bots page gains a custom command template with user-defined canned replies and a welcome message, a per-bot icon picker, and an expanded per-bot LXMF options form covering announce, signature verification, permissions, rate limits and admin hashes.
New tests cover the history command privacy and edge cases, RRC bot reply logic and validation, bot option normalizers, and restore hardening.