π Open-sourced β Learn more
Likes, recent views, followsβlook simple, but get complex as you scale, and end up rebuilt again and again.
Actionbase is a database for serving these user interactions at scale. Currently backed by HBase, built at Kakao, handling millions of requests per minute at peak for years.
docker run -it --pull always ghcr.io/kakao/actionbase:standaloneThis runs the Actionbase server in the background and the CLI in the foreground.
Write: Insert 3 edges with metadata (via preset)
actionbase> load preset likes
β 3 edges inserted
β - Alice β Phone
β - Alice β Laptop
β - Bob β Phone
At write time, Actionbase precomputes everything for readsβno aggregation needed at query time.
Read: Query precomputed results
actionbase(likes:likes)> get --source Alice --target Phone
β β GET /graph/v3/databases/likes/tables/likes/edges/get?source=Alice&target=Phone
β β 200 OK {"edges":[{"version":1737377177245,"source":"Alice","ta...
β
β The edge is found: [Alice -> Phone]
β |---------------|--------|--------|---------------------------|
β | VERSION | SOURCE | TARGET | PROPERTIES |
β |---------------|--------|--------|---------------------------|
β | 1737377177245 | Alice | Phone | created_at: 1737377177245 |
β |---------------|--------|--------|---------------------------|
actionbase(likes:likes)> scan --index created_at_desc --start Alice --direction OUT
β β GET /graph/v3/databases/likes/tables/likes/edges/scan/created_at_desc?direction=OUT&limit=25&start=Alice
β β 200 OK {"edges":[{"version":1737377177297,"source":"Alice","ta...
β
β The 2 edges found (offset: -, hasNext: false)
β |---|---------------|--------|--------|---------------------------|
β | # | VERSION | SOURCE | TARGET | PROPERTIES |
β |---|---------------|--------|--------|---------------------------|
β | 1 | 1737377177297 | Alice | Laptop | created_at: 1737377177297 |
β | 2 | 1737377177245 | Alice | Phone | created_at: 1737377177245 |
β |---|---------------|--------|--------|---------------------------|
actionbase(likes:likes)> count --start Alice --direction OUT
β β GET /graph/v3/databases/likes/tables/likes/edges/counts?start=Alice&direction=OUT
β β 200 OK {"counts":[{"start":"Alice","direction":"OUT","count":2...
β
β The count of 1 edges found
β |---|-------|-----------|-------|
β | # | START | DIRECTION | COUNT |
β |---|-------|-----------|-------|
β | 1 | Alice | OUT | 2 |
β |---|-------|-----------|-------|
See Quick Start for more details, or Build Your Social Media App with Actionbase to go deeper.
Actionbase serves interaction-derived data that powers feeds, product listings, recommendations, and other user-facing surfaces.
Interactions are modeled as: who did what to which target
At write time, Actionbase precomputes everything needed for readsβaccurate counts, consistent toggles, and ordering information for sorting and querying. At read time, there's no aggregation or additional computation. You simply read the precomputed results as they are.
Supported operations focus on high-frequency access patterns:
- Edge lookups (GET, multi-get)
- Edge counts (COUNT)
- Indexed edge scans (SCAN)
Use Actionbase when:
- A single database no longer scales for your workload
- Interaction features are rebuilt repeatedly across teams
- You need predictable read latency without read-time computation
If a single database can handle your workload, that's the better choice.
Actionbase writes to HBase for storage and emits a WAL to Kafka for recovery, replay, and downstream pipelines. HBase provides strong durability and horizontal scalability.
Client β(REST API)β> Actionbase ββ> HBase (Storage for user interactions)
β
βββ> JDBC (Metastore, to be consolidated to HBase)
β
βββ> Kafka (WAL/CDC) ββ> Downstream Pipelines
Additional storage backends are planned for small to mid-size deployments.
- core β Data model, mutation, query, encoding logic (Java, Kotlin)
- engine β Storage and messaging bindings (Kotlin)
- server β REST API server (Kotlin, Spring WebFlux)
- pipeline (planned) β Bulk loading and CDC processing (Scala, Spark)
Early open-source preparation phase. The first release focuses on introducing core concepts and hands-on guides. Production installation, operations guides, and additional components will be released over time.
We welcome contributions. See our Contributing Guide.
For questions, ideas, or feedback, join us on GitHub Discussions.
- Documentation
- Actionbase at if(kakaoAI) 2024 (YouTube, Korean)
This software is licensed under the Apache 2 license.
Copyright 2026 Kakao Corp. http://www.kakaocorp.com
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.