One database for user–user, user–item, and item–item interactions — precomputed at write time, served as simple lookups.
1M+ req/min in production at Kakao. Built on HBase.
Documentation · Open-sourced · Why we built this · Production stories
Follows, likes, recent views, related content — they are all interaction data. They look simple, but at scale, real-time counts, toggle consistency, and ordered relationship reads turn into bottlenecks, and teams end up rebuilding caches, indexes, and dual-write pipelines from scratch every time.
Actionbase consolidates these into one database for interactions. Every interaction is expressed in the same model — source → action → target — and the combination of source and target naturally yields three axes:
- User–User (U2U) — follow/unfollow, follower/following counts, timeline scans
- User–Item (U2I) — likes/bookmarks, view history, bidirectional counters
- Item–Item (I2I) — related products, similar-content graphs, and other precomputed item-to-item relations
All three axes have run in production at Kakao at over 1M req/min since 2024.
1. Run
docker run -it ghcr.io/kakao/actionbase:standaloneRuns server (port 8080) in the background, CLI (actionbase>) in the foreground.
2. Load sample data
load preset likes
Loads metadata and 3 edges (a U2I example):
Alice --- likes ----> +--------+
| Phone |
Bob ----- likes ----> +--------+
|
| +--------+
+-- likes ----> | Laptop |
+--------+
3. Query — Precomputed. Just read.
get --source Alice --target Phone # Alice → Phone
scan --index recent --start Bob --direction OUT # Bob → Laptop, Bob → Phone
scan --index recent --start Phone --direction IN # Alice → Phone, Bob → Phone
count --start Alice --direction OUT # 1
count --start Phone --direction IN # 2
See Quick Start for more, or Build Your Social Media App to go deeper.
- At write time: exact counts, consistent toggles, indexes, and aggregations are all precomputed.
- At read time: precomputed results are read as-is. Read-path cost stays flat under load. Multi-hop traversals are expressed by composing the supported operations.
Supported operations:
- Edge lookups (GET, multi-get)
- Edge counts (COUNT)
- Indexed edge scans (SCAN; multi-start variant is SEEK)
- Real-time aggregations (AGG)
Planned:
- Global TopK
- Per-entity TopK
- HBase — durable storage for interactions; strong durability, horizontal scalability.
- Kafka — WAL/CDC publication for recovery, replay, and downstream pipelines.
- JDBC metastore — to be consolidated into HBase.
Client
│
(REST API)
│
Actionbase
├──> HBase
│
├──> JDBC
│
└──> Kafka ──> 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)
- A single database or cache layer can no longer absorb your U2U/U2I/I2I traffic
- Multiple teams keep rebuilding the same real-time counters, sync queues, and relationship scans
- You need predictable read latency without read-time computation
If a single database can handle your workload, that's the better choice.
Early open-source 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, open an issue.
- Documentation
- Roadmap
- 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.