0.4.9
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).
Features
- Installing and updating Fresh - the preferred install method for Linux is now a single self-contained, self-updating, statically linked (musl) binary - one install that works everywhere, instead of a dozen fragile packaging channels.
- LSP completions can offer auto-imports - servers like rust-analyzer now suggest unimported symbols, and accepting one inserts the
use/import line (#2603). - The scripting API can manage the whole Orchestrator dock - create, rename, move, archive, delete and list workspaces, including over SSH, not just create them.
- A new workspace opens the moment you ask for it - a progress page shows while
git worktree addstill runs, the workspace can be renamed, moved or deleted mid-build, and the build finishing no longer steals focus. The dock also got tidier: compact by default, uniform full-width menu rows. - The mouse wheel pans the tab strip - tabs scroll into view under the pointer without changing the active tab.
fresh +50 file.txtopens the file at that line, vim-style (#1926, requested by @asukaminato0721).F3/Shift+F3step through search matches without closing the search bar first (#2111).- Choose which files are too ephemeral to remember - a configurable pattern list keeps cursor positions from being saved for build output, generated sources and the like; git's own scratch files are excluded by default.
- Bulgarian locale (by @ci4ic4).
- Unparseable keybinding config entries are now logged instead of silently dropped (#1128, reported by @michelpado).
Bug Fixes
Ctrl+/(toggle-comment) works on every terminal, not just kitty - including non-US layouts where/needs Shift (#2933).- Hover popups no longer render on top of modal dialogs (#2912, reported by @maxco1d).
- Long text in the search/open-file/palette input scrolls so the cursor stays visible (#2876, reported by @asukaminato0721).
- Vi dot-repeat (
.) aftero/O/a/Ano longer corrupts the buffer (#2443). - Mouse wheel scrolls the view, not the selection
- Settings search results - hover and clicks also land on the row under the pointer once the list is scrolled (#2860, #1112, reported by @asukaminato0721).
- Prompt dropdowns (command palette, Select Locale, …), which also gained a scrollbar when they overflow (#623, #1593, reported by @asukaminato0721 and @Kodiak-01).
- A wheel over the menu, tab or status bar no longer scrolls the focused pane - chrome wheel events used to land on whatever had focus, dropping a focused terminal into scrollback (#2969).
- Plugin dock panels get their geometry right - opening one (like a code tour) now resizes terminals above it so shell output doesn't vanish off-screen, panels reflow when the file explorer toggles instead of spilling at their old width, and dock hover/selection highlights span the whole row (#2969).
- A code tour opens every step into the same pane - stepping through one while clicking between splits used to scatter its files across all of them (#2969).
- Auto-indent
- Typing
else:,except:or a custom dedent keyword re-indents the line on the spot, like}always did (#2582). - Braceless
if/for/whilebodies indent correctly in TypeScript/JavaScript (#2492). - Enter on a blank line between an indented block and an unindented line below no longer inherits the deeper indent (a #1425 corner case).
- Typing
- Format-on-save keeps the cursor on the text it was on - a formatter deleting lines above no longer drops it into an unrelated word (#2777, #2706, reported by @720720).
- Workspaces
- Workspaces made with Extract Tab to New Workspace survive a restart, and
--no-restoretruly writes no session state (#2735). - The Search & Replace panel and dock terminals open as a split again after the last editor split is closed - a stale dock tag used to stick, even across restarts (#2415, reported by @mandolyte).
- Git's
COMMIT_EDITMSG/MERGE_MSG/etc. no longer restore a stale cursor position into freshly regenerated content (#2761, reported by @skostojohn).
- Workspaces made with Extract Tab to New Workspace survive a restart, and
- Keybindings
- Context-specific bindings outrank global ones, so a global chord can no longer shadow one; disabling menu-bar mnemonics genuinely frees the Alt+letter keys (#2941, reported by @chrismo).
- Legacy (non-kitty) terminals resolve
Alt+]/Alt+[correctly again (#2930, reported by @FreekyFrank).
- Malformed
ssh://URLs fail loudly instead of silently opening a same-named local file (#2221). - Review Diff: stage/unstage/discard confirmations no longer vanish - they used to be overwritten within the same frame by the status refresh they triggered.
- The bundled help manual no longer shows literal
<0D>characters on Windows (by @ci4ic4). - Four small fixes:
bun.lockhighlights as JSONC (#2921); generated tsconfigs usemoduleResolution: bundlerfor TypeScript 7 (#2872); docs no longer claim Ctrl+H opens Find & Replace (#2109); the Rust LSP mode-switching doc references the real palette command name.
Internals
- Input handling split into a pure decision core plus an imperative shell, GitHub Actions workflows now lint in CI, and a round of flaky-e2e-test stabilization across the settings, vi-mode, LSP, review-diff and orchestrator-scripting suites.