- Sysadmins and DevOps teams managing physical servers and VMs with Puppet, Bolt, Ansible, or SSH
- Puppet Open Source users who want a web UI without Puppet Enterprise
- Mixed-tool shops running both Puppet and Ansible, who want one interface instead of two
- Homelabbers who just want a web frontend for their servers (SSH-only works fine)
If you manage "classic infrastructure" — bare metal, VMs, Kubernetes nodes — Pabawi is built for you.
- Inventory & facts from every connected source, merged and deduplicated across integrations
- Execution — ad-hoc commands, Bolt tasks, package management, with a security whitelist, live streaming output, and history/re-run
- Provisioning — VM/container lifecycle on Proxmox, AWS EC2, and Azure
- Puppet observability — reports, catalog inspection with cross-environment diff, resource event tracking, Hiera data browsing
- Tracking — per-node and global journal, audit trail, RBAC with multiple users
- AI-ready — embedded MCP server exposing inventory, facts, reports, and catalogs read-only to LLM clients
See the Screenshots, a sample MCP session recording, the User Guide for full feature walkthroughs, and Architecture for how it's built.
Requires Node.js 24 LTS and npm 11 (or a container engine for Docker). Integration CLIs (Bolt, Ansible, Puppet/OpenVox agent) are only needed for the integrations you enable — see per-integration setup guides.
Quick start (interactive setup script — checks prerequisites, generates backend/.env, installs dependencies, starts the app):
git clone https://github.com/example42/pabawi
cd pabawi
./scripts/setup.shManual setup:
git clone https://github.com/example42/pabawi
cd pabawi
npm run install:all # installs deps, rebuilds native modules
cp backend/.env.example backend/.env # then edit backend/.env
npm run dev:fullstack # build + serve everything on port 3000First admin enrollment requires a bootstrap token — see Initial Setup before exposing a fresh install.
Docker (core image):
mkdir pabawi && cd pabawi
vi .env # paths are relative to the container
docker run -d --name pabawi --user "$(id -u):1001" \
-p 127.0.0.1:3000:3000 \
-v "$(pwd)/pabawi:/pabawi" --env-file ".env" \
example42/pabawi:latestThe core image contains the Pabawi application only. Use
example42/pabawi:batteries when Bolt, Ansible, Puppet/OpenVox, or OpenSSH
commands must run inside the container.
Full instructions and Kubernetes/Helm deployment: Docker Guide, Kubernetes Guide.
Upgrading: git fetch --tags && git checkout v<VERSION> && npm run install:all && npm run build (or docker pull/helm upgrade — see the Upgrade Guide). Migrations run automatically; back up your database first and check the CHANGELOG.
Everything lives in backend/.env — generated by the setup script, templated at backend/.env.example, or assembled piece by piece from the in-app per-integration setup wizards. All integrations are optional; enable only what you use.
| Area | Variables |
|---|---|
| Core | PORT, HOST, LOG_LEVEL |
| Auth | JWT_SECRET, PABAWI_BOOTSTRAP_TOKEN |
| Integrations | BOLT_*, PUPPETDB_*, PUPPETSERVER_*, HIERA_*, ANSIBLE_*, SSH_*, CHECKMK_*, PROXMOX_*, AWS_*, AZURE_* |
| Security | COMMAND_WHITELIST*, CONCURRENT_EXECUTION_LIMIT |
| MCP | MCP_ENABLED |
Full reference: Configuration Guide. Architecture and code layout: Architecture.
Bolt · Ansible · SSH · PuppetDB · Puppetserver · Hiera · Checkmk · Proxmox · AWS · Azure · Entra ID SSO
- Documentation: User Guide · Architecture · API Reference · Permissions & RBAC · MCP Server
- Locked out? Reset a local password from the shell:
npm run reset-password --workspace=backend -- --username admin(details) - Troubleshooting: Troubleshooting Guide — for help beyond that, enable expert mode for diagnostics and open a GitHub issue with version info, sanitized config, and reproduction steps
- Development & contributing: Development Guide
- Version history: CHANGELOG
- License: Apache License 2.0
- Built on: Puppet/OpenVox, Bolt, PuppetDB, Svelte 5, Node.js, TypeScript, SQLite, PostgreSQL, and the Puppet community