No description
  • Rust 89.4%
  • TypeScript 8.1%
  • JavaScript 0.9%
  • CSS 0.4%
  • Python 0.4%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Claude b09b1ed84f fix(test): observe Open-dialog scope via the Project control, not the removed title suffix
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
2026-07-20 22:08:14 +03:00
.config Increase nextest timeout and reduce E2E proptest cases to avoid CI timeouts 2026-03-25 18:04:45 +02:00
.github feat(web): fold the web UI into the main binary behind a web feature 2026-07-12 22:37:54 +03:00
crates fix(test): observe Open-dialog scope via the Project control, not the removed title suffix 2026-07-20 22:08:14 +03:00
debian Bump version to 0.4.4 2026-07-17 00:48:17 +03:00
docs fix(webui): gate the HTTP POST routes with the same-origin guard instead of removing them 2026-07-20 19:40:46 +03:00
homepage homepage: align terminology with daemon/workspace scheme 2026-06-18 12:44:32 +03:00
scripts docs(blog): wave screensaver showcase (high frame rate) 2026-06-18 21:28:08 +03:00
web-ui Add native modal-frame (title + close button) chrome for floating widget panels 2026-07-20 22:08:14 +03:00
.envrc Add Nix flakes support for reproducible builds and development 2025-12-12 11:08:19 +02:00
.fresh-tour.json feat(plugins): implement Code Tour plugin 2026-02-03 09:45:43 +02:00
.gitignore test(themes): before/after screenshot diff gallery for theme PRs 2026-06-18 00:05:57 +03:00
bun.lock Add RSS feed for the blog 2026-05-31 23:30:52 +03:00
Cargo.lock Bump version to 0.4.4 2026-07-17 00:48:17 +03:00
Cargo.toml Bump version to 0.4.4 2026-07-17 00:48:17 +03:00
CHANGELOG.md fix(orchestrator): make full dock row clickable in compact list view 2026-07-20 18:07:38 +03:00
CONTRIBUTING.md docs(contributing): add 7 guidelines distilled from 3 months of history 2026-06-30 18:49:10 +03:00
default.nix feat: add compatibility with nix-shell and nix-build 2026-01-27 07:57:28 +02:00
dist-workspace.toml Add Windows ARM64 release build support 2026-06-15 12:04:13 +03:00
eval-diagnostics-panel.md Add diagnostics panel usability evaluation (nngroup heuristic analysis) 2026-03-29 11:26:39 +03:00
flake.lock feat: add compatibility with nix-shell and nix-build 2026-01-27 07:57:28 +02:00
flake.nix packaging: drop on-disk plugin/theme shipping and fix lintian errors 2026-05-31 23:58:36 +03:00
fresh-vs-hunk-review-gaps.md Add Fresh Review Diff vs hunk comparison and review-UX gap list 2026-06-08 23:33:15 +03:00
hunk-diff-viewer-report.md Add exploration report for the hunk terminal diff viewer 2026-06-08 23:33:15 +03:00
LICENSE docs: Add GPL-2.0 license file 2025-11-19 01:24:59 +02:00
orchestrator-dock-seamless-tab-regression.md fix(orchestrator): restore the active card's seamless tab into the editor 2026-07-16 23:36:14 +03:00
package-lock.json chore: add package-lock.json 2026-05-26 00:17:04 +03:00
package.json Add RSS feed for the blog 2026-05-31 23:30:52 +03:00
README.md chore: remove stray test marker from README 2026-06-08 23:33:15 +03:00
rust-toolchain.toml Update to rust 1.95 in rust-toolchain.toml 2026-04-29 18:18:19 +03:00
shell.nix feat: add compatibility with nix-shell and nix-build 2026-01-27 07:57:28 +02:00
web-ui-rendering-eval.md docs: add web UI rendering evaluation report 2026-07-06 18:55:47 +03:00

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 Demo

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.

Command Palette

Multi-Cursor Editing

Select and edit multiple occurrences simultaneously — the same workflow you know from graphical editors.

Multi-Cursor

Themes & Customization

Browse and apply color themes instantly. Full settings UI and interactive keybinding editor included.

Select Theme

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

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).