veegres/ivory

Ivory is a database cluster management tool that puts control in your pocket. It gives you a unified UI for cluster management, a query builder, container control, and VM monitoring — so you can manage and troubleshoot your infrastructure from anywhere, even your phone.

Go

278

1,175 commits

updated Sep 29, 2026

See the code

See what people are saying

SourceMessageScoreDate

Ivory 2.0: open-source, self-hosted UI for managing database clusters. It started as Postgres/Patroni-only and now supports MongoDB, Redis, ClickHouse, ZooKeeper and etcd (r/selfhosted)

Hi r/selfhosted, I'm the creator and maintainer of **Ivory**, an open-source web UI for managing database clusters that you run yourself. It started years ago as a tool for Postgres clusters running Patroni, and I've just released **v2.0.0**, the biggest change so far. Since this is a self-hosting…

0

Oct 4, 2026

README

Ivory - open source database cluster management UI

Ivory

Deploy it. Watch it. Fix it. Anywhere.

Open-source web UI for high-availability database clusters — PostgreSQL & Patroni, etcd, Redis, ClickHouse, MongoDB and ZooKeeper.

deployment stable version latest version docker pulls

Ivory is a self-hosted, open-source database cluster management tool that puts control in your pocket. One web UI to deploy a cluster, watch its health and replication lag, run a switchover or failover, open a SQL query console, control containers over SSH, and read VM metrics and logs — from your browser or your phone, without dropping into the CLI for every task.

It is built around the concept of a Keeper — a generic management layer responsible for cluster manipulations. A Keeper can be a standalone agent running beside the database, or a management system embedded directly in the database engine. Patroni is the Keeper implementation for PostgreSQL, and the one Ivory was originally built around.

Ivory is designed for DBAs, SRE and backend developers who operate high-availability database clusters and want a single UI to run, troubleshoot and deploy them — including from a phone, when you are away from your laptop. It runs as a local tool on your machine or as a shared service on a VM for team use, ships as a single Docker container, and stores everything itself: no agent on your hosts, no orchestrator, no cloud account.

Contents — Features · Get started · Supported databases · Documentation · FAQ · Contributing


🌟 Support This Project! 🌟

If you found this project helpful, interesting, or inspiring, please consider giving it a star ⭐! Your support helps:

✅ Increase visibility – More people can discover and benefit from this project.
✅ Boost motivation – It encourages us to keep improving and adding new features.
✅ Show appreciation – A small gesture that means a lot to open-source creators!

Thank you for being part of this journey! 🚀


Vision: Beyond Postgres

Ivory started as a Postgres/Patroni tool. We're working towards a more pluggable architecture, where support for other databases and HA tools could be added as a plugin, instead of being baked into the core. v2 is the first step of that rework:

Version
v1Hard-wired to Patroni and Postgres, with Postgres-centric node management and no mobile support.
v2Pluggable Keeper and database engines — the goal is to manage different databases by implementing a simple plugin for each, instead of baking their behaviour into the core. Node management is now VM-centric, with nodes modeled as Hardware + Software behind a generic Platform abstraction (on-prem Docker over SSH today, Kubernetes/OpenShift planned). The UI is now mobile friendly, so you can check on and operate your clusters from your phone.

Features

Deployment — spin up a high-availability cluster over plain SSH

  • Deploying a cluster — over SSH, with no orchestrator or agent
  • Deploying a single cluster node — add or rebuild one node of an existing cluster
  • Deployment templates — the command that runs on each node, saved and reusable
  • Default templates — ready to deploy for every supported database, in two variants:
    • Multi host — one node per machine, the usual layout for a real cluster
    • Single host — the whole cluster on one machine, for trying it out locally or on a test VM

Cluster management — HA operations from the browser

Node operations — the machine and the container behind each node

Database troubleshooting — query console and maintenance tools

  • Query builder — saved SQL queries for monitoring and diagnostics
  • Database tools — engine-specific maintenance tools, run as background jobs with live output:
    • Postgres — pgcompacttable, reduces table and index bloat without heavy locks

Access control and operations

  • Authentication — Basic, LDAP and OIDC/SSO, with granular per-user permissions
  • Configuration — data persistence, upgrades, TLS, reverse-proxy sub-path

