macOS · Docker
Connect gRPC, OpenAPI, or MCP. Explore APIs yourself, or let an agent write and run typed scripts.
Every request stays visible and inspectable.
Documentation · Live Demo · Website
Installing Kaja, connecting apps, keeping credentials in variables, writing scripts and pointing an agent at it are all documented on the website.
| Installation | The Mac App Store build, or one docker run with your protos and kaja.json mounted |
| Apps | Connect gRPC, OpenAPI, Twirp and MCP apps, and what each type's block takes |
| Variables | Named values your scripts and your app configuration both read, with secrets kept out of the file |
| Scripts | TypeScript with a typed import for every app you connected, drawing on the canvas |
| Agents | Point your agent at Kaja's MCP server, and watch every run it makes |
The development scripts require Go and Bun installed. If not installed, they will offer to install them for you via Homebrew.
- Run in local server:
scripts/server(pass--editableto editworkspace/kaja.jsonfrom the UI) - Run in Docker:
scripts/docker - Run the desktop app:
scripts/desktop. It builds the bundle fromdesktop/Taskfile.yml;wails3 task --listindesktop/names the steps, andscripts/desktop-buildmakes the one that ships. - Test UI:
(cd ui && bun test) - TSC UI:
(cd ui && bun run tsc) - Test server:
(cd server && go test ./... -tags development -v). Thedevelopmenttag is the onescripts/serverbuilds with. Without it the packages embed a production UI bundle, which onlygo run cmd/build-ui/main.gowrites. - Update demo protos:
scripts/demo-protosrefreshes thequirksandgrpcb.inprotos inworkspace/. The demo services themselves live in kaja-tools/website. - App Store screenshots:
scripts/demowalks the installed/Applications/Kaja.appthrough its own story — empty workspace, new app, the tree, a drafted call, a run, the canvas, a performance test, variables, the MCP page — and photographs each at 1440×900 intodesktop/build/screenshots. It stages a workspace in the app's sandbox container and puts yours back on the way out. The terminal running it needs Accessibility, Automation (for System Events) and Screen Recording access.
Releases are cut from GitHub, so no local build is needed. Every push to main uploads a new build to TestFlight. To ship a version, run the release workflow (Actions → Run workflow):
open(withpatch/minor/major) bumps the version on a branch and opens a PR. Merge it yourself:mainis protected, so the bump has to arrive as a PR and pass thetestcheck. TestFlight builds carry the new version from then on.shiptags the commit and publishes a GitHub Release for it, with notes covering the whole cycle. Run it when you promote one of those TestFlight builds to the App Store.