Skip to content

Halyx 1.0.0

Choose a tag to compare

@kamranzafar kamranzafar released this 23 Oct 07:19
· 128 commits to main since this release

The first release: one Java API for object storage, NoSQL documents, messaging, events, streams, SQL databases,
caches, and parameters and secrets on AWS, Azure and Google Cloud, over each cloud's own SDKs.

Requirements

  • Java 21 or later.
  • For Spring Boot applications, Spring Boot 3.5 or 4.

Modules

Module What it adds
halyx-bom One version for every Halyx module, and for the Cloud SQL connector
halyx-core The portable API, provider SPI, error model, interceptors and an in-memory provider
halyx-aws S3, DynamoDB, SNS, SQS, EventBridge, SSM Parameter Store, Secrets Manager, ElastiCache, RDS and MSK IAM login
halyx-azure Blob Storage, Cosmos DB, Service Bus, Event Grid namespaces, Key Vault, App Configuration, Event Hubs, and Entra ID login for caches and databases
halyx-gcp Cloud Storage, Firestore, Pub/Sub, Eventarc Advanced, Secret Manager, Parameter Manager, Managed Kafka, and IAM login for Memorystore and Cloud SQL
halyx-vault HashiCorp Vault KV v2 parameters and secrets
halyx-redis, halyx-sql, halyx-r2dbc, halyx-kafka Redis and Valkey caches, a pooled JDBC DataSource, a pooled R2DBC ConnectionFactory, and Kafka streams, each with cloud IAM login
halyx-reactor Mono and Flux views of every service
halyx-micrometer Observations of every operation, and trace context carried through messages, events and stream records
halyx-spring-data-document Spring Data repositories over DynamoDB, Cosmos DB and Firestore
halyx-spring-boot-starter Spring Boot auto-configuration, on Boot 3.5 and 4
halyx-tck The conformance kits, for testing a provider

Each jar has a Java module name, such as dev.halyx for halyx-core and dev.halyx.aws for halyx-aws.

Highlights

  • Object storage on S3, Azure Blob Storage and Cloud Storage, with parallel transfers, presigned URLs and
    conditional writes.
  • NoSQL documents on DynamoDB, Cosmos DB and Firestore, with secondary indexes and transactions, and Spring Data
    repositories with derived queries, optimistic locking and keyset scrolling.
  • Messaging on SNS and SQS, Service Bus and Pub/Sub: listeners, batched acknowledgements, sessions, claim checks
    and tracing.
  • Events as CloudEvents 1.0, published to EventBridge, Event Grid namespace topics and Eventarc Advanced.
  • Streams on Amazon MSK, Event Hubs and Managed Service for Apache Kafka, with consumer groups, retries, dead
    letters, and idempotent and transactional producers; Spring for Apache Kafka with Halyx's cloud login.
  • SQL databases through JDBC and R2DBC, logging in with RDS IAM, Entra ID or Cloud SQL IAM, or through the Cloud
    SQL connector.
  • Caches on ElastiCache, Azure Cache for Redis, Azure Managed Redis and Memorystore, with cloud IAM login, and a Spring
    CacheManager.
  • Parameters and secrets from SSM Parameter Store, Secrets Manager, App Configuration, Key Vault, Parameter
    Manager, Secret Manager and Vault, with Spring configuration import (halyx:) and reload.
  • Credentials: each cloud's default chain, plus assumed AWS roles, impersonated Google service accounts and
    Entra ID service principals, including a federated token from another cloud, with no stored secret.
  • Spring Boot: properties for every service, health indicators, Micrometer metrics, and @HalyxListener methods.
  • Reactive and asynchronous APIs for every service, non-blocking where the SDK's async client allows.
  • A portable microservice sample that runs one image unchanged on EKS, GKE and AKS.
  • AI skills for migrating a Spring Boot service to Halyx, reviewing one for portability, and creating a new one.

Testing

Every service passes the conformance kits on the in-memory provider, on each cloud's emulators and on the real
clouds, with Spring Boot 3.5 and 4. The latest results are in the
cloud testing reports.

Known limitations

  • Not yet run on real clouds: MSK Serverless (the test account's plan doesn't allow it), Azure Database for MySQL with
    Entra ID, and the service principal's certificate login.
  • Some calls still block underneath, on a virtual thread: Cloud Storage, Service Bus receives, and Cosmos DB and
    Firestore read-then-write calls.
  • R2DBC to SQL Server is password-only, because its driver takes no access tokens.

See the roadmap for what comes next.

Getting it

Import the BOM from Maven Central:

<dependency>
  <groupId>dev.halyx</groupId>
  <artifactId>halyx-bom</artifactId>
  <version>1.0.0</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

See Getting started.