Pictures, files and Vim keys in the terminal
The terminal client can link a device, restore from a recovery kit, show pictures and send or save files. A plain line mode works with screen readers, and Vim keys are optional.
Pictures in supported terminals
The terminal client displays pictures using the terminal’s supported image protocol, with block-based or file-card fallbacks. Capabilities and tmux limit which display method is available.
Send, save and open files from the terminal
The terminal supports /attach and asks before turning pasted file paths into attachments. Received files can be saved or opened locally; opening is refused over SSH before decrypting the file for that action.
Set up, link and recover in the terminal
Terminal setup can link a device with a QR code and restore from a recovery kit. Showing or copying a kit is an explicit action because a terminal can retain what it displays, while typed recovery secrets stay hidden.
Also new
- Whole, readable QR codes. Kit and device-link QR codes use a dedicated terminal view so they are shown whole or accompanied by a request to resize. Mac inline QR codes continue to use their normal view.
- Optional Vim-style keys. The terminal has a Vim keymap with normal, insert and visual modes, familiar motions and editing operators, and a command line. The keys sheet and status line show the current mode and available actions.
- An emoji picker in the terminal. The shared emoji picker renders as a searchable terminal grid. The composer’s Emoji button also waits for the field to regain focus, fixing “Choose a text field first” failures with the portable picker.
- A plain line mode for screen readers. The terminal can present conversations and prompts as ordinary lines, without screen-control sequences or colour. It supports messaging, commands, files and audio-call actions, with protected input for sensitive fields.
- Read or send from a single terminal command. Single commands can send a message, show recent messages or list unread conversations. Reads can briefly borrow a profile already in use; sending is refused while another client owns that profile, with a clear explanation that nothing was sent.
- Install the terminal command from the app. Install Terminal Command makes the terminal executable available from the command search path, reducing manual setup.
- Terminal notifications and useful status text. Supported terminals receive notifications under the same privacy and pause rules as the app, with a bell fallback where needed. Hover descriptions appear in the status line, and the terminal title shows Lowfire’s unread count.
- Switch organisations in the terminal. The terminal can switch organisations at every width and remember the conversation last open in each. Opening a conversation from another organisation also updates the list to match.
- Search with Jump to in the terminal. The terminal’s header search opens Jump to, covering conversations, locally stored messages and commands. Choosing a message result opens its conversation.
Fixed
- Copy Link works in the terminal. Copy Link in a message menu now uses the terminal’s clipboard support and checks the link against the same opening rules.
- Correct Arabic and Hebrew in GNOME Console. The client detects GNOME Console’s automatic text reordering and avoids reordering text twice, restoring the terminal mode on exit. A documented limitation remains when that terminal is behind tmux.
- Fit chat panels into terminal cells. Setup, sheets, day separators, call controls and other first-party views are adapted to whole terminal cells and narrow sizes. Right-to-left text, selection and caret placement share the same visual ordering.
- Reliable terminal mouse actions and message tools. Mouse clicks open conversations and message tools, and scrolling affects the region under the pointer. Reaction picking no longer immediately loses focus, and message tools and file-card buttons fit their rows.
- Draw large terminal windows completely. Large terminal sizes draw the full screen instead of leaving part of it missing.
- A visible caret in single-line terminal fields. Single-line fields show a reversed-cell caret at the editing position, making it clear where typing or dropping text will go.
- Safer Vim commands and failed edits. An editing operator accepts motions rather than accidentally quitting or switching panels. The client handles a failed cursor reload after putting text, wipes command-line text and shows only shortcuts a terminal can type.
- Arrow through the list without losing the keyboard. When the conversation list stays visible, arrow keys step through it without the composer stealing focus; Return or a click moves into the conversation. Compact layouts transfer focus when opening the conversation replaces the list.
- Old drafts no longer grab the keyboard. Returning to an older draft no longer replays an earlier request for keyboard focus. This keeps conversation-list navigation working after sends, pastes and draft changes.
- Sign in to a proxy with Mac Keychain credentials. Chat and call relay connections can request matching proxy credentials from the Mac Keychain when the proxy requires them. Refusals pause the affected connection and offer Try Proxy Sign-In Again instead of repeatedly prompting or bypassing the proxy.
- Let the first Mac video frame settle. Mac video startup waits for the initial native encoder frame before applying later property changes, improving first-frame handling and safe encoder cleanup.
Under the hood 7 changes · tests, tools and the server
- Keep recovery QR data only while needed. Settings does not keep a copy of the recovery kit’s QR code after drawing it, so sensitive display data isn’t held longer than needed.
- Consistent scheduling and batching of wakes. The server schedules its next gateway alarm from one clock reading and groups wakes from the same collection window into one relay request.
- Reliable interface reset and screenshots. Automated reset no longer leaves a narrow window’s sidebar over the conversation. Screenshot capture also fixes a crash found by the interface test.
- Avoid extra Mac graphics copies. Partial atlas updates and graphics readback avoid unnecessary copy passes on Apple GPUs.
- Test the terminal client in real terminals. End-to-end terminal suites cover setup, chat, calls and files, and real-terminal checks cover several terminals, themes and sizes. The command audit lists the app capabilities the terminal still lacks, including spelling and other app-only behaviour.
- Keep local test servers and packages isolated. Tests do not reinstall server packages while a local server is running, and they verify that their own servers stop and release package holds after cleanup. Restore tests also wait for their directory and use platform key cleanup; outage timing gains diagnostics without changing pass rules.
- Explicit ownership for shared shell state. Shared shell state moves behind its owners, removing an internal dependency exception and keeping the app and terminal interfaces on the same boundary.