MCPcopy Index your code
hub / github.com/Yus314/kasane

github.com/Yus314/kasane @v0.7.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.0 ↗ · + Follow
8,692 symbols 30,181 edges 515 files 1,987 documented · 23%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Kasane

Kakoune handles editing. Kasane rebuilds the rendering pipeline — terminal or GPU — and opens the full UI to extension: splits, image display, workspace persistence, and beyond. Extend it yourself with sandboxed WASM plugins — a complete one fits in 15 lines of Rust. Your kakrc works unchanged.

Kasane demo — fuzzy finder, pane splits, and color preview running as WASM plugins

GPU backend (--ui gui) — fuzzy finder, pane splits, and color preview are all WASM plugins

CI License: MIT OR Apache-2.0 Rust: 1.85+

Getting Started · What's Different · Plugin Development · Vision

What You Get

alias kak=kasane and these improvements apply automatically:

  • Flicker-free rendering — no more tearing on redraws
  • Multi-pane without tmux — native splits with per-pane status bars
  • Clipboard that just works — Wayland, X11, macOS, SSH — no xclip needed
  • Correct Unicode — CJK and emoji display correctly regardless of terminal

Add --ui gui for a GPU backend with system font rendering, smooth animations, and inline image display.

Existing Kakoune plugins (kak-lsp, …) work as before. See What's Different for the full list.

Quick Start

[!NOTE] Requires Kakoune v2026.04.12 or later. Binary packages skip the Rust toolchain requirement.

Arch Linux: yay -S kasane-bin · macOS: brew install Yus314/kasane/kasane · Nix: nix run github:Yus314/kasane · From source: cargo install --path kasane

kasane file.txt               # your Kakoune config works unchanged
alias kak=kasane              # add to .bashrc / .zshrc

GPU backend: cargo install --path kasane --features gui, then kasane --ui gui.

See Getting Started for detailed setup.

Plugins

Plugins can add floating overlays, line annotations, virtual text, code folding, gutter decorations, input handling, scroll policies, and more. Bundled example plugins you can try today:

Plugin What it does
cursor-line Highlight the active line with theme-aware colors
fuzzy-finder fzf-powered file picker as a floating overlay
sel-badge Show selection count in the status bar
color-preview Inline color swatches next to hex values
pane-manager Tmux-like splits with Ctrl+W — no external multiplexer needed
image-preview Display images in a floating overlay anchored to the cursor
smooth-scroll Animated scrolling
prompt-highlight Visual feedback when entering prompt mode

Each plugin builds into a single .kpk package — sandboxed, composable, and ready to install. A complete plugin in 15 lines — here is sel-badge in its entirety:

kasane_plugin_sdk::define_plugin! {
    manifest: "kasane-plugin.toml",

    state {
        #[bind(host_state::get_cursor_count(), on: dirty::BUFFER)]
        cursor_count: u32 = 0,
    },

    slots {
        STATUS_RIGHT(dirty::BUFFER) => |_ctx| {
            (state.cursor_count > 1).then(|| {
                auto_contribution(text(&format!(" {} sel ", state.cursor_count), default_style()))
            })
        },
    },
}

Start writing your own:

kasane plugin new my-plugin    # scaffold from 6 templates
kasane plugin dev              # hot-reload while you edit

See Plugin Development, Plugin API, and ABI Versioning Policy.

Status

Kasane is stable as a Kakoune frontend — ready for daily use. The plugin API is evolving; see Plugin Development for the current ABI version and migration guides.

Usage

kasane [options] [kak-options] [file]... [+<line>[:<col>]|+:]

All Kakoune arguments work — kasane passes them through to kak.

kasane file.txt              # Edit a file
kasane -c project            # Connect to existing session
kasane -s myses file.txt     # Named session
kasane --ui gui file.txt     # GPU backend
kasane -l                    # List sessions (delegates to kak)

See docs/config.md for configuration.

Contributing

See CONTRIBUTING.md for development setup and guidelines.

cargo test                             # Run all tests
cargo clippy -- -D warnings            # Lint
cargo fmt --check                      # Format check

License

MIT OR Apache-2.0

Extension points exported contracts — how you extend this code

Plugin (Interface)
Primary plugin trait — register extension points via [`HandlerRegistry`]. All extension points are declared in `registe [35 …
kasane-core/src/plugin/state.rs
AtlasOps (Interface)
Atlas operations the cache needs. Production wires this to a pair of `GpuAtlasShelf`s (see `scene_renderer`). The unit t [5 …
kasane-gui/src/gpu/text/raster_cache.rs
Composable (Interface)
A monoid: associative binary operation with identity element. # Laws - **Left identity**: `compose(empty(), x) == x` - [8 …
kasane-core/src/plugin/compose.rs
GpuBackend (Interface)
A GPU rendering backend. The trait is intentionally minimal and shaped after the existing [`super::scene_renderer::Scen [2 …
kasane-gui/src/gpu/backend.rs
Transparency (Interface)
Marker trait for handler return types that carry transparency metadata. When `IS_TRANSPARENT` is true, the framework re [6 …
kasane-core/src/plugin/handler_registry/mod.rs
Surface (Interface)
A rectangular screen region that can build its own Element tree and handle events. Both core components and plugins imp [9 …
kasane-core/src/surface/traits.rs
Lens (Interface)
A lens — a named, toggleable source of `DisplayDirective`s. Implementations should be cheap to construct and pure with [9 …
kasane-core/src/lens/mod.rs

Core symbols most depended-on inside this repo

clone
called by 1493
kasane-core/src/plugin/pubsub.rs
push
called by 893
kasane-core/src/plugin/canvas.rs
map
called by 722
kasane-core/src/state/selection_set.rs
iter
called by 670
kasane-core/src/display/unit.rs
collect
called by 440
kasane-core/src/plugin/manager.rs
max
called by 207
kasane-core/src/state/selection.rs
min
called by 198
kasane-core/src/state/selection.rs
view
called by 177
kasane-core/src/plugin/registry/mod.rs

Shape

Function 5,004
Method 2,575
Class 829
Enum 247
Interface 37

Languages

Rust100%
Ruby1%

Modules by API surface

kasane-core/src/widget/tests.rs176 symbols
kasane-plugin-sdk-test/src/lib.rs165 symbols
kasane-core/src/plugin/bridge.rs110 symbols
kasane-core/src/plugin/tests/registry.rs108 symbols
kasane-wasm/src/host.rs101 symbols
kasane-wasm/src/adapter.rs90 symbols
kasane/src/cli.rs81 symbols
kasane-core/src/plugin/traits.rs80 symbols
kasane-core/src/plugin/registry/mod.rs76 symbols
kasane-core/src/config/mod.rs74 symbols
kasane-core/src/plugin/app_view.rs72 symbols
kasane-wasm/src/convert/tests.rs69 symbols

For agents

$ claude mcp add kasane \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page