Library / SDK
apolloconfig/apollo avatar
apolloconfig/apollo

Apollo: A Configuration Center That Keeps Its Only External Dependency Down to MySQL

Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.

29,807 stars10,156 forksJavaApache-2.0

At a glance

What is it?
Apollo is a Java and Spring Boot configuration management system for microservices, with a Java and .Net SDK, HTTP APIs, and release versioning. Its selling point is centralized config across environments and clusters, but its operational weight and its MySQL dependency are the things to weigh before adopting it.
Who is it for?
Apollo fits teams running many Java or Spring Boot services across several environments and clusters who need one place to edit, approve and roll back configuration, and who already run MySQL.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 10 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The Problem Apollo Targets: Config That Changes Faster Than the Deploy

Configuration lives in different places in different teams. A properties file baked into a jar, a config map edited by hand, a value someone changes in a database. Apollo's stated purpose is to centrally manage the configurations of different applications and different clusters, and the README frames it as suitable for microservice configuration management scenarios. The unit of organization is the namespace, which the documentation describes as a way to let multiple applications share the same configurations while still allowing each to customize them. That matters when twenty services read the same upstream endpoint and one of them needs an override.

The audience is narrower than the feature list suggests. Apollo is written in Java and its server side runs on Spring Boot and Spring Cloud. The README notes that the Java SDK does not rely on any framework and can run in all Java runtime environments, with good support for Spring and Spring Boot, and that the .Net SDK likewise has no framework dependency. Non-Java and non-.Net applications are expected to integrate through the HTTP APIs, and the README points to third party SDKs for Golang, Python, NodeJS, PHP and C. If your estate is mostly JVM services with a Spring dependency injection container, the fit is direct. If it is mostly functions or edge runtimes, you are on the HTTP path and carrying more integration work yourself.

How a Config Change Reaches a Running Instance

The mechanism the README commits to is a push model with a one second target. After a user modifies a configuration and releases it in Apollo, the SDK receives the latest configurations in real time, described as one second, and notifies the application. That is the hot release path, and it is the reason the project exists rather than a shared file on disk.

Release is a distinct operation from editing. The README states that the management of configurations is divided into two operations, editing and publishing, and that this separation reduces human errors. Every release is versioned, which the documentation ties directly to rollback support. There is also grayscale release: after clicking release, the configuration takes effect only for some application instances, and after a period of observation it can be pushed to all instances. That is a real operational lever, and it is the feature that distinguishes Apollo from a plain key-value store with an admin page.

The server side is built on Spring Boot and Spring Cloud, and the README says it can run without installing an additional application container such as Tomcat. The only external dependency named is MySQL. Apollo also exposes an open platform API, and the README is explicit about why: Apollo itself will not put too many restrictions on configuration modification, as long as it conforms to the basic format it can be saved, so applications that need format validation (the README gives xml, json, and a database credential check as examples) are expected to validate on their own side and write through the open APIs, which carry their own authorization and permission controls.

Getting It Running: Java, MySQL, and the Packaging Script

The README states the deployment condition plainly: Apollo can run as long as Java and MySQL are installed. There is no ZooKeeper, no Redis, no message broker in the dependency list. That constraint is deliberate. The README argues that as an infrastructure service the configuration center has very high availability requirements, which forces Apollo to rely on external dependencies as little as possible.

For a first look, the README points to two documented paths, the Quick Start and the Docker Quick Start, both on apolloconfig.com. It does not inline the commands, so the exact ports, database initialization and admin credentials come from those pages rather than from the repository README. What the README does describe is the packaging script: Apollo provides one that generates all required installation packages with a single invocation and supports customization of runtime parameters. For production, the practical sequence is to provision MySQL, run the schema, build or download the distribution, and then configure the portal and the config service against that database.

On the client side, Java applications depend on the com.ctrip.framework.apollo apollo-client artifact, which is published to Maven Central, and the README lists Spring Placeholder, Annotation and Spring Boot ConfigurationProperties as supported integration styles, noting a Spring 3.1.1+ requirement. .Net applications use the .Net SDK. Everything else goes through the HTTP APIs. The README also links a security best practices page under the user guide, which is worth reading before exposing the portal, since the README does not enumerate the authentication defaults itself.

The MySQL Dependency Is the Availability Story

The README presents MySQL as a simplification, and for deployment it is. It is also the single point that determines whether Apollo is up. The documentation's own framing is that high availability requirements forced minimal external dependencies, but minimal is not zero. A configuration center that cannot reach its database cannot serve configuration, and every service that depends on it for startup configuration inherits that failure. The README does not describe a read-only degraded mode or a local fallback in the material available here, so the availability engineering belongs to your MySQL deployment, not to Apollo.

