Introduction to the Bluetape4k Ecosystem
Bluetape4k is a Kotlin/JVM library ecosystem for backend services. It is not a single framework that tries to own the whole application. It is closer to a set of layer-specific modules that Spring Boot 4 and Ktor 3 services can adopt as needed.
This first article is a map. Detailed repository architecture, API examples, and migration paths belong in later parts of the series.
Ecosystem Overview
Section titled “Ecosystem Overview”Bluetape4k can be read as five layers. The table is intentionally compact; the sections below describe the main component groups in more detail.
| Layer | Primary role | Representative modules |
|---|---|---|
| Application | Service entrypoints and framework integration | Spring Boot 4, Ktor 3 |
| Domain Capability | Reusable business capabilities | Leader, JaVers, Image, Text |
| Data | Persistence, query, cache, graph data access | Exposed, R2DBC, JDBC, Hibernate, MongoDB, Cassandra, GraphDB |
| Infrastructure | Cloud, messaging, observability, resilience | AWS, Kafka, NATS, Redis, Micrometer, OpenTelemetry, Resilience4j |
| Foundation | Shared Kotlin base, execution models, tests, version alignment | Core, Coroutines, Virtual Threads, Testing, BOM |

The application layer is the service boundary: Spring Boot 4 or Ktor 3. Bluetape4k fills the domain, data, infrastructure, and foundation layers underneath that boundary.
Application Layer
Section titled “Application Layer”Spring Boot 4
Section titled “Spring Boot 4”Purpose: make Bluetape4k data, cache, infrastructure, and testing modules easy to assemble in Spring Boot services.
Modules and roles:
spring-boot/core: common Spring Boot auto-configuration and base integrationspring-boot/r2dbc: R2DBC and coroutine data access setupspring-boot/redis: Redis/Lettuce application cache and connection setupspring-boot/mongodb,spring-boot/cassandra: document and wide-column database integrationspring-boot/hibernate-lettuce: Hibernate second-level cache integration with Lettuce
Representative features:
- Connect Bluetape4k modules through Spring Boot 4 auto-configuration
- Configure runtime concerns such as coroutines, R2DBC, Redis, MongoDB, and Cassandra consistently
- Reduce boilerplate configuration for library consumers
Ktor 3
Section titled “Ktor 3”Purpose: provide lightweight coroutine-first service integration for cloud, coordination, and graph capabilities.
Modules and roles:
aws-ktor: AWS SDK integration for Ktor servicesleader-ktor: leader election integration for Ktor applicationsgraph-ktor: graph database integration for Ktor servicesexamples/aws-ktor-*: S3, DynamoDB, and SQS examplesexamples/ktor-graph-examples: graph service composition examples
Representative features:
- Compose Ktor 3 services around suspend APIs and coroutine clients
- Attach AWS, leader election, and graph database modules at the application boundary
- Offer an adoption path for services that want a lighter runtime than Spring Boot
Domain Capability Layer
Section titled “Domain Capability Layer”Leader
Section titled “Leader”Purpose: prevent duplicate execution of batch jobs, schedulers, polling workers, cache warmers, and migration gates in distributed services.
Modules and roles:
leader-core: leader election API and common execution modelleader-redis-lettuce,leader-redis-redisson: Redis-backed election backendsleader-hazelcast,leader-mongodb,leader-zookeeper: additional coordination backendsleader-exposed-jdbc,leader-exposed-r2dbc: database-backed election storageleader-spring-boot,leader-ktor: framework integration
Representative features:
- Skip semantics through
runIfLeader()when the current node is not elected - Blocking,
CompletableFuture, coroutine, and Virtual Threads execution models - Multi-leader scenarios through
LeaderGroupElector
JaVers
Section titled “JaVers”Purpose: track domain-object changes in a model-friendly way, instead of relying only on row-level CDC.
Modules and roles:
javers-core: JaVers helpers, codecs, and cache-backed repository supportjavers-persistence-redis: Redis Lettuce/Redisson snapshot storagejavers-persistence-kafka: Kafka event-stream persistencebom: dependency alignment for JaVers modules
Representative features:
- Aggregate and domain object change history
- Redis or Kafka backed audit trail storage
- Diff, snapshot, and history lookup for DDD-style models
Purpose: provide both general JVM image processing and high-throughput libvips processing inside the same ecosystem.
Modules and roles:
images: Scrimage-based pure JVM processingimages-vips-api: libvips abstraction and common APIimages-vips-java21: Java 21 JVips/JNI backendimages-vips-java25: Java 25 FFM/Panama backendimages-spring-boot,images-benchmark: Spring Boot integration and benchmarks
Representative features:
- Resize, crop, filter, encode, and batch processing
- High-performance thumbnail and resize pipelines with libvips
- Coroutine-friendly image I/O for readers, writers, and byte encoders
Purpose: reuse Korean and Japanese tokenization, language detection, and keyword search in Kotlin services.
Modules and roles:
tokenizer-core: common tokenizer request/response models and dictionary utilitiestokenizer-korean: Korean normalization, POS tokenization, and phrase extractiontokenizer-japanese: Kuromoji IPAdic-based Japanese tokenizationlingua: language detectiontext-search: Aho-Corasick search, replacement, and word filtering
Representative features:
- Korean and Japanese text analysis
- Mixed-language detection
- Forbidden-word, keyword-search, and replacement pipelines
Data Layer
Section titled “Data Layer”Exposed
Section titled “Exposed”Purpose: provide a Kotlin DSL-oriented persistence model and cover JDBC and R2DBC with a consistent repository pattern.
Modules and roles:
exposed-core: common base for Exposed extensionsexposed-jdbc,exposed-r2dbc: JDBC/R2DBC repositories and transaction helpersexposed-dao: Exposed DAO extensionsexposed-cache: cache integration baseexposed-jdbc-caffeine,exposed-jdbc-lettuce,exposed-jdbc-redisson: JDBC cache backendsexposed-r2dbc-caffeine,exposed-r2dbc-lettuce,exposed-r2dbc-redisson: R2DBC cache backends
Representative features:
- Type-safe SQL with Exposed DSL
- JDBC repositories and R2DBC coroutine repositories
- CTE, recursive CTE, batch, and measured query helpers
- JSON columns, encrypted columns, and database-specific extensions
- Spring Boot JDBC/R2DBC integration
GraphDB
Section titled “GraphDB”Purpose: reduce vendor API differences across graph databases and provide a common abstraction for graph-heavy domains.
Modules and roles:
graph-core: graph model, repository abstraction, blocking API, and coroutine APIgraph-neo4j,graph-memgraph,graph-age,graph-tinkerpop,graph-falkordb: database adaptersgraph-io/core,graph-io/csv,graph-io/graphml,graph-io/jackson2,graph-io/jackson3,graph-io/okio: import/export and serializationgraph-spring-boot,graph-ktor: framework integrationexamples/*-graph-examples: code graph, knowledge graph, fraud detection, and recommendation examples
Representative features:
- Common API for Neo4j, Memgraph, AGE, TinkerGraph, and FalkorDB
- Node/edge batch insert, merge/upsert, schema, and index management
- Transaction blocks, weighted paths, and graph algorithm operations
- Bulk I/O with CSV, NDJSON, GraphML, and OkIO streams
- Blocking and coroutine APIs
General Data Modules
Section titled “General Data Modules”Purpose: provide supporting data-access utilities outside the Exposed and GraphDB repositories.
Modules and roles:
data/hibernate: Hibernate persistence utilitiesdata/r2dbc: R2DBC helper APIsdata/jdbc: JDBC data-access utilitiesdata/mongodb: MongoDB integration helpersdata/cassandra: Cassandra integration helpers
Representative features:
- Reusable helpers for relational, document, and wide-column databases
- Integration base for Spring Boot data modules
- Shared patterns for cache, transaction, and serialization concerns
Infrastructure Layer
Section titled “Infrastructure Layer”Purpose: make AWS Java SDK v2 and AWS Kotlin SDK fit Kotlin service patterns.
Modules and roles:
aws: AWS Java SDK v2 helpersaws-kotlin: AWS Kotlin SDK coroutine-first helpersaws-spring-boot: Spring Boot 4 integrationaws-ktor: Ktor 3 integrationexamples/aws-*: service-specific examples for S3, DynamoDB, SQS, and more
Representative features:
- Integration for S3, DynamoDB, SES, SNS, SQS, KMS, and CloudWatch
- Support for both Spring Boot operations and Ktor coroutine services
- Local integration testing with LocalStack/FLOCI-style environments
Messaging
Section titled “Messaging”Purpose: support event-driven services and asynchronous integration.
Modules and roles:
infra/kafka: Kafka integrationinfra/kafka4: Kafka 4 integrationinfra/kafka-logback: Logback to Kafka integrationinfra/nats: NATS integrationinfra/pulsar: Pulsar integration
Representative features:
- Kafka, NATS, and Pulsar client setup
- Application logging and event pipeline integration
- Reduced configuration and utility boilerplate for async integration
Cache And Redis
Section titled “Cache And Redis”Purpose: provide local cache, distributed cache, and Redis client integration with consistent patterns.
Modules and roles:
infra/redis,infra/lettuce,infra/redisson: Redis clients and distributed primitivescache/cache-core: common cache abstractioncache/cache-lettuce,cache/cache-redisson: Redis-backed cache backendscache/cache-hazelcast: Hazelcast distributed cache backendcache/hibernate-cache-lettuce: Hibernate second-level cache integration
Representative features:
- Local/distributed cache composition
- Repository, Hibernate, and application cache integration
- Near-cache and 2-tier cache patterns
Observability And Resilience
Section titled “Observability And Resilience”Purpose: connect metrics, tracing, resilience, and rate limiting to the rest of the ecosystem.
Modules and roles:
infra/micrometer: Micrometer metrics integrationinfra/opentelemetry: OpenTelemetry tracing and telemetry integrationinfra/resilience4j: retry, circuit breaker, and bulkhead patternsinfra/bucket4j: rate limitingutils/measured: measured execution and timing helpers
Representative features:
- Metrics for Prometheus/Grafana-style monitoring
- Telemetry hooks for tracing backends
- Retry, circuit breaker, and rate limiting around external dependencies
Foundation Layer
Section titled “Foundation Layer”Purpose: provide the shared Kotlin/JVM base used across the ecosystem.
Modules and roles:
bluetape4k/core: guards, validation, extensions, and common utilitiesbluetape4k/annotations: API maturity and opt-in annotationsbluetape4k/logging: Kotlin-friendly logging helpersutils/*: time, state, workflow, id generation, math, geo, and money utilities
Representative features:
- Common guard and helper patterns
- Kotlin-idiomatic extension APIs
- Shared types and utilities for higher-level modules
Coroutines And Virtual Threads
Section titled “Coroutines And Virtual Threads”Purpose: let services choose between Kotlin coroutines and Java Virtual Threads depending on runtime needs.
Modules and roles:
bluetape4k/coroutines: coroutine helpers and suspend-friendly utilitiesvirtualthread/api: common Virtual Threads abstractionvirtualthread/jdk21: Java 21 supportvirtualthread/jdk25: Java 25 support
Representative features:
- Suspend API and coroutine execution support
- Virtual Threads for blocking SDKs and JDBC workloads
- Migration path between coroutine-first code and blocking ecosystems
Testing
Section titled “Testing”Purpose: reduce repeated test setup and make integration testing cheaper.
Modules and roles:
testing/assertions: assertion helperstesting/junit5: JUnit 5 utilitiestesting/testcontainers: Testcontainers singleton launcherstesting/mock-web-server: HTTP client test servertesting/mock-webflux-server: WebFlux/WebClient test helper
Representative features:
- Less assertion and coroutine test boilerplate
- Simpler infrastructure test setup
- Consistent integration test patterns across modules
BOM And Version Governance
Section titled “BOM And Version Governance”Purpose: keep compatible dependency sets available even as repositories evolve independently.
Modules and roles:
bluetape4k-dependencies: ecosystem-wide dependency alignmentbluetape4k/bom: core repository alignment- Repository-local BOMs: AWS, Exposed, Image, JaVers, Leader, Text, and Graph alignment
Representative features:
- Reduced version drift for Kotlin, Spring Boot, Exposed, AWS SDK, and Testcontainers
- Simpler dependency declarations for consumers
- Stable combinations across repository release cadences
How The Layers Work Together
Section titled “How The Layers Work Together”In a real service, Spring Boot 4 or Ktor 3 forms the application boundary. Under that boundary, teams add Foundation, Data, Infrastructure, and Domain Capability modules as needed.

The usual path starts with the Foundation layer: core utilities, coroutine helpers, testing support, and BOM alignment. Then the service adds Data and Infrastructure modules. Domain capabilities such as leader election, audit trails, image processing, and text processing are added when the product needs them.
The key idea is that Bluetape4k is not one large framework. It is an ecosystem of small modules that can be adopted gradually in existing Spring Boot 4 or Ktor 3 services.
The next articles will zoom into individual layers and repositories with architecture diagrams and concrete examples.