Get started

Ivory ships as one Docker image with no external dependencies.

  1. Start the docker container
    • 🐳 Docker Hub docker run -p 80:80 --restart always veegres/ivory
    • 📦 GitHub Container registry docker run -p 80:80 --restart always ghcr.io/veegres/ivory
  2. Go to http://localhost:80
  3. Complete the initial setup wizard (authentication, secret key)
  4. Add your first cluster — manual (all node addresses), auto-detect (one address, Ivory finds the rest), or deploy a new one from a template
  5. Start monitoring

Ivory web UI showing a PostgreSQL Patroni cluster overview with node roles and replication lag


Supported databases and keepers

KeeperDatabaseStageWhy
PatroniPostgresSTABLEThe Keeper Ivory was originally built around
PostgresPostgresSTABLENot everyone needs HA — sometimes you just want to manage a plain Postgres
ETCDETCDBETAPatroni relies on etcd as a DCS, so managing it directly made sense too
RedisRedisBETAA widely used cache/store that often sits right next to the databases Ivory already manages
ClickHouseClickHouseBETAA popular analytics database and a natural next step for Ivory's plugin set
ZooKeeperZooKeeperBETAClickHouse needs real ZooKeeper protocol, not etcd, to coordinate replication — deployable as its own ensemble and usable as the external DCS other keepers point at
MongoDBMongoDBBETAA widely used document store with its own native replica-set HA, a natural fit next to Ivory's other native (non-orchestrated) keepers

P.S. these particular databases weren't picked from a grand roadmap — they're mainly what the maintainer runs day to day, and Ivory exists to simplify that routine first. Broader support grows from there.


Documentation

PageWhat's in it
ClustersAdding clusters manually, auto-detection, tags and filtering
OverviewWhat a Keeper is, cluster health, HA operations
NodeSystem, Container, Keeper, Database and Tools tabs
DeploymentDeploy a cluster or one node, deployment templates, variables
AuthenticationBasic / LDAP / OIDC, users, superusers, permissions
ConfigurationData persistence, upgrades, environment variables, TLS, sub-path
pgcompacttableReducing Postgres table and index bloat from the UI

FAQ

How do I upgrade to a new version? Back up your configuration from the Settings page and restore it in the new version — the format is backward compatible. Mounting the data directory between containers works too, but reliably only for patch releases. See Configuration → Upgrading.

Where does Ivory store its data? In /opt/ivory/data, backed by a Docker volume. Bind-mount it, or use --volumes-from, to keep data across different containers. See Configuration → Data and Persistence.

Does Ivory need an agent on my database hosts? No. It talks to the Keeper's API, to the database directly, and to the host over SSH.

How does authentication work? Ivory runs with or without it. With it, everybody who signs in is an Ivory user first — you register a username and choose whether they sign in with a password, LDAP or SSO, and a password is always set by the person themselves through a one-time link. See Authentication.

Are my credentials safe? Every secret — SSH keys, database passwords, LDAP and OIDC client secrets — is encrypted with the secret word you choose during setup.

Can I run Ivory behind a reverse proxy or under HTTPS? Yes — IVORY_URL_PATH for a sub-path, IVORY_CERT_FILE_PATH and IVORY_CERT_KEY_FILE_PATH for TLS. See Configuration → Environment Variables.

Does it work on a phone? Yes. The v2 UI is mobile friendly, so you can check cluster health and run HA operations from your phone.


Contribution

If you're interested in contributing to the Ivory project, consider these options:


Ivory is an open-source, self-hosted GUI and web dashboard for database cluster management and monitoring: PostgreSQL high availability with Patroni, plain PostgreSQL, etcd, Redis, ClickHouse, MongoDB and ZooKeeper — covering cluster deployment over SSH, failover and switchover, replication lag monitoring, SQL query console, Docker container management and VM metrics, in a single Docker container.

clickhouse
cluster-management
database-management
etcd
gui
management
mongodb
patroni
patroni-management
patroni-ui
postgres
redis
ui
web-ui
zookeeper

veegres/ivory

