Skip to main content

Imbi

Imbi is a DevOps Service Management Platform for managing large environments containing many services and applications. It provides a centralized service catalog with metadata management, dependency tracking, ownership hierarchy, and AI-powered features.

Features

  • Service Catalog: Centralized inventory of all services and applications
  • Dependency Tracking: Graph-based dependency visualization using PostgreSQL + Apache AGE
  • Blueprint System: Customizable metadata schemas for extending project fields
  • Ownership Hierarchy: Organization, team, and user-based ownership model
  • AI Assistant: Conversational AI powered by Claude for service queries
  • MCP Server: Model Context Protocol server for AI agent access
  • Webhook Gateway: Inbound event processing from GitHub, PagerDuty, etc.
  • Analytics: Operations logs and time-series data via ClickHouse
  • Authentication: OAuth2/OIDC (Google, GitHub, Keycloak) + local auth

Architecture

                          +--------------------+
                          |       Caddy        |
                          |   reverse proxy    |
                          +----+--+--+--+--+---+
                               |  |  |  |  |
        +----------------------+  |  |  |  +---------------------+
        |            +------------+  |  +-----------+            |
        |            |               |              |            |
    imbi-api   imbi-assistant    imbi-ui      imbi-gateway   imbi-mcp
    (FastAPI)    (FastAPI)     (React/Vite)    (FastAPI)      (FastMCP)
        |            |                              |            |
        +------------+--------------+---------------+------------+
                                    |
                              imbi-common
                       (shared Python library)
                                    |
                          +---------+---------+
                          |                   |
                 PostgreSQL + AGE        ClickHouse
                  (graph database)       (analytics)

All services run behind Caddy, a powerful and extensible reverse proxy with automatic HTTPS. The Docker image packages everything into a single deployable unit that can run all services together or scale out individual components.

Quick Start

Prerequisites

Running with Docker Compose

The included compose.yaml starts Imbi and all backing services:

# Build and start everything
docker compose up --build -d

# Run initial setup (create admin user, seed permissions)
docker compose exec -it imbi imbi-api setup

# View logs
docker compose logs -f imbi

Once running, Imbi is available at http://localhost:8080 — the only service published on a fixed host port:

Service URL Description
Imbi http://localhost:8080 Main application (UI + API via Caddy)

The backing services are exposed on ephemeral host ports (assigned by Docker) to avoid collisions. Find a service's mapped port with docker compose port <service> <container-port>:

Service Container port Description
PostgreSQL 5432 Graph database (Apache AGE); user postgres, password secret
ClickHouse 8123 Analytics database HTTP interface
Mailpit 8025 Email testing UI (captures all outbound email)
LocalStack 4566 S3-compatible object storage

UI Development with Docker Compose

You can use Docker Compose to run the full backend stack while developing the UI locally with hot-reload:

# 1. Start the backend services
docker compose up --build -d

# 2. Run initial setup (first time only — creates admin user, seeds permissions)
docker compose exec -it imbi imbi-api setup

# 3. In the ui/ directory, point the dev proxy at the local backend
cd ui
echo 'VITE_API_URL=http://localhost:8080/api' > .env.local
npm install
npm run dev

The Vite dev server starts on http://localhost:5173 and proxies /api requests to the Caddy reverse proxy at :8080, which routes them to the appropriate backend service.

Useful services during UI development:

Service URL Use
UI (dev) http://localhost:5173 Vite dev server with hot-reload
Imbi (backend) http://localhost:8080 Full app via Caddy (API + bundled UI)

Mailpit (email) and PostgreSQL (graph data) are reachable on the ephemeral host ports reported by docker compose port <service> <container-port> (see the table above) for inspecting state during development.

Python Development

The repository is a uv workspace: every library, app, and plugin is a workspace member sharing one lockfile and one virtualenv. moon is the task runner — it owns the lint/format/typecheck/test/build/docs tasks and downloads its toolchains (node, npm) on first use.

Development prerequisites:

  • moon — the version is pinned in .prototools (proto users get it automatically)
  • uv — provisions Python 3.14 and the shared .venv
  • Docker — backing services for the test suite
moon run root:setup             # uv sync + pre-commit hooks
moon run root:coverage          # full suite (single session, aggregate coverage)
moon run api:test               # one member's suite in isolation
uv run --env-file .env.test pytest apps/api/tests/endpoints/test_projects.py  # a single suite or file
moon run :lint :typecheck :format   # ruff + basedpyright across every project
uv run pre-commit run --all-files   # reformat (ruff + tombi, write mode)

moon run <member>:test boots the backing services and writes .env.test first; run moon run root:services yourself before invoking pytest directly. moon query tasks lists every available task.

Running the Docker Image

# Run all services (default)
docker run -p 8080:8080 \
  -e CLICKHOUSE_URL=clickhouse+http://default:password@clickhouse:8123/imbi \
  -e POSTGRES_URL=postgresql://postgres:secret@postgres/imbi \
  -e IMBI_AUTH_JWT_SECRET=your-secret-here \
  -e IMBI_AUTH_ENCRYPTION_KEY=your-encryption-key \
  -e IMBI_API_URL=http://localhost:8080/api \
  -e VITE_API_URL=http://localhost:8080/api \
  ghcr.io/aweber-imbi/imbi:latest

