keel

module
v0.1.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 9, 2026 License: MIT

README

Keel

Keel

English | 简体中文

Build desktop UIs in pure Go, without HTML, CSS, JavaScript, or a WebView. Gio draws the interface; native/ provides permissions, screenshots, synthetic input, global hotkeys, system notifications, and a rich clipboard. Keel runs on macOS, Windows, and Linux, compiles to WebAssembly for the browser, and supports Mobile (iOS / Android).

Create an application:

go install github.com/dyike/keel/cmd/keel@latest
keel new my-app && cd my-app
keel run            # Run
keel build          # Package for the current platform (.app / .exe / Linux package with icons)

Start developing in the generated app.go. To explore the repository examples and component gallery:

go run ./examples/hello
go run ./examples/components   # Component gallery: sidebar navigation and search
go run ./examples/chat -sample=all
go test -race ./...

Requires Go 1.26+. On macOS, install Xcode Command Line Tools. On Linux, install the Wayland/X11 development packages; keel doctor checks the environment. Browse the documentation and live gallery.

Documentation

  • Overview: find guides for your development task.
  • Getting started: create, develop, run, and package an application with the scaffold.
  • Mobile (iOS / Android): build and run iOS and Android apps, with platform capability limits.
  • Components: browse components by purpose, with APIs and interactive examples.
  • Automation: let an agent click, type, scroll, and take screenshots.
  • Architecture: modules, dependency boundaries, and threading rules.

Licensing

Keel is licensed under the MIT License, free for commercial and closed-source use. See LICENSING.md and the contribution guide.

Directories

