- Rust 89.4%
- TypeScript 8.1%
- JavaScript 0.9%
- CSS 0.4%
- Python 0.4%
- Other 0.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The New-Session/Open picker migration to the native modal frame dropped the
in-body title's scope suffix ("… — all projects" / "… — <project>"),
since the dialog title is now native chrome and the scope already reads off
the "Project:" control ("All ▾" vs the current project's basename). But
`open_dialog_defaults_to_all_projects_then_scopes_to_current` keyed its
`wait_until`s off that removed suffix, so it hung for the full 180s nextest
timeout on every OS runner (all other tests passed).
Point the waits at the "Project:" control's "All ▾" marker instead — the same
scope indicator the test already asserts on, and (via its ▾ glyph) unambiguous
against the footer's bare "all projects" toggle-target hint. The native title
is a mount-only param that `update()` doesn't refresh, so it can't carry the
per-scope suffix anyway; the control is now the single source of scope.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MxCyqQVEJDpoEZNKysUHEt
|
||
| .config | ||
| .github | ||
| crates | ||
| debian | ||
| docs | ||
| homepage | ||
| scripts | ||
| web-ui | ||
| .envrc | ||
| .fresh-tour.json | ||
| .gitignore | ||
| bun.lock | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| default.nix | ||
| dist-workspace.toml | ||
| eval-diagnostics-panel.md | ||
| flake.lock | ||
| flake.nix | ||
| fresh-vs-hunk-review-gaps.md | ||
| hunk-diff-viewer-report.md | ||
| LICENSE | ||
| orchestrator-dock-seamless-tab-regression.md | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| rust-toolchain.toml | ||
| shell.nix | ||
| web-ui-rendering-eval.md | ||
Fresh
A modern, full-featured terminal text editor, with zero configuration. Familiar keybindings, mouse support, and IDE-level features — no learning curve required.
Official Website · Documentation · Discord · Contributing
Quick Install: curl https://raw.githubusercontent.com/sinelaw/fresh/refs/heads/master/scripts/install.sh | sh
Fresh brings the intuitive UX of VS Code and Sublime Text to the terminal. Standard keybindings, full mouse support, menus, and a command palette — everything works the way you'd expect, right out of the box. No modes, no memorizing shortcuts.
Built for real-world performance: Fresh handles multi-gigabyte files with negligible memory overhead and delivers consistently low-latency input, regardless of file size.
Command Palette & Fuzzy Finder
One shortcut to find files, run commands, switch buffers, and jump to any line.
Multi-Cursor Editing
Select and edit multiple occurrences simultaneously — the same workflow you know from graphical editors.
Themes & Customization
Browse and apply color themes instantly. Full settings UI and interactive keybinding editor included.
See more feature demos: Editing (search & replace, block selection, sort lines, ...) · Productivity (file explorer, split view, integrated terminal, ...) · Themes
Feature Overview
| Category | Features |
|---|---|
| File Management | open/save/new/close, file explorer, tabs, auto-revert, git file finder |
| Editing | undo/redo, multi-cursor, block selection, smart indent, comments, clipboard |
| Search & Replace | incremental search, find in selection, query replace, git grep |
| Navigation | go to line/bracket, word movement, position history, bookmarks, error navigation |
| Views & Layout | split panes, line numbers, line wrap, backgrounds, markdown preview |
| Language Server (LSP) | go to definition, references, hover, code actions, rename, diagnostics, autocompletion |
| Productivity | command palette, menu bar, keyboard macros, git log, diagnostics panel |
| Extensibility | TypeScript plugins (sandboxed QuickJS), color highlighter, TODO highlighter, merge conflicts, path complete, keymaps |
| Internationalization | Multiple language support (see locales/), plugin translation system |
Installation
Quick install (autodetect best method):
curl https://raw.githubusercontent.com/sinelaw/fresh/refs/heads/master/scripts/install.sh | sh
Or, pick your preferred method:
| Platform | Method |
|---|---|
| macOS | brew |
| Bazzite/Bluefin/Aurora Linux | brew |
| Windows | winget |
| Arch Linux | AUR |
| Debian/Ubuntu | .deb |
| Fedora/RHEL | .rpm, Terra |
| OpenSUSE | zypper, .rpm |
| FreeBSD | ports / pkg |
| Gentoo | GURU |
| Linux (any distro) | AppImage, Flatpak |
| All platforms | Pre-built binaries |
| npm | npm / npx |
| Rust users (Fast) | cargo-binstall |
| Rust users | crates.io |
| Nix | Nix flakes |
| Developers | From source |
Brew
On macOS and some linux distros (Bazzite/Bluefin/Aurora):
Note: On macOS, see macOS Terminal Tips for recommended terminal configuration.
brew install fresh-editor
Windows (winget)
winget install fresh-editor
Alternatively, Windows users can use npm.
Arch Linux (AUR)
Binary package (recommended, faster install):
git clone https://aur.archlinux.org/fresh-editor-bin.git
cd fresh-editor-bin
makepkg --syncdeps --install
Build from source:
git clone https://aur.archlinux.org/fresh-editor.git
cd fresh-editor
makepkg --syncdeps --install
Using an AUR helper (such as yay or paru):
# Binary package (recommended, faster install)
yay -S fresh-editor-bin
# Or build from source
yay -S fresh-editor
Debian/Ubuntu (.deb)
Download and install the latest release:
curl -sL $(curl -s https://api.github.com/repos/sinelaw/fresh/releases/latest | grep "browser_download_url.*_$(dpkg --print-architecture)\.deb" | cut -d '"' -f 4) -o fresh-editor.deb && sudo dpkg -i fresh-editor.deb
Or download the .deb file manually from the releases page.
Fedora/RHEL (.rpm)
Download and install the latest release:
curl -sL $(curl -s https://api.github.com/repos/sinelaw/fresh/releases/latest | grep "browser_download_url.*\.$(uname -m)\.rpm" | cut -d '"' -f 4) -o fresh-editor.rpm && sudo rpm -U fresh-editor.rpm
Or download the .rpm file manually from the releases page.
OpenSUSE (zypper)
zypper install fresh-editor
Gentoo (GURU)
Enable the repository as read in Project:GURU/Information for End Users then emerge the package:
emerge --ask app-editors/fresh
AppImage
Download the .AppImage file from the releases page and run:
chmod +x fresh-editor-VERSION-x86_64.AppImage
./fresh-editor-VERSION-x86_64.AppImage
For faster startup (recommended): Extract the AppImage instead of running it directly. This avoids the FUSE mount overhead on each launch (~10x faster):
./fresh-editor-VERSION-x86_64.AppImage --appimage-extract
mkdir -p ~/.local/share/fresh-editor ~/.local/bin
mv squashfs-root/* ~/.local/share/fresh-editor/
ln -sf ~/.local/share/fresh-editor/usr/bin/fresh ~/.local/bin/fresh
Ensure ~/.local/bin is in your PATH. Available for x86_64 and aarch64 architectures.
Flatpak
Download the .flatpak bundle from the releases page and install:
flatpak install --user fresh-editor-VERSION-x86_64.flatpak
flatpak run io.github.sinelaw.fresh
See flatpak/README.md for building from source.
Pre-built binaries
Download the latest release for your platform from the releases page.
Using mise
mise use github:sinelaw/fresh
npm
npm install -g @fresh-editor/fresh-editor
Or try it without installing:
npx @fresh-editor/fresh-editor
Using cargo-binstall
To install the binary directly without compiling (much faster than crates.io):
First, install cargo-binstall if you haven't already
cargo install cargo-binstall
Then install fresh
cargo binstall fresh-editor
Nix flakes
Run without installing:
nix run github:sinelaw/fresh
Or install to your profile:
nix profile add github:sinelaw/fresh
From crates.io
cargo install --locked fresh-editor
From source
git clone https://github.com/sinelaw/fresh.git
cd fresh
cargo build --release
./target/release/fresh [file]
Documentation
- User Guide
- macOS Tips - Terminal configuration, keyboard shortcuts, and troubleshooting for Mac users
- Plugin Development
Contributing
See CONTRIBUTING.md for guidelines.
Privacy
Fresh checks for new versions daily to notify you of available upgrades. Alongside this, it sends basic anonymous telemetry (version, OS/architecture, terminal type) to help understand usage patterns. No personal data or file contents are collected.
To disable both upgrade checks and telemetry, use --no-upgrade-check or set check_for_updates: false in your config.
License
Copyright (c) Noam Lewis
This project is licensed under the GNU General Public License v2.0 (GPL-2.0).



