- Rust 89.8%
- Python 8.2%
- Shell 0.8%
- Nix 0.7%
- WGSL 0.2%
- Other 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
fuzz / cargo fuzz nightly long-run (push) Has been skipped
darwin / detect relevant changes (push) Successful in 13s
darwin / darwin docs-only no-op (push) Has been skipped
windows / detect relevant changes (push) Successful in 40s
windows / windows docs-only no-op (push) Has been skipped
darwin / build felis (aarch64-darwin) (push) Successful in 1m19s
fuzz / cargo fuzz smoke (per target) (push) Successful in 1m8s
windows / cargo clippy (Windows cross) (push) Successful in 15s
windows / cargo nextest (Windows) (push) Successful in 11m15s
windows / frontend smoke (Windows) (push) Successful in 2m32s
windows / package felis (x86_64-pc-windows-msvc) (push) Successful in 2m47s
pr / nix flake check (push) Has been cancelled
pr / cargo build / clippy / test / deny (push) Has been cancelled
pr / wire schema is compatible with the base (push) Has been cancelled
pr / frontend smoke (x86_64-linux) (push) Has been cancelled
The runners now advertise their Nix system (x86_64-linux, aarch64-darwin, x86_64-windows) instead of the ad hoc nix, macos and windows labels, so runs-on states the platform a job needs rather than a machine's nickname. The workflows, the comments that name a runner, and the docs that cite a runner by its label follow. Assisted-by: Claude Code Reviewed-on: #491 |
||
| .agents/skills | ||
| .cargo | ||
| .claude | ||
| .config | ||
| .forgejo | ||
| .github/workflows | ||
| crates | ||
| dev | ||
| docs | ||
| fuzz | ||
| nix | ||
| share | ||
| skills/felis | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| clippy.toml | ||
| CONTRIBUTING.md | ||
| deny.toml | ||
| flake.lock | ||
| flake.nix | ||
| justfile | ||
| LICENSE | ||
| README.md | ||
felis
A terminal for your toolkit. Not an environment.
felis is a fast, GPU-accelerated terminal that keeps your sessions alive and renders modern protocols with full fidelity, while leaving layout to your window manager and workflow to your tools.
What felis owns
- Sessions outlive windows. Close the window without killing the shell, a long build, or an agent. Reattach locally or over SSH with the grid and scrollback intact in the daemon. Sessions live in memory; you get process persistence without the double-emulation layer, protocol degradation, or keybind collisions of tmux.
- Modern protocol fidelity. A narrow scope does not mean reduced capabilities. felis implements modern protocols in full: Kitty graphics, Kitty text sizing, Kitty keyboard protocol, OSC 8 hyperlinks, OSC 133 prompt marks, East Asian width, and ligature font shaping. If a rich TUI runs in Kitty, it runs identically in felis.
- Engineered for throughput. Because felis declines tabs, splits, and an embedded scripting runtime, engineering focuses strictly on parser dispatch, damage tracking, and GPU rendering. Performance shows where that lands against Kitty, Alacritty, WezTerm, Ghostty, and foot on macOS and Linux.
- An interface for your tools. Automation belongs outside the terminal process. Typed CLI commands
(
felis sessions) and a public, versioned IPC let scripts, programs, and AI agents spawn sessions headlessly, inject input, and inspect screen state with--format jsonl.
The rest stays yours
Your window manager handles layout (tiling, tabs, workspaces). Your shell and tools handle workflow. felis provides the interfaces for those tools to interact with it, without moving their logic inside the terminal. There are no in-terminal tabs or splits, and no embedded scripting language.
Small utilities belong alongside the terminal: a session picker, a notification consumer, an editor integration. They can use the same public interfaces as your own scripts. The point is to let you choose and combine dedicated tools, not require an entire environment to use a terminal.
Read the vision for where felis draws the line, and the design values for why.
Performance
felis is measured against Kitty, Alacritty, WezTerm, Ghostty and foot with the in-tree cross-terminal harness
(just bench-vs). On an Apple M4 Max it has the best throughput of the field on every benchmark. On Linux it is faster
than Kitty, WezTerm and Ghostty on every throughput benchmark and splits them with Alacritty, Ghostty's tip build and
foot, while foot and Alacritty keep the lead on keystroke latency, startup, and memory.
Benchmarks summarizes the standing per suite and has every figure.
Quick start
With Nix and flakes enabled:
nix run github:felis-terminal/felis
A window opens on a fresh session, and the shell inside it keeps running once you close the window. Reattach with
felis attach.
The install guide covers the profile, Home Manager, standalone release archives (Linux, macOS, Windows), and from-source paths. Your first session walks the close-and-reattach loop, and tmux workflows without tmux maps everyday tmux patterns to felis.
Working with your tools
felis --host user@remote puts a local window on a remote daemon that keeps its sessions across disconnects
(attach over SSH). Session verbs speak JSON (--format json or jsonl) and
felis bridge keeps a connection open for a longer-lived integration
(driving a session without a window, CLI reference,
IPC protocol). One TOML file controls fonts, colors, keybindings, and window appearance
(configuration, keybindings).
Status and compatibility
felis is at 0.1.0, an early release distributed as a Nix flake and as an archive attached to the release for each supported target. The CLI and IPC are versioned, but expect edges.
Three targets are supported: x86_64-linux and aarch64-darwin are published to the project's binary cache and also
ship as tarballs that run on a host without Nix, and x86_64-pc-windows-msvc ships as a zip. aarch64-linux is
committed and builds from source, but carries no claim. See the
platform matrix for details and the
protocol support matrix for terminal compatibility.
Open work is tracked in Forgejo issues and mirrored on GitHub.
Documentation and development
The manual and its full index live in docs/.
To understand the design, read the vision, values, and testable principles, in that order. For architecture and comparisons with other terminals, follow the explanation index.
felis is written in Rust with wgpu and winit. The Nix flake owns the development toolchain:
nix develop
cargo build
See CONTRIBUTING.md for the development workflow and verification gates, or the install guide to build and run from source.
License
Apache-2.0. See LICENSE.
One file is excepted: tools/bench/doom-fire-bench.patch is GPL-3.0-or-later, since a patch carries the upstream lines
it modifies and DOOM-fire-zig is GPLv3. It is applied to that project's source at build time by the benchmark dev shell
and reaches no felis binary.