wakuwaku

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 shutdown and can be cancelled with abort.
  • 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: ValidateError is a standard error type, so it propagates with ?. Proven values can be printed with Debug, and a pure verifier can check a String through &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.

SpringwakuwakuStatus
Spring Framework core: IoC container, dependency injectionServiceBuilder, ServiceCreationAvailable
Spring Boot startersOne wakuwaku dependency with feature flagsAvailable
Spring Boot auto-configuration, @ConfigurationProperties, profilesnoneNot yet
Task scheduling (@Scheduled(fixedDelay/fixedRate = ...))Cron jobs (interval modes, no cron expressions)Available
gRPC (Spring gRPC, grpc-spring-boot-starter)gRPC servicesAvailable
Spring for Apache Kafka, Spring Cloud Stream, Spring AMQPEvents on Apache IggyAvailable
Spring Data JDBC / JPA repositoriesQueries and sqlx (explicit SQL, no ORM)Available
Spring transaction managementTransactionsAvailable
Spring Data RedisRedisAvailable
Spring Cache abstraction (Redis)Redis caches (explicit calls, no annotations)Available
Distributed locks (ShedLock, Spring Integration RedisLockRegistry)Redis locksAvailable
Rate limiting (Spring Cloud Gateway RedisRateLimiter)Redis token-bucket limiterAvailable
Spring Data Elasticsearch (full-text search)MeilisearchAvailable
Bean Validation (@Valid, Hibernate Validator)ValidationAvailable
Spring Boot TestTesting: components are unit-tested directlyAvailable
Spring Web MVC / WebFlux (HTTP, REST)noneNot yet
Spring SecuritynoneNot yet
Spring Boot Actuator (health checks, metrics)noneNot yet
Micrometer metrics and tracingnone (wakuwaku logs errors through tracing)Not yet
Spring Cloud Config, service discovery, gateway, circuit breakersnoneNot yet
Spring BatchnoneNot yet
Spring IntegrationnoneNot 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.

On this page