# Run a specific service only
docker run -e IMBI_SERVICE=api ...
docker run -e IMBI_SERVICE=assistant ...
docker run -e IMBI_SERVICE=gateway ...
docker run -e IMBI_SERVICE=mcp ...
docker run -e IMBI_SERVICE=slackbot ...

# Run initial setup (create admin user, seed permissions)
docker run -it \
  -e CLICKHOUSE_URL=clickhouse+http://default:password@clickhouse:8123/imbi \
  -e IMBI_AUTH_JWT_SECRET=your-secret-here \
  -e IMBI_AUTH_ENCRYPTION_KEY=your-encryption-key \
  ghcr.io/aweber-imbi/imbi:latest setup

Deploying with Helm

helm install imbi helm/imbi \
  --set auth.jwtSecret=your-secret \
  --set auth.encryptionKey=your-key

See Helm chart documentation for full configuration.

Building

Prerequisites

Build Commands

# Build the production Docker image
moon run root:image

Environment Variables

Required

Variable Description Services
CLICKHOUSE_URL ClickHouse connection URL api, all
IMBI_AUTH_JWT_SECRET JWT signing secret api, assistant, all
IMBI_AUTH_ENCRYPTION_KEY Fernet encryption key api, all
POSTGRES_URL PostgreSQL connection URL gateway, slackbot, all

Optional

Variable Description Default
IMBI_SERVICE Service to run (all, api, assistant, gateway, mcp, slackbot) all
IMBI_API_URL Public URL of the API, including the path prefix it is mounted under (e.g. http://localhost:8080/api); needed when serving behind the bundled Caddy -
VITE_API_URL Same value as IMBI_API_URL; injected into the UI at serve time -
ANTHROPIC_API_KEY Anthropic API key for assistant -
IMBI_ASSISTANT_ENABLED Enable the AI assistant false
IMBI_EMAIL_ENABLED Enable email notifications false
IMBI_EMAIL_SMTP_HOST SMTP server host localhost
IMBI_EMAIL_SMTP_PORT SMTP server port 587
IMBI_EMAIL_SMTP_USE_TLS Use TLS for SMTP true
IMBI_ENVIRONMENT Runtime environment development

Project Structure

The repository is a monorepo organized as a uv workspace. Every Python package publishes its own distribution; the root imbi package is a meta-distribution that installs the whole platform.

imbi/
├── libraries/
│   └── common/        # imbi-common — shared library (imbi.common)
│       └── {pyproject.toml, src/, tests/}   # every member carries its own tests
├── apps/
│   ├── api/           # imbi-api — core REST API (imbi.api)
│   ├── assistant/     # imbi-assistant — AI assistant (imbi.assistant)
│   ├── gateway/       # imbi-gateway — webhook gateway (imbi.gateway)
│   ├── mcp/           # imbi-mcp — MCP server (imbi.mcp)
│   └── slackbot/      # imbi-slackbot — Slack bot (imbi.slackbot)
├── plugins/           # imbi-plugin-* — first-party plugins (imbi.plugins.*)
│   ├── aws/  github/  google/  logzio/  oidc/  pagerduty/  sonarqube/
├── ui/                # React frontend (npm, not a uv member)
├── docs/              # unified Zensical site
├── pyproject.toml     # workspace root + the `imbi` meta-package
├── container/         # Dockerfile, Caddyfile, and entrypoint.sh for
│                      #   the production image
├── compose.yaml       # Local run of the production image
├── compose.ci.yaml    # Backing services for the test suites
├── helm/imbi/         # Helm chart for Kubernetes deployment
└── .moon/ + moon.yml  # moon task runner configuration (lint/test/build/…)

Documentation

Full documentation is available at aweber-imbi.github.io/imbi and covers installation, configuration, administration, and usage.

License

BSD 3-Clause License. See LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

imbi-2.18.0.tar.gz (2.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

imbi-2.18.0-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file imbi-2.18.0.tar.gz.

File metadata

  • Download URL: imbi-2.18.0.tar.gz
  • Upload date:
  • Size: 2.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for imbi-2.18.0.tar.gz
Algorithm Hash digest
SHA256 9191bf8421b92f0d732540e31cffa0c8b2c71a9628bb4f7dec79021fc0b5c38e
MD5 61221287ee1e9031f5f908d2392efae4
BLAKE2b-256 37f06cdfbbabf30012563f25d3ba3159d51bf18b97c6bbf8b1617afa03c60507

See more details on using hashes here.

Provenance

The following attestation bundles were made for imbi-2.18.0.tar.gz:

Publisher: release.yml on AWeber-Imbi/imbi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file imbi-2.18.0-py3-none-any.whl.

File metadata

  • Download URL: imbi-2.18.0-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for imbi-2.18.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c548c36660bc76351e2184a27ccb1090add8d8f7792797ac85c70d848a6b8c81
MD5 8cd7bf6123e0635883906a5f9593f909
BLAKE2b-256 7c355c40f48e649ef91fd3655dd3ed3e6871587e0e2bce957f8cf941ad99ed60

See more details on using hashes here.

Provenance

The following attestation bundles were made for imbi-2.18.0-py3-none-any.whl:

Publisher: release.yml on AWeber-Imbi/imbi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page