0.4.2
For live updates on Fresh, follow me on X.
Most options below can be changed in the Settings UI — run Open Settings from the command palette (
Ctrl+P). Hand-editing config files is rarely necessary.
Features
- Indentation guides — optional vertical guides for leading whitespace (off, all levels, or just the active block), with a customizable glyph and theme color. Enable and tune them in Settings (#2388, by @maupin).
- Persistable, editable macros — recorded macros can now leave the in-memory register: Macro: Save to init.ts writes an editable block, and Macro: Promote to command turns a macro into a real command you can extend with code (#2487).
- JSONC config files — config files now accept comments and trailing commas, a stray syntax slip no longer silently resets you to defaults, and saves never clobber an unparseable file (the error is surfaced instead) (#2497).
- Per-buffer view toggles — Toggle Line Numbers (Current Buffer) and Toggle Line Wrap (Current Buffer) scope to the active buffer and persist across restarts.
- LSP Go to Implementation (
textDocument/implementation) (#2384, by @Crocmagnon).
Improvements
- Open Terminal to the Right / Below — open a new terminal in a fresh split beside or below the active pane.
- File Open: reveal hidden files when the filter starts with
.(#2407, requested by @dragonfyre13). - Vim compatibility options for vi mode — extra compatibility motions and word search (#2398, by @NihilDigit).
- Read-only
[RO]indicator now actually renders in the status bar, and is clickable (#2309). - Terminal mode hides the unused scrollbar and reclaims its column for the live grid.
- Copy strips ANSI escape codes, so text yanked from terminal output pastes clean (#2408).
- Settings UI: smoother mouse interaction and clearer dirty-state markers (#2395, by @NihilDigit).
- Remote workspaces (SSH / Kubernetes):
- A dropped connection offers Reconnect from the status indicator, and reconnecting respawns the workspace's embedded terminals (#2413, #2482).
- Remote sessions stay in the Orchestrator dock across restarts, and reconnect failures surface on the status line (#2412).
- Agents (e.g.
claude) launched in a remote workspace now run on the remote host / in the pod, not silently on the local machine (#2409).
Bug Fixes
- Regex search:
^/$now anchor per line in multi-lineCtrl+Fsearch (#2495). - Splits: closing a buffer shown in two splits no longer desyncs the surviving cursor (#2496).
- Terminal: a terminal restores its live/scrollback mode on refocus, and the last split is no longer left read-only after closing a second terminal (#2485).
- Per-language indentation rules are now actually applied — previously custom patterns were ignored (#2314).
- Brackets are no longer highlighted inside comments and strings (#2405, reported by @TakemiSora).
- Quick-open
#buffer switcher now lists virtual buffers (#2373). - Review Diff: line-level visual stage/unstage/discard (
vthens/u/d) works, and discard shows a localized message (#2317, #2420). - Project search & replace: plugin edits no longer leave phantom match highlights (#2414, reported by @mandolyte).
- Keybindings: switching keybinding maps no longer hides plugin bindings until restart (#2307);
Shift+letter bindings match even when the terminal omits theSHIFTmodifier (#1899, reported by @RandomGHUser). - Git Blame lands on the user's current source line, including files with multi-byte characters (#1957).
- Mark mode: movement commands (bracket jump, Home) extend the selection instead of dropping it (#2489).
- File explorer: a deliberately-closed explorer no longer reopens on relaunch (#2476); configured ignore patterns are applied to the tree (#2404, by @sfjohansson).
- Switch Project re-roots the active window in place instead of restarting the editor (#2472).
- New Workspace (Local) seeds its path from a local root even when the active window is remote (#2480).
- Markdown compose: table cells are measured by display width (fixing emoji-row border flicker), and table borders clear when compose mode is disabled (#2475, #2478, thanks @Agrejus).
- Terminal scrollback: ANSI colors survive soft-wrapped rows (#2449); the backing file stays local in remote mode, fixing a hang when toggling scrollback over SSH (#2424).
- Shebang language detection now covers interpreters with no first-line regex (Fish, Lua, PowerShell, Tcl, Elixir, R, Julia, …), handling
envindirection and versioned names; an existing extension match still wins (#2357, reported by @shemgp). - The asm-lsp "no
.asm-lsp.toml" offer is scoped to its triggering buffer instead of floating over every buffer. - The tab bar's "+" popup and tab context menu grab the keyboard while open, so keys no longer leak into the buffer underneath.
Internals
- Plugin API: core unicode display-width is exposed to plugins (
charWidth/stringWidth) (#2401, by @Agrejus), and conceal ranges can be cleared by namespace (#2399, by @Agrejus). - A large refactor decomposed many oversized functions across rendering, settings, the plugin runtime, and terminals, and reworked the UI rendering pipeline.
fresh-guinow uses the publishedratatui-wgpufrom crates.io, making it publishable (#2488).- Docs: dropped remaining "experimental" disclaimers, added the 0.4.0 "What's New" blog post, and documented the SSH "jump box" pattern (#2377, by @Monear).