Ivory is a database cluster management tool that puts control in your pocket. It gives you a unified UI for cluster management, a query builder, container control, and VM monitoring — so you can manage and troubleshoot your infrastructure from anywhere, even your phone.

Go

278

1,175 commits

updated Sep 29, 2026

See the code

See what people are saying

SourceMessageScoreDate

Ivory 2.0: open-source, self-hosted UI for managing database clusters. It started as Postgres/Patroni-only and now supports MongoDB, Redis, ClickHouse, ZooKeeper and etcd (r/selfhosted)

Hi r/selfhosted, I'm the creator and maintainer of **Ivory**, an open-source web UI for managing database clusters that you run yourself. It started years ago as a tool for Postgres clusters running Patroni, and I've just released **v2.0.0**, the biggest change so far. Since this is a self-hosting…

0

Oct 4, 2026

README

Ivory - open source database cluster management UI

Ivory

Deploy it. Watch it. Fix it. Anywhere.

Open-source web UI for high-availability database clusters — PostgreSQL & Patroni, etcd, Redis, ClickHouse, MongoDB and ZooKeeper.

deployment stable version latest version docker pulls

Ivory is a self-hosted, open-source database cluster management tool that puts control in your pocket. One web UI to deploy a cluster, watch its health and replication lag, run a switchover or failover, open a SQL query console, control containers over SSH, and read VM metrics and logs — from your browser or your phone, without dropping into the CLI for every task.

It is built around the concept of a Keeper — a generic management layer responsible for cluster manipulations. A Keeper can be a standalone agent running beside the database, or a management system embedded directly in the database engine. Patroni is the Keeper implementation for PostgreSQL, and the one Ivory was originally built around.

Ivory is designed for DBAs, SRE and backend developers who operate high-availability database clusters and want a single UI to run, troubleshoot and deploy them — including from a phone, when you are away from your laptop. It runs as a local tool on your machine or as a shared service on a VM for team use, ships as a single Docker container, and stores everything itself: no agent on your hosts, no orchestrator, no cloud account.

Contents — Features · Get started · Supported databases · Documentation · FAQ · Contributing


🌟 Support This Project! 🌟

If you found this project helpful, interesting, or inspiring, please consider giving it a star ⭐! Your support helps:

✅ Increase visibility – More people can discover and benefit from this project.
✅ Boost motivation – It encourages us to keep improving and adding new features.
✅ Show appreciation – A small gesture that means a lot to open-source creators!

Thank you for being part of this journey! 🚀


Vision: Beyond Postgres

Ivory started as a Postgres/Patroni tool. We're working towards a more pluggable architecture, where support for other databases and HA tools could be added as a plugin, instead of being baked into the core. v2 is the first step of that rework:

Version
v1Hard-wired to Patroni and Postgres, with Postgres-centric node management and no mobile support.
v2Pluggable Keeper and database engines — the goal is to manage different databases by implementing a simple plugin for each, instead of baking their behaviour into the core. Node management is now VM-centric, with nodes modeled as Hardware + Software behind a generic Platform abstraction (on-prem Docker over SSH today, Kubernetes/OpenShift planned). The UI is now mobile friendly, so you can check on and operate your clusters from your phone.

Features

Deployment — spin up a high-availability cluster over plain SSH

  • Deploying a cluster — over SSH, with no orchestrator or agent
  • Deploying a single cluster node — add or rebuild one node of an existing cluster
  • Deployment templates — the command that runs on each node, saved and reusable
  • Default templates — ready to deploy for every supported database, in two variants:
    • Multi host — one node per machine, the usual layout for a real cluster
    • Single host — the whole cluster on one machine, for trying it out locally or on a test VM

Cluster management — HA operations from the browser

Node operations — the machine and the container behind each node

Database troubleshooting — query console and maintenance tools

  • Query builder — saved SQL queries for monitoring and diagnostics
  • Database tools — engine-specific maintenance tools, run as background jobs with live output:
    • Postgres — pgcompacttable, reduces table and index bloat without heavy locks

Access control and operations

  • Authentication — Basic, LDAP and OIDC/SSO, with granular per-user permissions
  • Configuration — data persistence, upgrades, TLS, reverse-proxy sub-path

