Skip to content

Go2Engle/Gantry

Repository files navigation

Gantry

The open-source internal developer platform that ships as a single binary.

GitHub release License: Apache 2.0 Go 1.22+ Build GitHub Stars Docker

📖 Documentation  ·  🚀 Releases  ·  🐛 Report a Bug  ·  ✨ Request a Feature


What is Gantry?

Gantry is a self-hostable internal developer platform (IDP) — a lightweight alternative to Backstage that runs as a single Go binary with no external dependencies. It gives engineering teams a unified service catalog, self-service actions, GitOps-native configuration management, and a plugin ecosystem without the operational overhead.

Gantry Backstage
Setup time ~5 minutes Hours to days
Runtime dependencies None — single binary Node.js, PostgreSQL, often Kubernetes
Hosting Any server or Docker Kubernetes recommended
Embedded database SQLite, zero config External DB required
GitOps apply gantry apply built-in YAML ingestion via plugins

Features

  • Service Catalog — Typed, validated, and searchable entities for every service, API, team, and infrastructure component in your org
  • Self-Service Actions — Schema-driven forms so developers can trigger deployments or run workflows without opening a ticket
  • Plugin Ecosystem — First-party integrations for Kubernetes, GitHub, ArgoCD, Status Monitor, and Microsoft Teams
  • GitOps Native — Manage your catalog as YAML with gantry apply; diff, review, and roll back like code
  • Full-Text Search — Find any entity in milliseconds via SQLite FTS5 — no Elasticsearch required
  • Single Binary — CGO-free Go binary with an embedded React frontend, SQLite database, and all assets baked in
  • API Keys & JWT Auth — Browser sessions + Bearer token auth for CLI and automation; GitHub OAuth SSO optional
  • Audit Log — Every write operation is captured with before/after state and source IP
  • Prometheus Metrics — Built-in /metrics endpoint, no extra instrumentation needed

Quick Start

Install Script (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/go2engle/gantry/main/install.sh | sh
gantry serve

Docker

docker run -p 8080:8080 ghcr.io/go2engle/gantry:latest

Build from Source

git clone https://github.com/Go2Engle/Gantry.git && cd Gantry
make build
bin/gantry serve --dev

Open http://localhost:8080 — default login: admin / changeme

Full installation options: GantryIDP.dev/docs/getting-started/installation


CLI

The gantry binary is both server and client — think kubectl but for your developer platform.

# Start the server
gantry serve
gantry serve --port 9090 --dev
gantry serve --admin-password mysecret

# Apply entities from YAML — GitOps style
gantry apply -f services.yaml
gantry apply -f ./catalog/

# Query the catalog
gantry get services
gantry get Service payments-api -o yaml
gantry describe Service payments-api

# Check version / manage installation
gantry version
gantry upgrade
gantry uninstall

Configuration

All options can be set via environment variable, CLI flag, or a YAML config file.

Env Var Flag Default Description
GANTRY_PORT --port 8080 HTTP listen port
GANTRY_DB --db ./data/gantry.db SQLite path or postgres:// URL
GANTRY_DEV --dev false Permissive CORS + verbose logging
GANTRY_ADMIN_PASSWORD --admin-password changeme Initial admin password
GANTRY_JWT_SECRET auto-generated JWT signing secret
GANTRY_DATA_DIR ./data Data directory
GANTRY_ENCRYPTION_KEY auto-generated AES-256-GCM key for plugin secrets

Full configuration reference: GantryIDP.dev/docs/getting-started/configuration


API Reference

Auth uses Authorization: Bearer <token> for CLI/API clients, or an HttpOnly session cookie for browsers.

# Authenticate
curl -X POST localhost:8080/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"username":"admin","password":"changeme"}'

# Create a catalog entity
curl -X POST localhost:8080/api/v1/entities \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
    "kind": "Service",
    "metadata": { "name": "payments-api", "title": "Payments API", "owner": "team-payments" },
    "spec": { "type": "backend", "lifecycle": "production" }
  }'

# Search the catalog
curl "localhost:8080/api/v1/search?q=payments" -H "Authorization: Bearer $TOKEN"
Full endpoint reference
Method Path Description
GET /healthz Health check
GET /readyz Readiness check
GET /metrics Prometheus metrics
POST /api/v1/auth/login Login, returns JWT
POST /api/v1/auth/logout Clear session cookie
GET /api/v1/auth/me Current user info
GET /api/v1/apikeys List API keys
POST /api/v1/apikeys Create a scoped API key
DELETE /api/v1/apikeys/{id} Revoke an API key
GET /api/v1/entities List all entities
GET /api/v1/entities/{kind} List by kind
GET /api/v1/entities/{kind}/{name} Get entity
POST /api/v1/entities Create entity
PUT /api/v1/entities/{kind}/{name} Update entity
DELETE /api/v1/entities/{kind}/{name} Delete entity
GET /api/v1/search?q= Full-text search
GET /api/v1/schemas/{kind} JSON Schema for a kind
GET /api/v1/plugins List plugins and enabled state
POST /api/v1/actions/{name}/execute Execute an action
GET /api/v1/actions/{name}/runs List action runs
GET /api/v1/audit Audit log
GET /api/v1/graph/{kind}/{name} Entity dependency graph
GET /api/v1/ws WebSocket (real-time events)

Full API documentation: GantryIDP.dev/docs/api


Development

Prerequisites: Go 1.22+, Node.js 18+, npm

# Recommended: live reload for both backend and frontend
go install github.com/air-verse/air@latest
make dev-watch
# → Backend auto-rebuilds on .go changes (air)
# → Frontend hot-reloads at http://localhost:3000 (Vite HMR)

# Or run them separately:
bin/gantry serve --dev          # Go server on :8080
cd web && npm run dev           # Vite dev server on :3000

# Tests & checks
go test ./...
cd web && npx tsc --noEmit
golangci-lint run ./...

Contributing guide: GantryIDP.dev/docs/contributing


Star History

Star History Chart


License

Apache 2.0 — see LICENSE.

If Gantry is useful to you, give it a ⭐ — it helps others find it.

About

The Developer Platform That Just Works

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages