Kami0.1

Changes
103
Areas
11
First release
—

The first release: a native editor with language servers, a full-window Git view, a debugger, and a terminal with a task runner.

Highlights

A native editor
Kami is a macOS IDE written in Rust on GPUI, with tree-sitter highlighting for 29 languages, code folding, multiple carets, split panes and a session that comes back on restart.
Language servers per project
Rust, TypeScript, JavaScript and PHP get completions with snippets, hover, signature help, go to definition, find usages, rename, quick fixes, inlay hints and format on save. In a monorepo, each project gets its own server.
Full-window Git view
⌥⌘G opens a commit graph with a refs sidebar, side-by-side commit diffs, staging down to single lines, and push, pull and fetch.
Built-in debugger
Debug Rust programs through lldb-dap with breakpoints, conditions, stepping, a variables tree, watches, a debug console and inline values.
Terminal and task runner
A real shell in a bottom panel, plus cargo, npm and Make tasks that need no setup, with clickable compiler errors and a test runner that reruns only the failures.

Editor

21 changes
  • Syntax highlighting for Rust, TypeScript, TSX, JavaScript, PHP, Python, Go, Java, Kotlin, Swift, Scala, Ruby, C, C++, C#, SQL, HTML, CSS, XML, YAML, TOML, JSON, Markdown, Bash, Dockerfile, NEON, Apache config, CoffeeScript and .env files.
  • Tabs show a dot for unsaved changes; ⌘S saves, and undoing back to the saved text marks the tab clean again.
  • Closing a tab with unsaved changes asks for a second ⌘W. Middle-click closes any tab, and tabs shrink to fit instead of overflowing.
  • Mouse selection: drag, double-click for a word, triple-click for a line, and double-click-drag to extend by word.
  • Multiple carets: ⌥-click adds or removes one, ⌃G adds the next occurrence, and ⌥-drag makes a column selection. Typing, paste and delete apply at every caret as one undo step.
  • Word, line, page and document motion and word delete, in the editor and in every text field.
  • Enter keeps the line’s indent and adds a level after an opening bracket; ⇥ and ⇧⇥ indent and outdent.
  • Brackets and quotes close themselves, wrap a selection, and step over a closer you type anyway.
  • ⌘/ toggles line comments (⌘7 on layouts where the slash needs Shift).
  • ⇧⌘D duplicates the line, and ⌥⇧↑ / ⌥⇧↓ move lines up and down.
  • ⌥↑ / ⌥↓ expand and shrink the selection along the syntax tree.
  • Code folding from the syntax tree: gutter chevrons, ⌥⌘[ / ⌥⌘], Fold All (⇧⌥⌘[), Unfold All and Fold Imports. Folds are kept when a file is closed and reopened.
  • Sticky lines pin the enclosing function, impl or class to the top while you scroll.
  • Breadcrumbs under the tabs show the file path and the scopes around the caret; click one to jump to it.
  • Find in file (⌘F) with smart case, a match count, ⌘G / ⇧⌘G to cycle, and Replace or Replace All as one undo step.
  • ⌘\ splits the editor into two panes over the same file; carets and folds in the other pane stay put as you edit.
  • Undo and redo bring the caret back to the edit.
  • Clipboard history (⌥⌘V) and bookmarks (F3 to toggle, ⌘F3 to list them).
  • A file changed on disk reloads in place; a tab with unsaved edits warns instead of being overwritten.
  • Zen mode (⌃⌘Z) hides everything but the editor.
  • Markdown and CSV preview: ⇧⌘V cycles Code, Mixed and Preview (or ⌃⌘1–⌃⌘3), with tables, local images and scrolling that follows the source.

Code intelligence

14 changes
  • Language servers for Rust (rust-analyzer), TypeScript and JavaScript (typescript-language-server) and PHP (intelephense) start when a file of that language opens.
  • Each server runs from the nearest Cargo.toml, tsconfig.json, package.json or composer.json, so every package in a monorepo is read with its own config.
  • Any server can be replaced, given its own arguments, environment and initialization options, or turned off in settings.
  • Servers are found on your shell’s PATH even when Kami is opened from Finder or the Dock.
  • When a project has no TypeScript of its own, the TypeScript server falls back to one found in the workspace or installed globally.
  • Live diagnostics with error and warning counts, and a Problems panel (⌘3) grouped by file, with an errors-only filter.
  • Completions (⌃Space, or as you type the server’s trigger characters) insert snippets whose placeholders you step through with ⇥ and ⇧⇥, and apply the server’s extra edits, such as imports.
  • Hover docs (⌘I), signature help (⌘P, also shown on ( and ,), and inlay hints for parameter names and types.
  • Go to definition with ⌘B or ⌘-click, and find usages (⌥F7) in a bottom panel.
  • Rename (⇧F6) and quick fixes (⌥↵) apply across files as one undoable edit, including files the edit creates, renames or deletes.
  • Format on save, with indent settings taken from settings or .editorconfig.
  • File structure (⌘F12) lists the current file’s symbols in the palette.
  • Scripts with a shebang get the language server for their interpreter.
  • When a server rejects a file or a request, or can’t be found, Kami says so instead of showing nothing. Server errors appear as toasts, and everything goes to the log.

Search and navigation

7 changes
  • ⌘K opens the palette: fuzzy search over every file in the workspace, app commands with their shortcuts, and detected tasks. Pressing ⇧ twice opens it too.
  • Workspace search (⇧⌘F) opens in a dialog and searches as you type; Find in Folder… in the file tree limits it to one folder.
  • searchExcludes sets the folders both searches skip. The ⌘K index holds up to 100,000 files (searchIndexLimit) and says when it hits the limit.
  • Go to line (⌘L) takes 42, 42:8 or 42,8.
  • ⌘[ and ⌘] go back and forward through definition jumps, search hits, palette jumps and tab switches.
  • Recent files (⌘E).
  • The TODO panel (⌘5) lists every TODO, FIXME, HACK and XXX comment in the workspace.

Files and projects

8 changes
  • File tree (⌘1) that follows .gitignore, shows icons by file type, and reveals the active file.
  • A click selects a folder; double-click, → or ↵ opens it, and the arrow keys move through the tree.
  • Right-click a file or folder for New File, New Folder, Reveal in Finder, Open in Terminal, Find in Folder, Copy Path, Copy Relative Path, Rename, Duplicate and Delete.
  • Files dropped from Finder are copied in, renamed instead of overwriting.
  • New File (⌘N), plus Rename and Delete Current File in the palette.
  • Open Folder (⌥⌘O), File ▸ Open Recent, and a Recent Projects dialog where entries can be removed.
  • Opening a project asks whether to use this window or a new one; every window has its own workspace.
  • Kami reopens the last project at launch and restores its tabs, folds, breakpoints, bookmarks, scroll positions and panel sizes.

Git view

11 changes
  • ⌥⌘G switches the window to the Git view and back.
  • The commit graph shows branch lanes, branch and tag labels, author and age, and loads more history as you scroll. A work-in-progress row sits on top while the tree has changes.
  • The refs sidebar has Local, Remotes, Tags and Stashes sections, with slash-separated names grouped into folders, a filter, and per-ref hide or show-only-this for the graph.
  • Double-click a branch to check it out; a remote branch gets a local tracking branch, and a tag checks out detached.
  • Right-click a ref for Checkout, Pull, Push, Copy name, Delete branch or Delete tag; stashes offer Apply, Pop and Drop.
  • Select a commit to see its message, changed files and a side-by-side diff; double-click a file to open it in the editor.
  • The work-in-progress row lists unstaged and staged files. Stage or unstage a file, everything at once, or just the selected lines (⌥⌘S / ⌥⌘U).
  • Discard selected lines or a whole file, confirmed by a second click.
  • ⌥⌘↓ / ⌥⌘↑ step through the changes in a diff, and a strip beside it marks each one.
  • Pull and Push show how far behind and ahead you are; Push has Force push (with lease) and Force push options, and Fetch fetches every remote.
  • The columns resize by dragging, and the view refreshes when the repository changes on disk.

Git in the editor

7 changes
  • Gutter markers show added, modified and deleted lines against HEAD.
  • ⌘D shows the file’s diff against HEAD, and ⌥⌘D shows it side by side.
  • The Git panel (⌘2) lists changed files; click one to stage or unstage it, and ⌘↵ commits.
  • The Git log (⌘4) draws the branch graph; click a commit to see its diff.
  • ⌥⌘B toggles a blame column with each line’s commit, author and date.
  • Push (⇧⌘K), pull (⌘T, fast-forward only) and fetch run in the background; the status bar shows the branch and how far it is ahead or behind.
  • The branch picker (⌃⇧B) switches branches and creates new ones; stash and pop from the palette.

Terminal

4 changes
  • ` ⌃ ` or ⌘J` opens a real login shell in the bottom panel, using the theme’s ANSI palette.
  • The terminal resizes with its panel and scrolls back through history with the wheel.
  • Select by dragging, double-click for a word or triple-click for a line, and ⌘C to copy; the selection stays on its text as output scrolls.
  • ⌘K clears the terminal.

Run and test

5 changes
  • Cargo targets, npm scripts and Makefile targets are detected and run from ⌘K; ⌘R reruns the last one.
  • Output streams into the Run panel, and errors from rustc, clippy, tsc, gcc, clang and go are clickable.
  • Test runs count passes and failures as they stream, with a button that reruns only the failed tests.
  • A run marker next to fn main and each test runs just that one: cargo tests, PHPUnit test methods, and Jest or Vitest it, test and describe blocks.
  • Run configurations in .kami/run.json set arguments, working directory, environment and an env file, and can run other configurations first.

Debugger

6 changes
  • F5 launches the project’s binary under lldb-dap, or the program and arguments set in debug.program and debug.args, and continues when paused.
  • F8, F7 and ⇧F8 step over, in and out; ⇧F5 stops.
  • Click the gutter to toggle a breakpoint. ⇧⌘F8 or ⌥-click sets a condition, and conditional breakpoints are drawn hollow.
  • The debug panel shows the call stack, a variables tree you can expand, watch expressions, and a console for evaluating expressions.
  • While paused, each line shows the values of the variables it uses.
  • Breakpoints and watches are saved with the session.

Settings

8 changes
  • ⌘, opens Settings, with General, Editor, Languages, Keymap and About tabs, a search across all of them, and a sentence explaining each setting.
  • Every setting has a control: switches, dropdowns, number steppers and text fields. The keyboard moves through rows, and ⌥↑ / ⌥↓ change a value.
  • Changes go to the user or the workspace settings file, keep the file’s comments, and apply immediately; ⇧⌘⌫ resets a setting to the layer below.
  • Settings files are JSON with comments, in ~/.config/kami/settings.json and .kami/settings.json, and reload live when edited by hand.
  • Keymap presets for Default, IntelliJ and VS Code, with your own overrides on top. The Keymap tab lists every binding and marks conflicts.
  • Themes: Dark, Light, One Dark Italic, Ryu, or a Raycast Theme Studio JSON file.
  • The editor font can be picked from the monospace fonts installed on the Mac.
  • The Languages tab shows each language server’s command and arguments, and offers the TypeScript versions found in the workspace.

App

7 changes
  • Native macOS menu bar and a standard window that resizes, zooms on a title bar double-click, and drags from the tab strip.
  • Panels and the file tree resize by dragging their edges.
  • A welcome screen with the main shortcuts shows when no file is open.
  • A first-run guide sets your keymap and theme and walks through five shortcuts; Getting Started in ⌘K brings it back.
  • Errors appear as toasts and are also written to ~/.config/kami/kami.log; Open Log in ⌘K opens it.
  • Kami checks for updates once a day on the stable or beta channel, sends nothing about you, and can be turned off.
  • Shipped as a signed, notarized app for both Apple silicon and Intel Macs.