Documentation
Everything you need to get Kollaber running and capturing your infrastructure events.
Getting Started
Kollaber captures deploys, alerts, and manual notes in a shared timeline your entire team can see. Getting started takes about five minutes.
1. Create an account
Visit /register and sign up with your email address. You can also sign in with GitHub if your organization uses it.
On first login you will be prompted to create an organization — this is the shared workspace for your team.
2. Create an environment
Go to Dashboard → New Environment and give it a name like production or staging. You can add an optional cluster name for Kubernetes setups.
3. Send your first event
Install the CLI (see CLI Reference) and run:
kollaber login --api https://kollaber.io --email you@example.com kollaber deploy --env production --service api --version v1.0.0
Head back to the dashboard — your deploy event will appear in the timeline immediately.
Dashboard
The dashboard is the primary UI for browsing your infrastructure history and collaborating with your team.
Timeline view
Each environment has its own timeline. Events are sorted newest-first and show the event type, service name, timestamp, and any attached metadata (version, author, etc.).
The timeline polls for new events every 10 seconds — no refresh needed. A coloured badge indicates the event type:
- DEPLOY — a service release recorded via the CLI, CI, or webhook
- ALERT — an alert ingested via webhook
- NOTE — a manual note added by a team member
Commenting on events
Click any event to expand it. Use the comment box to leave context — root cause, rollback decision, follow-up ticket, anything. Comments are timestamped and attributed to the author.
AI timeline assistant
On the Team plan and above, open the assistant from the spark icon in the bottom-right of the timeline. Ask questions in plain language — “what deployed today?”, “summarize the latest alert and its discussion” — and it answers by reading your real events and comments, streaming the reply as it goes. It only reports what it finds in your data and never invents events. You can also query it from the terminal with kollaber ask.
Team management
Go to Settings → Members to invite teammates via email. Each member can be assigned one of four roles:
- Owner — full control including billing and org deletion
- Admin — manage members, environments, and all events
- Member — create events and comments
- Viewer — read-only access to the timeline
Notifications
Kollaber notifies you when events are recorded on your timeline — via email, Slack, or Microsoft Teams. Email notifications are opt-in and per-user; Slack and Teams are configured once per organization.
Email preferences
Go to Settings → Notifications. Check the event types you want to be notified about and optionally enter a notification email address:
- Deployments — emailed when a
deployevent is recorded - Alerts — emailed when an
alertevent is recorded - Notes — emailed when a
noteis added to the timeline
The Notification email field lets you receive alerts at a different address than your account email — useful for shared inboxes or on-call aliases. Leave it blank to use your account email.
Preferences are saved per organization. Members who have not configured preferences receive no emails by default.
How it works
When any event is created (via the CLI, webhook, or UI), Kollaber fires all configured channels asynchronously — email recipients, the Slack webhook, and the Teams webhook all receive a notification without blocking the API response.
Integrations
In addition to email, Kollaber can post to a Slack channel or Microsoft Teams channel when events are recorded. These are org-level settings — one webhook URL covers all team members.
Slack
Go to Settings → Slack and paste an Incoming Webhook URL. To get one:
- Open your Slack workspace's App Directory and install Incoming Webhooks
- Choose a channel and click Add Incoming Webhooks integration
- Copy the generated webhook URL and paste it into Kollaber
Use the Send test message button to verify delivery. Slack messages include the event type (with an emoji), the service name, and the environment.
Microsoft Teams
Go to Settings → Teams and paste an Incoming Webhook URL. To get one:
- Open the target Teams channel and click ··· → Connectors
- Search for Incoming Webhook and click Configure
- Give it a name, click Create, then copy the webhook URL
Teams messages are sent as colour-coded MessageCard payloads — blue for deploys, red for alerts, purple for notes.
Permissions
Only owners and admins can save or clear the Slack and Teams webhook URLs. Members and viewers can see whether a webhook is configured but cannot change it.
CLI Reference
The kollaber CLI lets you send events, view the timeline, and manage environments directly from your terminal or CI pipeline.
Installation
Install with Go:
go install github.com/urbangeeks/kollaber/cmd/kollaber@latest
Or download a pre-built binary from the downloads page.
Defaults to https://kollaber.io (the hosted service). Set theKOLLABER_API environment variable (or --api on login) to point at a self-hosted instance.
kollaber login
Authenticate and save a token to ~/.kollaber/config.json.
# Email — sends a one-time code, then prompts you to enter it kollaber login --api https://kollaber.io --email you@example.com # CLI token from Settings → API Tokens (for GitHub OAuth users) kollaber login --api https://kollaber.io --token <your-token>
kollaber envs
List all environments in your organization.
kollaber envs
kollaber deploy
Record a deploy event.
kollaber deploy \ --env production \ --service api \ --version v1.2.3
v1.2.3 (required)kollaber note
Drop a manual note into the timeline — useful for maintenance windows or on-call observations.
kollaber note --env production "Rolling back v1.2.3 due to 5xx spike"
kollaber timeline
View recent events for an environment.
kollaber timeline --env production --limit 20
kollaber incident
Group related events into an incident, track its status, and link events together. Useful from CI — open an incident and attach the failing deploy in one step.
kollaber incident list # all incidents kollaber incident list --status open # filter by status kollaber incident open --title "5xx spike on api" --severity sev2 kollaber incident open --title "Deploy failed" --severity sev2 --event <event-id> kollaber incident attach <incident-id> --event <event-id> kollaber incident resolve <incident-id> # defaults to resolved kollaber incident resolve <incident-id> --status mitigated
kollaber ask
Ask the AI timeline assistant a natural-language question about your events. The answer streams to stdout while tool lookups print to stderr, so you can pipe the answer cleanly. Requires the Team plan or higher.
kollaber ask --env production "what deployed in the last hour?" kollaber ask "summarize today's alerts" > summary.txt
Conversations persist across commands, so follow-ups keep context. Run with no question to open an interactive multi-turn session (type exit to quit).
kollaber ask "what was the last alert?" kollaber ask "yes, show its metadata" # remembers the previous turn kollaber ask --env production # interactive session
Kubernetes
The kube-watcher is a lightweight agent that watches your Kubernetes cluster and automatically fires events to your Kollaber timeline — no manual CLI calls or CI steps needed.
- DEPLOY — fired when a Deployment, StatefulSet, or DaemonSet completes a rollout, capturing the image tag, replica count, and rollout duration
- ROLLBACK — fired when a workload's image reverts to a previously seen tag, instead of a generic deploy
- SCALE — fired when a workload's replica count changes (manual or HPA-driven), capturing the direction and old/new counts
- TEARDOWN — fired when a Deployment, StatefulSet, or DaemonSet is removed (requires
reportDeletes) - ALERT — fired on pod failures:
CrashLoopBackOff, image pull errors,OOMKilled, and unschedulable pods, capturing the pod, container, and reason
Deploy with Helm
The watcher runs as a Deployment inside your cluster using a ServiceAccount with read-only access to Deployments, StatefulSets, DaemonSets, and Pods. Install one release per cluster:
helm install kollaber-watcher oci://ghcr.io/urbangeeks/charts/kube-watcher \ --set kollaber.env=prod \ --set kollaber.api=https://kollaber.io \ --set kollaber.token=<cli-token>
Get your CLI token from the dashboard under Settings → CLI Token.
Helm values
Secret with key token instead of creating oneteardown event when a Deployment is removed (default: false)Multiple clusters
Install a separate Helm release for each cluster, pointing each one at the matching Kollaber environment:
helm install kollaber-watcher-prod oci://ghcr.io/urbangeeks/charts/kube-watcher --set kollaber.env=prod ... helm install kollaber-watcher-staging oci://ghcr.io/urbangeeks/charts/kube-watcher --set kollaber.env=staging ...
Events from each cluster will appear in their respective environment timelines in the dashboard.
Using an existing secret
If you manage secrets externally (Vault, Sealed Secrets, External Secrets Operator), skip secret creation by pointing at your own:
# Your secret must have a key named "token" kubectl create secret generic my-kollaber-token --from-literal=token=<cli-token> helm install kollaber-watcher oci://ghcr.io/urbangeeks/charts/kube-watcher \ --set kollaber.env=prod \ --set kollaber.api=https://kollaber.io \ --set kollaber.existingSecret=my-kollaber-token
Running locally (out-of-cluster)
The watcher binary also works outside the cluster using your local kubeconfig — useful for testing:
go install github.com/urbangeeks/kollaber/cmd/kube-watcher@latest kube-watcher \ --kubeconfig ~/.kube/config \ --env prod \ --api https://kollaber.io \ --token <cli-token>
The binary tries in-cluster config first. If it is not running inside a pod it falls back to --kubeconfig (or ~/.kube/config by default).
Webhooks
Send events directly from your CI/CD pipeline or any HTTP-capable tool by posting to the webhook endpoint — no CLI install required.
Endpoint
POST https://kollaber.io/webhooks/events
No authentication required on the webhook endpoint. Payloads are normalized into the events table.
GitHub Actions
Add a step at the end of your deploy job:
- name: Notify Kollaber
run: |
curl -sS -X POST https://kollaber.io/webhooks/events \
-H "Content-Type: application/json" \
-d '{
"type": "deploy",
"service": "${{ github.repository }}",
"environment_id": "${{ secrets.KOLLABER_ENV_ID }}",
"metadata": {
"version": "${{ github.sha }}",
"author": "${{ github.actor }}",
"ref": "${{ github.ref }}"
}
}'Store your environment UUID as a GitHub secret named KOLLABER_ENV_ID. Find it on the Dashboard under your environment settings.
Generic JSON
Any JSON body with the following shape is accepted:
{
"type": "deploy" | "alert" | "note",
"service": "your-service-name",
"environment_id": "uuid-of-environment",
"metadata": { /* any key-value pairs */ }
}Self-hosting
Kollaber ships as a single binary that embeds the frontend. The official Helm chart is the recommended way to deploy a self-hosted instance on Kubernetes.
Prerequisites
- Kubernetes cluster with Helm 3
- PostgreSQL 14+ (or use the in-cluster option below)
Minimal install
helm install kollaber oci://ghcr.io/urbangeeks/charts/kollaber \ --namespace kollaber \ --create-namespace \ --set secret.jwtSecret=$(openssl rand -hex 32) \ --set externalDatabaseUrl=postgres://user:pass@your-postgres:5432/kollaber \ --set ingress.enabled=true \ --set ingress.host=kollaber.mycompany.com
Save the generated jwtSecret — it must stay the same across upgrades or existing sessions will be invalidated.
In-cluster PostgreSQL
If you don't have an external database, deploy one with Bitnami's chart:
helm install postgres oci://registry-1.docker.io/bitnamicharts/postgresql \ --namespace kollaber \ --set auth.username=kollaber \ --set auth.password=changeme \ --set auth.database=kollaber
Then use the service name as the hostname:
--set externalDatabaseUrl=postgres://kollaber:changeme@postgres-postgresql:5432/kollaber
All Helm values
Core
openssl rand -hex 32 (required)Image
ghcr.io/urbangeeks/kollaber-api)latest)IfNotPresent)Ingress
nginxIstio
istio: ingressgateway)SIMPLEistio-systemOptional integrations
Optional: GitHub OAuth
Create a GitHub OAuth App at github.com/settings/developers. Set the callback URL to https://kollaber.mycompany.com/auth/github/callback, then pass the credentials:
--set secret.githubClientId=your_client_id \ --set secret.githubClientSecret=your_client_secret
If not set, GitHub OAuth is disabled and users log in with email/password only.
Email delivery
Kollaber uses email OTP for login — users receive a 6-digit code to sign in. Delivery is resolved in this order:
RESEND_API_KEY is set (SaaS default)SMTP_HOST is set (recommended for self-hosted)kubectl logs -n kollaber deployment/kollaber-apiFor production installs, configure SMTP:
--set secret.smtpHost=smtp.yourprovider.com \ --set secret.smtpPort=587 \ --set secret.smtpUser=notifications@mycompany.com \ --set secret.smtpPassword=your_password
SMTP uses STARTTLS on port 587. Port 465 (implicit TLS) is not supported. Most providers — Gmail, SendGrid, Mailgun, Exchange — support port 587.
Optional: Webhook HMAC verification
--set secret.webhookSecret=your_hmac_secret
If not set, webhook payloads are accepted without signature verification.
Istio (Gateway + VirtualService)
If your cluster uses Istio instead of a standard ingress controller, disable the Ingress resource and enable Istio routing:
helm install kollaber oci://ghcr.io/urbangeeks/charts/kollaber \ --namespace kollaber \ --create-namespace \ --set secret.jwtSecret=$(openssl rand -hex 32) \ --set externalDatabaseUrl=postgres://user:pass@your-postgres:5432/kollaber \ --set ingress.enabled=false \ --set istio.enabled=true \ --set istio.host=kollaber.mycompany.com
With TLS:
--set istio.tls.mode=SIMPLE \ --set istio.tls.credentialName=kollaber-tls
The gateway selector defaults to istio: ingressgateway. Override with --set istio.gatewaySelector.istio=my-gateway if your gateway pod uses a different label.
Upgrading
helm upgrade kollaber oci://ghcr.io/urbangeeks/charts/kollaber \ --namespace kollaber \ --reuse-values
Use --reuse-values to keep your existing secrets and config. Migrations run automatically on every upgrade.
API Reference
All endpoints accept and return JSON. Authenticated endpoints require an Authorization: Bearer <token> header.
Auth
Environments
Events
Query parameters for GET /events: environment_id (required) and limit (default 50).
Comments
Incidents
Settings
Members & Invites
AI
Require the Team plan or higher. Responses need an Anthropic API key configured on the server.