Get started

Ivory ships as one Docker image with no external dependencies.

  1. Start the docker container
    • 🐳 Docker Hub docker run -p 80:80 --restart always veegres/ivory
    • 📦 GitHub Container registry docker run -p 80:80 --restart always ghcr.io/veegres/ivory
  2. Go to http://localhost:80
  3. Complete the initial setup wizard (authentication, secret key)
  4. Add your first cluster — manual (all node addresses), auto-detect (one address, Ivory finds the rest), or deploy a new one from a template
  5. Start monitoring

Ivory web UI showing a PostgreSQL Patroni cluster overview with node roles and replication lag


Supported databases and keepers

KeeperDatabaseStageWhy
PatroniPostgresSTABLEThe Keeper Ivory was originally built around
PostgresPostgresSTABLENot everyone needs HA — sometimes you just want to manage a plain Postgres
ETCDETCDBETAPatroni relies on etcd as a DCS, so managing it directly made sense too
RedisRedisBETAA widely used cache/store that often sits right next to the databases Ivory already manages
ClickHouseClickHouseBETAA popular analytics database and a natural next step for Ivory's plugin set
ZooKeeperZooKeeperBETAClickHouse needs real ZooKeeper protocol, not etcd, to coordinate replication — deployable as its own ensemble and usable as the external DCS other keepers point at
MongoDBMongoDBBETAA widely used document store with its own native replica-set HA, a natural fit next to Ivory's other native (non-orchestrated) keepers

P.S. these particular databases weren't picked from a grand roadmap — they're mainly what the maintainer runs day to day, and Ivory exists to simplify that routine first. Broader support grows from there.


Documentation

PageWhat's in it
ClustersAdding clusters manually, auto-detection, tags and filtering
OverviewWhat a Keeper is, cluster health, HA operations
NodeSystem, Container, Keeper, Database and Tools tabs
DeploymentDeploy a cluster or one node, deployment templates, variables
AuthenticationBasic / LDAP / OIDC, users, superusers, permissions
ConfigurationData persistence, upgrades, environment variables, TLS, sub-path
pgcompacttableReducing Postgres table and index bloat from the UI

FAQ

How do I upgrade to a new version? Back up your configuration from the Settings page and restore it in the new version — the format is backward compatible. Mounting the data directory between containers works too, but reliably only for patch releases. See Configuration → Upgrading.

Where does Ivory store its data? In /opt/ivory/data, backed by a Docker volume. Bind-mount it, or use --volumes-from, to keep data across different containers. See Configuration → Data and Persistence.

Does Ivory need an agent on my database hosts? No. It talks to the Keeper's API, to the database directly, and to the host over SSH.

How does authentication work? Ivory runs with or without it. With it, everybody who signs in is an Ivory user first — you register a username and choose whether they sign in with a password, LDAP or SSO, and a password is always set by the person themselves through a one-time link. See Authentication.

Are my credentials safe? Every secret — SSH keys, database passwords, LDAP and OIDC client secrets — is encrypted with the secret word you choose during setup.

Can I run Ivory behind a reverse proxy or under HTTPS? Yes — IVORY_URL_PATH for a sub-path, IVORY_CERT_FILE_PATH and IVORY_CERT_KEY_FILE_PATH for TLS. See Configuration → Environment Variables.

Does it work on a phone? Yes. The v2 UI is mobile friendly, so you can check cluster health and run HA operations from your phone.


Contribution

If you're interested in contributing to the Ivory project, consider these options:


Ivory is an open-source, self-hosted GUI and web dashboard for database cluster management and monitoring: PostgreSQL high availability with Patroni, plain PostgreSQL, etcd, Redis, ClickHouse, MongoDB and ZooKeeper — covering cluster deployment over SSH, failover and switchover, replication lag monitoring, SQL query console, Docker container management and VM metrics, in a single Docker container.

clickhouse
cluster-management
database-management
etcd
gui
management
mongodb
patroni
patroni-management
patroni-ui
postgres
redis
ui
web-ui
zookeeper

Languages

Go

62.0%

TypeScript

33.7%

HTML

3.8%