Roadmap
Where wakuwaku stands today, what 1.0.0 and 2.0.0 mean, and which Spring modules already have a wakuwaku counterpart.
wakuwaku aims to be a powerful, robust microservice framework for Rust, in the way Spring is for Java. The version numbers mark how close it is to that goal.
Milestones
1.0.0-rc1
The first release candidate. It contained the service builder, gRPC registration, cron jobs, typed events on Apache Iggy, capability-typed data access to PostgreSQL, MySQL, Redis, and Meilisearch, and proof-carrying validation.
1.0.0-rc2
The second release candidate kept everything rc1 contained and refined it:
- Data access: every query declares its own error type, so a query that can refuse (a lost optimistic lock, a broken business rule) says so in its error. A transaction is a flow whose steps run queries inside the open transaction, while the library owns BEGIN, COMMIT, ROLLBACK, and what an aborted transaction or a lost COMMIT means.
- Services: components built from several dependencies are registered with a closure (
compose_cron_job,compose_grpc_service,compose_iggy_consumer). A cron job chooses its schedule mode: after the previous run finishes, at least an interval apart, or on a fixed grid. - Shutdown: cron jobs and event consumers drain gracefully on
shutdownand can be cancelled withabort. - Events: many events of one type can be published as a batch.
- Validation: pure verifiers, declarable as constants, prove properties that need no context or I/O.
1.0.0-rc3 (current)
The current release candidate fixes what porting a production service to rc2 found:
- Data access: a transaction flow declares the entities it reads and writes with
tx_effect!, and every query it runs must stay within that declaration. A flow can no longer touch an entity that neither it nor its handle covers. - Validation:
ValidateErroris a standard error type, so it propagates with?.Provenvalues can be printed withDebug, and a pure verifier can check aStringthrough&str. - Documentation: how to run a transaction and model its states, and how to assign consumer partitions.
Everything listed as available in the table below ships in this release.
1.0.0
1.0.0 will be released once end-to-end tests on real-world projects pass. Until then, the release candidate can still change where those tests show it has to.
2.0.0
2.0.0 is the milestone at which every meaningful Spring module has a wakuwaku counterpart. The rows marked "not yet" below are the gap between today and 2.0.0.
No dates are attached to these milestones.
Spring modules and their counterparts
"Available" means the counterpart exists in 1.0.0-rc3. It does not mean that wakuwaku copies the Spring API. The counterparts are designed so that the compiler checks as much as possible, so they often work differently. Coming from Spring explains the differences.
| Spring | wakuwaku | Status |
|---|---|---|
| Spring Framework core: IoC container, dependency injection | ServiceBuilder, ServiceCreation | Available |
| Spring Boot starters | One wakuwaku dependency with feature flags | Available |
Spring Boot auto-configuration, @ConfigurationProperties, profiles | none | Not yet |
Task scheduling (@Scheduled(fixedDelay/fixedRate = ...)) | Cron jobs (interval modes, no cron expressions) | Available |
| gRPC (Spring gRPC, grpc-spring-boot-starter) | gRPC services | Available |
| Spring for Apache Kafka, Spring Cloud Stream, Spring AMQP | Events on Apache Iggy | Available |
| Spring Data JDBC / JPA repositories | Queries and sqlx (explicit SQL, no ORM) | Available |
| Spring transaction management | Transactions | Available |
| Spring Data Redis | Redis | Available |
| Spring Cache abstraction (Redis) | Redis caches (explicit calls, no annotations) | Available |
Distributed locks (ShedLock, Spring Integration RedisLockRegistry) | Redis locks | Available |
Rate limiting (Spring Cloud Gateway RedisRateLimiter) | Redis token-bucket limiter | Available |
| Spring Data Elasticsearch (full-text search) | Meilisearch | Available |
Bean Validation (@Valid, Hibernate Validator) | Validation | Available |
| Spring Boot Test | Testing: components are unit-tested directly | Available |
| Spring Web MVC / WebFlux (HTTP, REST) | none | Not yet |
| Spring Security | none | Not yet |
| Spring Boot Actuator (health checks, metrics) | none | Not yet |
| Micrometer metrics and tracing | none (wakuwaku logs errors through tracing) | Not yet |
| Spring Cloud Config, service discovery, gateway, circuit breakers | none | Not yet |
| Spring Batch | none | Not yet |
| Spring Integration | none | Not yet |
A "not yet" row means that wakuwaku has nothing for it today. Until a counterpart exists, use a Rust crate for that job next to wakuwaku. Components built with ServiceCreation can depend on any value you register, including clients from other crates.
Changes since 0.3
0.3 was a set of utilities around RabbitMQ, Redis, and sqlx. 1.0.0-rc3 replaces most of them. See Migrating from 0.3.