A code-based UI for gRPC and Twirp APIs with full IntelliSense.
Write TypeScript to construct requests, call services, and inspect responses — no forms, no clicking through fields.
Live Demo · Website · Docker Hub
- Code-based — Write TypeScript to call your APIs. Full IntelliSense with autocomplete for services, methods, and message fields.
- gRPC & Twirp — Native support for both protocols. Reads your
.protofiles or uses gRPC server reflection. - macOS & Docker — Available as a macOS desktop app or a Docker container for any environment.
docker run --pull always --name kaja -d -p 41520:41520 \
-v /my_app/proto:/workspace/proto \
-v /my_app/kaja.json:/workspace/kaja.json \
--add-host=host.docker.internal:host-gateway kajatools/kaja:latest
Then open http://localhost:41520.
Download the latest Kaja.dmg from GitHub Releases.
On macOS, projects are configured through the UI. The configuration is stored at ~/.kaja/kaja.json.
With Docker, create a kaja.json file and mount it into the container:
{
"projects": [
{
"name": "my_app",
"protocol": "RPC_PROTOCOL_TWIRP",
"url": "http://host.docker.internal:41522"
}
]
}| Option | Description |
|---|---|
name |
Display name. |
protocol |
RPC_PROTOCOL_TWIRP or RPC_PROTOCOL_GRPC. |
url |
URL where the service is running. |
protoDir |
Path to .proto files. Required unless useReflection is enabled. |
useReflection |
Use gRPC server reflection instead of local proto files. Only works with gRPC. |
headers |
Headers sent with each request (e.g. {"Authorization": "Bearer xxx"}). For gRPC, sent as metadata. |
| Argument | Description |
|---|---|
--pull always |
Always pull the latest image. Kaja is updated frequently. |
--name kaja |
Name the container for easy management. |
-d |
Run in detached mode. |
-p 41520:41520 |
Map the container port. Kaja listens on 41520 by default. |
-v .../proto:/workspace/proto |
Mount your proto_path into the container. |
-v .../kaja.json:/workspace/kaja.json |
Mount your configuration file. |
--add-host=host.docker.internal:host-gateway |
Access host services from the container. |
The development scripts require Go and Node.js installed. If not installed, they will offer to install them for you via Homebrew.
- Run in local server:
scripts/server - Run in Docker:
scripts/docker - Run the desktop app:
scripts/desktop - Test UI:
(cd ui && npm test) - TSC UI:
(cd ui && npm run tsc) - Test server:
(cd server && go test ./... -v) - Update demo protos:
scripts/demo-protos(The demo services are deployed via kaja/tools/website)