Bytebase: a self-hosted control plane for database changes and access
Database governance built for humans and agents — controlling changes and access across every major database.
At a glance
- What is it?
- Bytebase puts change review, RBAC, masking and audit logging in front of PostgreSQL, MySQL, MongoDB and a dozen other engines. Here is how it installs, where it fits, and where it adds friction.
- Who is it for?
- Adopt Bytebase if you run several database engines and need one place where schema changes, access grants and audit records live together, and if you are willing to operate a stateful service on port 8080 with a persistent volume. Do not adopt it if your problem is only running migration files from a CI job, or if you need a desktop SQL client for ad hoc querying.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Bytebase governs that a migration tool does not
Most teams already have something that applies SQL. What they usually lack is a record of who asked for the change, who approved it, what ran against production, and which human or agent read a column they should not have seen. Bytebase positions itself as that layer: the README describes it as "a single control plane between your users, humans and AI agents, and your databases", governing change management, access control and compliance.
The audience is stated in the README's use cases. Development teams get schema version control and CI/CD deployment. DBAs get centralized management across environments and organization-wide SQL standards. Security teams get column-level permissions, masking and audit trails. Those three groups normally buy three different products, which is the gap Bytebase is aiming at.
One caveat on scope. The repository carries two licence files, LICENSE and LICENSE.enterprise, and the top-level tree also has a backend, a frontend, a proto directory and helm-charts. That layout suggests a single binary with an enterprise tier rather than a clean open-core split at the repository boundary, and the README does not break down which features sit on which side. If your procurement depends on that answer, the README will not give it to you.
The middleware model: where Bytebase sits in the query path
The README ships a middleware diagram and a Venn diagram, and the middleware framing is the architecture in one image. Bytebase does not sit beside your databases as a passive catalogue. It sits between the client and the database, so a change request or a query passes through it before it reaches the engine.
That explains the feature list. Dynamic data masking is described as "column-level masking applied based on user role at query time", which only works if the query is evaluated somewhere that knows the role. Just-in-time access is described as time-boxed grants with automatic revocation, which needs a component holding the clock and the grant state. Audit logging needs the same position. A tool that only parses migration files cannot do any of those three things.
The Go module list backs up the breadth claim. It pulls in drivers and SDKs for BigQuery, Spanner, ClickHouse, Cassandra, DynamoDB, Azure Cosmos, AWS Secrets Manager, Google Secret Manager and Azure Key Vault, alongside the usual relational drivers. The README names PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, Redis, MariaDB, TiDB, Snowflake, ClickHouse, Spanner and OceanBase, and points to a supported-databases page for the rest. Treat that page as the authority: the README's own list ends with "and more", which is not a specification.
The cost of the middleware position is that Bytebase becomes part of your availability story. A migration tool that fails leaves your schema unchanged. A control plane that fails can leave a team unable to query. The README does not document a degraded mode.
Installing Bytebase with Docker and connecting a first database
The README's quick start gives two paths. Docker is the shorter one. The command below publishes port 8080 and mounts a host directory for state, so the instance survives a container restart.
docker run --init \
--name bytebase \
--publish 8080:8080 \
--volume ~/.bytebase/data:/var/opt/bytebase \
bytebase/bytebase:latestAfter the container starts, open http://localhost:8080. The README says to follow the setup wizard rather than describing its steps, so expect a first-run flow that creates the initial admin account before you reach the console.
On Kubernetes the README gives a single Helm command against the project's chart repository:
helm install bytebase bytebase/bytebaseThe README does not show the helm repo add step that would normally precede this, so check the chart source under helm-charts in the repository before running it. It also does not document which storage class the chart expects, or how to set the admin credentials declaratively.
If you want to build from source instead, the contributing section sets an environment variable and two shell aliases. The backend alias builds the Go server and runs it with a data directory and a debug flag; the frontend alias installs dependencies and starts the dev server.
export PG_URL=postgresql://bbdev@localhost/bbdev
alias r='go build -ldflags "-w -s" -p=16 -o ./bytebase-build/bytebase ./backend/bin/server/main.go && ./bytebase-build/bytebase --port 8080 --data . --debug'
alias y="pnpm --dir frontend i && pnpm --dir frontend dev"Note what that implies: developing Bytebase itself requires a PostgreSQL instance with a bbdev user and a bbdev database, plus pnpm for the frontend. The go.mod file pins Go 1.27.1, so a mismatched toolchain will fail before you reach the interesting code.
Where Bytebase becomes the wrong tool
The clearest mismatch is a team whose only problem is applying versioned SQL files in order. If you already run migrations from a pipeline and nobody needs an approval record, Bytebase adds a stateful service, a web console and a second source of truth about what has been deployed. The README's own comparison pages set it against Liquibase and Flyway, which is an admission that those tools overlap on the migration half of the problem.
The second mismatch is ad hoc querying. Bytebase includes a SQL editor with AI assistance, and the README compares it to DBeaver, DataGrip, Navicat and CloudBeaver. But a control plane is not a desktop client. If your analysts want a local window with saved connections and result export, the comparison pages exist because the choice is real, and the console is not trying to be that.
The third is operational. The Docker command mounts ~/.bytebase/data, which means you now own backup, restore and upgrade for that directory. The README does not document rollback, and it does not describe what happens to in-flight change requests during an upgrade. For a tool that sits in the query path, those are the questions to ask before production, not after.
Finally, the AI surface. The MCP server, text-to-SQL and the page agent are listed as features, and the repository includes agent instruction files such as AGENTS.md, CLAUDE.md and GEMINI.md. That tells you the project is being developed with agent workflows in mind. It does not tell you how mature those integrations are, and the README does not say.
Bytebase against Liquibase, Flyway and Atlas
The honest way to place Bytebase is to split the category in two. Liquibase and Flyway are migration runners. They parse changesets or versioned SQL, track a changelog table, and execute. They are libraries and CLIs. They have no opinion about who approved the change, no role model for readers, and no query-time masking, because they are not in the query path.
Bytebase covers that ground too. It has a GUI workflow for request, review, deploy and rollback, GitOps integration with GitHub and GitLab, and SQL review with more than 200 lint rules. But the parts that justify running a server are the ones the runners do not attempt: fine-grained RBAC at project and workspace level, just-in-time access with automatic revocation, dynamic masking by role, audit logging, and data classification. Codified policy through a Terraform provider and an API is the bridge for teams that want the governance layer expressed as code.
Atlas is the other comparison people search for. It is closer to Bytebase in ambition than Liquibase is, since it treats schema as code and inspects desired versus actual state, but the README does not include an Atlas comparison page, so the project itself has not staked out that position. Do not read a comparison into the absence of one.
The practical test is which half of the problem hurts. If deployments are the pain, a migration runner is lighter and you keep your existing review process in the pull request. If the pain is that nobody can answer who touched production last Tuesday, a runner will never answer it.
Maintenance, licensing and the upgrade bill
The repository is not archived, and the last push was on 2026-09-21. Releases have been coming at a steady cadence: 3.22.1 on 2026-09-10, 3.22.0 on 2026-08-28, and 3.21.1 on 2026-08-13. Three releases in roughly six weeks is a fast minor cadence, which cuts both ways. Fixes arrive quickly; so do new behaviours you have to absorb.
That cadence is the real upgrade cost. A control plane that gates production changes cannot be upgraded casually, and the README does not document a rollback procedure or a compatibility matrix between versions. The Docker volume at ~/.bytebase/data holds the state, so your upgrade plan has to include a snapshot of that directory before you pull a new image tag. The README's example uses bytebase/bytebase:latest, which is the tag you least want in production if you care about reproducibility.
On licensing, the repository contains LICENSE and LICENSE.enterprise, and the GitHub metadata reports the licence as NOASSERTION. That means GitHub could not classify it automatically, which is a signal to read both files rather than assume. The README does not state which features require the enterprise licence, and this article is not legal advice: if the answer matters, read LICENSE and LICENSE.enterprise in the repository and get your own counsel. The Terraform provider and API being listed under compliance suggests policy-as-code is a supported path, but the README does not say whether that path is complete in the open-source build.
The language mix is worth noting for contributors. The backend is Go and the frontend is a pnpm workspace, so a change that spans the API and the console touches two toolchains and the proto definitions in proto/.
Editorial conclusion
Adopt Bytebase if you run several database engines and need one place where schema changes, access grants and audit records live together, and if you are willing to operate a stateful service on port 8080 with a persistent volume. Do not adopt it if your problem is only running migration files from a CI job, or if you need a desktop SQL client for ad hoc querying. Before rolling it out, verify three things: that your engine appears on the supported-databases page, which parts of the codebase fall under LICENSE versus LICENSE.enterprise, and whether the MCP server is the integration path your agents actually need.
Frequently asked questions
What is Bytebase?
The README describes it as an open-source database governance platform that acts as a single control plane between users and databases, governing change management, access control and compliance. It supports PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, Redis, MariaDB, TiDB, Snowflake, ClickHouse, Spanner and OceanBase, among others.
How do I install Bytebase?
The README gives a Docker command that publishes port 8080 and mounts ~/.bytebase/data as a volume, and a Helm command for Kubernetes. After starting it, you visit http://localhost:8080 and follow the setup wizard.
Is Bytebase free?
The repository contains both LICENSE and LICENSE.enterprise files, and GitHub reports the licence as NOASSERTION, so it could not be classified automatically. The README does not state which features fall under which licence, so read both files before deciding.
What are the key differences between Bytebase and Liquibase?
Liquibase is a migration runner, while Bytebase adds a control plane around the migration: GUI review workflows, fine-grained RBAC, just-in-time access, dynamic data masking and audit logging. The README links to a dedicated comparison page for the two.
How does Bytebase compare with Flyway?
Flyway applies versioned migrations; Bytebase also handles change request, review and deploy through a web console, plus GitOps integration and over 200 SQL lint rules. The README links to a Bytebase vs Flyway comparison page.
How does Bytebase differ from DBeaver or CloudBeaver?
DBeaver and CloudBeaver are SQL clients, while Bytebase is positioned as a governance layer that sits between users and databases. The README links to separate comparison pages for DBeaver, CloudBeaver, DataGrip and Navicat.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/bytebase-bytebase)