Path Synopsis
cmd
keel command
Command keel creates, runs and packages Keel apps for desktop, web, iOS and Android.
Command keel creates, runs and packages Keel apps for desktop, web, iOS and Android.
keel-mcp command
Command keel-mcp is an MCP server that lets an agent run end-to-end tests against a Keel app: launch it, read what is on screen, click, type, press keys, scroll and take screenshots.
Command keel-mcp is an MCP server that lets an agent run end-to-end tests against a Keel app: launch it, read what is on screen, click, type, press keys, scroll and take screenshots.
examples
chat command
Chat shows streaming Markdown answers the way an AI assistant produces them: text arrives a few characters at a time, the view follows it to the bottom unless you scroll up, and the answer can be stopped.
Chat shows streaming Markdown answers the way an AI assistant produces them: text arrives a few characters at a time, the view follows it to the bottom unless you scroll up, and the answer can be stopped.
components command
Components is the kit gallery: a sidebar of every component, the selected one beside it.
Components is the kit gallery: a sidebar of every component, the selected one beside it.
frameless command
Frameless draws its own title bar: the window has no system title bar, the app puts a search box and buttons in the bar, and its empty part moves the window.
Frameless draws its own title bar: the window has no system title bar, the app puts a search box and buttons in the bar, and its empty part moves the window.
glass command
Glass demonstrates a native macOS backdrop beneath a transparent Gio UI.
Glass demonstrates a native macOS backdrop beneath a transparent Gio UI.
hello command
hotkey command
Hotkey shows a system-wide shortcut and a background goroutine updating the UI.
Hotkey shows a system-wide shortcut and a background goroutine updating the UI.
multiwindow command
notification command
orders command
Orders is a small order desk: search and filter a table, sort it, select rows with the mouse or keyboard, delete with confirmation, add orders through a form, and see totals per status.
Orders is a small order desk: search and filter a table, sort it, select rows with the mouse or keyboard, delete with confirmation, add orders through a form, and see totals per status.
internal
appicon
Package appicon cuts full-bleed app artwork into each platform's icon shape: Apple's macOS template, Microsoft's Windows grid, GNOME's template.
Package appicon cuts full-bleed app artwork into each platform's icon shape: Apple's macOS template, Microsoft's Windows grid, GNOME's template.
deps
Package deps only holds a test that enforces the module boundaries listed in docs/architecture.md: each module may import only what its README declares.
Package deps only holds a test that enforces the module boundaries listed in docs/architecture.md: each module may import only what its README declares.
site command
Command site builds Keel's documentation website: every Markdown file in docs/ and every module and example README becomes a static HTML page, the component pages embed the live component gallery (the WebAssembly build of examples/components), and a search index covers all of it.
Command site builds Keel's documentation website: every Markdown file in docs/ and every module and example README becomes a static HTML page, the component pages embed the live component gallery (the WebAssembly build of examples/components), and a search index covers all of it.
svgicon
Package svgicon rasterizes the small SVG subset app icons use into PNG.
Package svgicon rasterizes the small SVG subset app icons use into PNG.
Package native holds the errors shared by Keel's platform capabilities.
Package native holds the errors shared by Keel's platform capabilities.
clipboard
Package clipboard reads a bounded snapshot of text, encoded images and file paths without linking to the UI.
Package clipboard reads a bounded snapshot of text, encoded images and file paths without linking to the UI.
hotkey
Package hotkey registers system-wide shortcuts that fire even when another application is in front.
Package hotkey registers system-wide shortcuts that fire even when another application is in front.
input
Package input synthesizes mouse and keyboard events.
Package input synthesizes mouse and keyboard events.
internal/sys
Package sys binds the platform code.
Package sys binds the platform code.
internal/wlclip
Package wlclip reads the Wayland clipboard through an application's own wl_display.
Package wlclip reads the Wayland clipboard through an application's own wl_display.
notification
Package notification posts local operating-system notifications independently of Keel's UI.
Package notification posts local operating-system notifications independently of Keel's UI.
permission
Package permission checks and requests macOS privacy permissions.
Package permission checks and requests macOS privacy permissions.
process
Package process provides terminal foreground process and working-directory queries without a UI dependency.
Package process provides terminal foreground process and working-directory queries without a UI dependency.
screen
Package screen lists displays and captures screenshots.
Package screen lists displays and captures screenshots.
ui
base
Package base holds the behavior of Keel's components without their look: keyboard navigation over a list, type-to-find, multi-selection with ranges, and open/closed state.
Package base holds the behavior of Keel's components without their look: keyboard navigation over a list, type-to-find, multi-selection with ranges, and open/closed state.
core
Package core is the foundation every UI module builds on: what a Widget is, how a component runs a user callback, and how other goroutines change the UI.
Package core is the foundation every UI module builds on: what a Widget is, how a component runs a user callback, and how other goroutines change the UI.
el
highlight
Package highlight colors source code in CodeEditor, TextView and Markdown code blocks.
Package highlight colors source code in CodeEditor, TextView and Markdown code blocks.
internal/editorstyle
Package editorstyle supplies the shared input appearance for widget and el.
Package editorstyle supplies the shared input appearance for widget and el.
internal/imageload
Package imageload loads images off the UI thread and draws them with a placeholder until they arrive.
Package imageload loads images off the UI thread and draws them with a placeholder until they arrive.
internal/inputcontent
Package inputcontent keeps editable text and atomic references together.
Package inputcontent keeps editable text and atomic references together.
internal/loop
Package loop owns the state shared by every window: one lock that serializes rendering and callbacks, a queue of updates from other goroutines, and the windows to redraw.
Package loop owns the state shared by every window: one lock that serializes rendering and callbacks, a queue of updates from other goroutines, and the windows to redraw.
internal/uitest
Package uitest drives UI code without a window: it lays it out through a real Gio input router, so tests click and type as the platform would.
Package uitest drives UI code without a window: it lays it out through a real Gio input router, so tests click and type as the platform would.
kit
Package kit provides components built on ui/el.
Package kit provides components built on ui/el.
locale
Package locale holds the text Keel itself shows or reports to agents: button captions such as 确定 and 复制, accessible names such as 关闭, placeholders and counts.
Package locale holds the text Keel itself shows or reports to agents: button captions such as 确定 and 复制, accessible names such as 关闭, placeholders and counts.
markdown
Package markdown renders Markdown as ui/el elements, built for AI chat: text that streams in a few characters at a time.
Package markdown renders Markdown as ui/el elements, built for AI chat: text that streams in a few characters at a time.
netimage
Package netimage lets Keel load images from http and https URLs.
Package netimage lets Keel load images from http and https URLs.
plot
Package plot provides scales, data layouts and immediate-mode chart drawing.
Package plot provides scales, data layouts and immediate-mode chart drawing.
theme
Package theme holds the colors, text sizes and fonts every UI module reads.
Package theme holds the colors, text sizes and fonts every UI module reads.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL