Skip to content
Zephyr

About

One editor, one maintainer, a few clear decisions.

Zephyr is a code editor for Windows 10 or 11, which is the platform it is built and tested on. It runs in about 9.5 MB, it does not ship a browser engine, and it exposes an MCP server so an AI CLI can work in the same window you do. This page covers who writes it, why it is shaped this way, and what is done and not done.

Who builds it

A solo open-source project.

Zephyr is written and maintained by Muhammad Khalid, a single developer. It is not backed by a company, funded by investors, or run by a team. There is no roadmap deck and no release train. What ships is what got built and tested.

The repository is public, the license is Apache-2.0, and every decision above a bug fix is visible in the issue tracker. Issues are answered by the same person who wrote the code, which sometimes means slowly. Nobody is being paid to respond faster.

Design thesis

Strip out the parts nobody asked for.

Most editors grew by acquiring things. Zephyr grew by declining them. The starting constraint was footprint, and every later decision was checked against it.

No bundled Chromium

Zephyr uses the webview the operating system already has. On Windows 11, WebView2 is present out of the box, so there is no 150 MB browser engine to download, patch, or keep current.

No always-on extension host

Extensions are static files in a folder. Nothing runs in a background process while the window is closed, and there is no marketplace pushing code updates into your install without you asking.

AI CLIs as first-class citizens

An MCP server on port 9222 exposes the editor to Claude Code, Codex, Gemini CLI, and opencode. The window is addressable by a tool, so an agent can read the buffer, move the cursor, open a file, and drive the same UI you use.

Everything stays on the machine

No account, no telemetry, no analytics, no crash reporting. The app does not know your email address and has nowhere to send your source code.

Principles

Five rules the codebase is held to.

  • Small enough to read

    About 9.5 MB on disk, no bundled browser engine, no background service. If a feature needs something downloaded at runtime, it belongs in your hands, not in the binary.

  • Local, and only local

    Files, git, terminal, and settings stay on the machine. The app has no endpoint of its own to send anything to.

  • AI CLIs are first-class

    Claude Code, Codex, Gemini CLI, and opencode drive the same window you do, over an MCP server on port 9222. The editor is something a tool can operate, not just something you look at.

  • No always-on extension host

    Extensions are static files you drop into a folder and the window loads at startup. No resident process wakes up to run your theme.

  • Code you can audit

    Apache-2.0, readable Rust and TypeScript, no analytics package in the dependency tree, no phone-home call anywhere in the source.

Stack

What it is built with.

Small, well-known pieces. If you want to read the whole thing, the source is short enough to read.

Tauri 2

Window, packaging, updater, webview host

Rust

Core, file system, process and terminal plumbing

React 18

Window UI

CodeMirror 6

Editing surface, per-language modes

xterm.js

Terminal emulation on top of ConPTY

Zustand

State across panes

axum

MCP server on port 9222

portable-pty

Windows ConPTY and Unix PTY sessions

Current state · v1.1.11

Where the editor stands today.

Platforms

Windows 10 or 11 is the primary and officially supported platform. The x86_64 NSIS installer and the MSI are published for every release, and they are the only builds that get tested. Linux x86_64 AppImage and .deb are published as experimental community builds, so fixes land on Windows first. There is no macOS build.

Extensions

In v1 extensions are static contributions only. Files go into the extensions folder and the window loads them at startup. There is no marketplace and no runtime package manager, which is a deliberate limitation rather than a missing feature.

MCP server

On by default, bound to loopback on port 9222, and switchable off from settings. When it is off, nothing is listening. The token and the transport are described on the security page.

Not planned

No cloud sync, no collaboration, no plugin economy, no bundled terminal multiplexer with its own server. Features that would require a hosted service to work are out of scope for a project that has no servers.

Read it, run it, or tell me what is wrong with it.

The source is the documentation. If something here is inaccurate or you want to change it, the issue tracker is the right place.