A second constraint is format validation. The README is candid that Apollo will not put too many restrictions on configuration modification, and that it saves anything conforming to the basic format. Teams accustomed to a config system that rejects malformed YAML or JSON at save time will find that Apollo accepts it and lets the client fail later. The documented escape hatch is the open platform API, where the application performs its own validation before writing. That is a design choice with a cost: correctness moves into your code.

A third is scope. The README describes authorization management, release approval and operation audit as features, and a global search that finds which application, environment, cluster and namespace uses a given configuration value. Those are administrative capabilities aimed at organizations with several teams sharing one config plane. A single developer with one service gets the schema, the portal, the database and the deployment work without much of the benefit.

Where Apollo Sits Next to Spring Cloud Config

The obvious comparison is Spring Cloud Config, which the README names as part of Apollo's own server stack. Spring Cloud Config keeps configuration in a Git repository and serves it over HTTP, with the repository as the source of truth and Git history as the audit trail. Apollo inverts that: the source of truth is a MySQL database, the portal is the editing surface, and versioning is a first class release concept inside the product rather than a property of an external version control system.

The practical difference shows up in three places. Rollback in Apollo is a product operation against a release record; in a Git backed system it is a commit revert plus a refresh. Grayscale release, where a configuration takes effect for some instances before all of them, is described in the Apollo README as a built in feature; the Git backed approach has no equivalent without additional machinery. And the editing and publishing split, with approval and audit, is an Apollo concern; in the Git model, review happens through the pull request process the team already uses. Neither is strictly better. If your team already governs change through code review and wants configuration to travel the same path, the Git model is fewer moving parts. If you need non-engineers to edit values safely and you need staged rollout, Apollo's model is the one that ships with those controls.

Versioning, Upgrades and the Apache-2.0 Licence

The release cadence visible in the repository is regular: v2.5.0 in February 2026, v2.5.1 in March, v2.5.2 in July, with the default branch receiving pushes as recently as September 2026. The project is not archived. That cadence matters because Apollo is infrastructure that other services start against, so an upgrade is a coordinated event rather than a library bump. The README does not document an in place upgrade procedure or a compatibility matrix between client and server versions in the material provided, so the upgrade path has to be confirmed from the release notes and the deployment documentation for the specific version you run. Treat the server and the apollo-client artifact as a pair to be versioned together, and check the release notes for the version you are moving to before you move.

Apollo is licensed under Apache-2.0. That is a permissive licence, which generally means you can use, modify and distribute the software, including in commercial settings, subject to the terms of the licence text itself. Nothing here is legal advice, and the obligations that apply to your distribution model, particularly around notices and any modified files, are questions for your own counsel. The licence identifier is stated in the repository and in the badge at the top of the README.

Who Should Adopt Apollo, and What to Check First

Adopt Apollo if you run multiple JVM services across more than one environment or cluster, you already operate MySQL, and you want configuration edits, approvals, versioned releases and rollback in one place with a one second propagation target. The namespace model and the shared configuration pattern are the parts that pay off as the number of services grows. The grayscale release feature is the one that is hard to replicate cheaply elsewhere.

Do not adopt it for a single service, for a stack where adding a Java server and a MySQL instance is disproportionate, or if you need the config system itself to reject malformed values on save. The README states that Apollo keeps format restrictions minimal by design and expects applications with stricter needs to validate and write through the open APIs. If that validation is a requirement you cannot implement on the client side, Apollo is the wrong layer for it.

Before committing, verify three things against the documentation for your target release. First, the MySQL version and schema setup steps, since that is the only external dependency and the availability ceiling. Second, the client integration for every runtime you deploy, choosing between the Java SDK, the .Net SDK and the HTTP APIs rather than assuming one covers all. Third, the security configuration described in the security best practices page, because the portal is an administrative surface with edit and publish rights over every connected application. The v2.5.x line is where a new deployment should start, with the client and server versions aligned at that release.

Editorial conclusion

Apollo fits teams running many Java or Spring Boot services across several environments and clusters who need one place to edit, approve and roll back configuration, and who already run MySQL. It is the wrong tool for a single small application, for stacks that cannot host a Java service plus a database, or for anyone expecting Apollo to validate arbitrary config formats on save, since the README states it will not put too many restrictions on modification as long as the basic format is followed. Before adopting, verify two things: that the release you plan to run matches the documented MySQL version and schema migration steps, and that your client integration path (Java SDK, .Net SDK, or the HTTP APIs) covers every runtime you actually deploy.

Official sources

  1. apolloconfig/apollo on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes