Open source · Zig · native and web
Build tools that feel alive.
fizzy is a framework for editors and polished apps: a near-empty host, a stable SDK, and plugins for everything else — tabs, splits, text, images, even a whole pixel-art editor. Native on macOS, Linux and Windows. Live in your browser.
This website’s own markdown, open in fizzy. It’s the real app: drag a tab, open a file.
The framework
A host that owns nothing. Plugins for everything else.
The app is a window, a frame loop, a layout and a document model. Every feature you see — the file tree, the tabs, the text editor — is a plugin registered against the SDK. Plugins never import each other; they meet only there.
- Regions accept, surfaces offer. A plugin’s view carries keywords saying where it may go, and a region takes what matches. Drag a view somewhere else and the layout remembers.
- One source, two link modes. The same plugin compiles into the app — on every target, the web included — or as a library the desktop app loads at runtime. Third-party plugins ship the second way.
- Copy a layout, don’t configure one. A layout is ordinary Zig, a couple of dozen lines. Use one of the shipped shapes as it is, or copy the closest into your app and change it.
Plugins
Everything you see is a plugin.
The ones that ship with fizzy are built exactly the way a third-party plugin is, so any of them can be your template.
- workbench The file tree and the document panes. Other plugins open and manage files through it without importing it.
- text Text and code editing, and the owner of any file nothing else claims.
- markdown A live preview for markdown — including this page’s.
- image A viewer for PNG, JPG, GIF, BMP and TGA, with zoom and pan.
- archive Opens a
.zipas a folder. It’s how the window above opened this site. - drive Google Drive as a folder, on the desktop and on the web. From the store.
- pixi Pixel art and animation — where fizzy started, now a plugin in the store.
Store plugins live in their own repositories. Tag a release and CI builds it for every desktop target and the web; the registry picks it up, and fizzy installs and updates it in place.
Write a plugin
One function, one view.
The smallest plugin registers itself and a surface keyworded for the sidebar. Copy it, rename it, zig build install, and turn it on in fizzy.
pub fn register(host: *sdk.Host) !void {
try host.registerPlugin(&plugin);
try host.registerSurface(.{
.id = "hello.greeting",
.owner = &plugin,
.title = "Hello",
.keywords = sdk.keywords.ide.sidebar,
.draw = draw,
});
}
On the web
The same app, in a tab.
The web build is fizzy compiled to WebAssembly. Nothing to install, and your files stay where they are.
- Plugins on demand. Store plugins load beside the app as modules of their own, fetched only when you install one.
- Folders from anywhere. Open files from your device, a
.zipas a folder, or your Google Drive. - The desktop app, minus the install. The same tabs, splits and views, the same plugins.
Where it stands
Pre-1.0, and moving fast.
The SDK is versioned, and every plugin is checked against the app’s shape when it loads: one built for a different version is turned away rather than crashing.
- A modular core: the app itself owns no features
- The plugin SDK and the plugin store
- The web build, plugins included
- Liquid glass on macOS, frosted glass everywhere