Axon Framework and Axoniq Framework
For those using or looking to use the Framework, you may be wondering: "What is the difference between Axon and Axoniq Framework?" This page will break that down for you, as well as explain how to use both and which features can be found where.
Axon Framework is the open-source foundation for building message-driven, event-sourced applications on the JVM. It provides the core messaging infrastructure (commands, events, and queries), modeling support, event sourcing, and test fixtures, and is released under the Apache 2.0 license.
Axoniq Framework builds on top of Axon Framework and adds advanced modules. These modules cover scenarios that go beyond the open-source baseline, such as PostgreSQL-optimized event storage, distributed messaging, sequenced dead-letter queue support, data protection, and connectivity to Axon Server. Axoniq Framework modules are commercial offerings under the Axoniq Terms of Service, and require an active subscription for production use.
For an overview of the features in Axon Framework and Axoniq Framework, be sure to check the Feature comparison table. However, you do not have to jump to this table to understand what is in Axon or in Axoniq Framework. You will find this icon to mark Axoniq Framework features throughout the documentation. When no such icon is present, you are dealing with Axon Framework features.
So, in short:
-
Axon Framework: the open-source core. Free to use, including in production, covering the bases to support messaging, modeling, and event sourcing.
-
Axoniq Framework: the commercial modules on top of Axon Framework, providing advanced and production-grade capabilities.
How to use Axon and Axoniq Framework
Just as any library or framework, to use Axon and Axoniq Framework, you can simply depend on either.
Axon Framework modules are marked with org.axonframework, whereas Axoniq Framework modules are marked with io.axoniq.framework. For a full list of all the modules, be sure to check out this page.
However, there’s a licensing difference between both. Axon Framework being Apache 2.0 means you can use it whenever, wherever. However, Axoniq Framework falls under the Axoniq Terms of Service. To that end, access to Axoniq Framework features is governed through a subscription. On start-up of an application using Axoniq Framework features, these features will validate if the application is entitled to use them.
You can retrieve a subscription through Axoniq Platform as a self-service means. A self-service subscription is associated with an environment and grants credentials (an environment identifier and an access token) that the application presents at runtime. As such, this flow will expect an active connection with Axoniq Platform to ensure the subscription entitles your application to the features you’re using.
If you are unable to form an active connection with Axoniq Platform or otherwise require a different feature set, be sure to check out our pricing page. Be sure to contact us when more information or help is required.
When no active subscription is found, we assume you are evaluating Axoniq Framework. Evaluating Axoniq Framework in a live system is allowed for a limited period of time. Do note that anybody can use the individual plan free of charge. This will entitle your application to run past the evaluation time window for non-production use.
For details on configuring, how we enforce a subscription, and runtime subscription changes, be sure to check out their respective sections.
Evaluating Axoniq Framework
During evaluation, Axoniq Framework modules start without credentials, logging a warning as a result. This evaluation mode is intended for development, prototyping, testing, and proof-of-concept work. Continued use for development, testing, or production without a valid subscription is not permitted under the Axoniq Terms of Service. As such, once the evaluation period ends, your application will be forcefully shutdown as a result.
Note that smaller organizations may qualify for complimentary access to Axoniq Framework modules. Contact a Axoniq representative to discuss your eligibility.
Testing Axoniq Framework - individual plan
Every Axoniq Platform account includes our free Individual plan. The Individual plan is intended for learning, prototyping, and local development, and provides credentials that unlock the full set of Axoniq Framework modules at reduced throughput.
The Individual plan is free of charge and does not expire. It allows you to try out Axoniq Framework end-to-end, including modules that are otherwise blocked without credentials, before committing to a paid subscription. When going to production, the Workspace can be upgraded to a paid plan.
Configuring credentials
Credentials are provided to the application through the standard Axoniq Platform configuration. For Spring Boot applications, this is typically a single property:
axoniq.platform.credentials=<environment-id>:<access-token>
For plain Java applications, credentials are registered through an AxoniqPlatformConfiguration component.
The same credentials are used by every Axoniq Framework module the application depends on.
For a thorough explanation on how to set this up, we refer to the Axoniq Platform installation page.
Feature entitlement and message throughput
Axoniq Framework features validate their entitlement at runtime based on the configured credentials. Most subscription tiers require a connection to Axoniq Platform to validate the credentials. If you are not able to have an active connection to Axoniq Platform, you will need a "license" file in your environment to be entitled. Be sure to contact us if this is a requirement for you.
Assuming you are able to connect to Axoniq Platform, the runtime behavior for feature entitlement differs depending on the scenario you’re in:
- No credentials configured
-
The application is treated as evaluating Axoniq Framework. All Axoniq Framework features operate for a 15-minute evaluation window, regardless of which features are in use. This includes features such as Data Protection. Once the evaluation window closes, the application is forcefully shut down.
- Credentials configured, without an active connection to Axoniq Platform
-
The application continues to operate for 24-hour grace period without an active connection. This window allows transient connectivity issues to be resolved without an immediate outage. If the connection is not restored within the window, the application is forcefully shut down.
- Credentials configured, with an active connection to Axoniq Platform
-
The Axoniq Framework modules included in the subscription operate normally. This is where so-called "feature entitlement" kicks in: if the application depends on an Axoniq Framework feature that is not part of the subscription, the application is shut down immediately. The Data Protection feature is an example: if it is used by the application but not covered by the subscription, the application will not continue to run.
Beyond entitlement, Axoniq Framework features apply message throughput control to their operations based on the tier of the subscription. When a throughput limit is reached, the module logs a warning and throttles further operations until the rate window resets or higher-tier credentials are provided.
Runtime subscription changes
Once an application has validated its entitlement, two scenarios can change that entitlement while the application is running. The application will respond differently to each.
- Connection to Axoniq Platform is lost
-
When the application can no longer reach Axoniq Platform, it enters a 24-hour grace period and continues to operate as if the connection were still established. This gives operators time to resolve transient connectivity issues without an immediate outage. During the grace period the modules log warnings to make the situation visible. Once the grace period ends, the application is forcefully shut down.
- Subscription is cancelled or payment lapses
-
The license is updated immediately to a non-Production license, and the application falls out of compliance for production use. If the application depends on an Axoniq Framework feature that requires a subscription regardless of whether it is development or production use (like the Data Protection feature), the application is shut down immediately. Other features continue to operate under the non-Production license, with warnings logged to indicate the changed situation, until new credentials are provided or the application is stopped.
Feature comparison
The table belows compares features between Axon Framework and Axoniq Framework. If a feature you expect is missing from this table, be sure to file a concern with the Framework team.
The table mentions the feature in question, whether it is a part of Axon and/or Axoniq Framework, since what version it is or will be present, and an optional description. The version columns start at 5.0.0 and go up, regardless of whether the feature existed before Framework 5.
The "Axon Framework" and "Axoniq Framework" columns may contain any of the following:
-
✓ - The feature is present.
-
X - The feature is not present.
-
Partial - The feature is present partially. Expect a description
-
TBD - Stands for "to be determined." Will change accordingly once planned by the Framework team
Lastly, some rows describe a feature that is no longer present in Framework 5. They are present in the table as a marker for people migrating from 4 (or lower) to 5. If you depended strongly on any of the removed features, be sure to reach out.
| Feature | Axon Framework | Axon Framework Version | Axoniq Framework | Axoniq Framework Version | Description |
|---|---|---|---|---|---|
Core API |
|||||
Unit of Work |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Command / Event / Query messages |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Message metadata |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Message streams |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Message Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
Supports both synchronous and asynchronous programming models |
Command Dispatching and Handling |
|||||
Command Dispatching API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Declarative Command Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Annotated Command Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Stateful Command Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Distributed Command API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Distributing Commands - Axon Server integration |
X |
— |
✓ |
5.1.0 |
|
Distributing Commands - Spring Cloud integration |
X |
— |
✓ |
TBD |
|
Distributed Command Priority |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Distributing Commands - JGroups integration |
X |
— |
X |
— |
Deprecated and removed as of Axon Framework 5 |
Disruptor Command Bus |
X |
— |
X |
— |
Deprecated and removed as of Axon Framework 5 |
Event Publishing and Handling |
|||||
Event Publishing API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Declarative Event Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Annotated Event Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Stateful Event Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Event publishing and handling - AMQP integration |
X |
— |
✓ |
TBD |
|
Event publishing and handling - Kafka integration |
X |
— |
✓ |
TBD |
|
Query Dispatching and Handling |
|||||
Query Publishing - Direct Query API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Query Publishing - Scatter-gather API |
X |
— |
X |
— |
Deprecated and removed as of Axon Framework 5 |
Query Publishing - Subscription Query API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Query Publishing - Streaming Query API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Declarative Query Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Annotated Query Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Stateful Query Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Distributed Query API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Distributing Queries - Axon Server integration |
X |
— |
✓ |
5.1.0 |
|
Distributing Queries - Spring Cloud integration |
X |
— |
✓ |
TBD |
|
Distributed Query Priority |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Modeling / Entities |
|||||
Command Model / Entity API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Declarative Entity Configuration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Annotated Entity Configuration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Entity Hierarchy API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Event Sourced Entity support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
State-based Entity support |
TBD |
— |
TBD |
— |
This feature reflects the JPA storage support for Aggregates from previous versions |
Entity Caching |
X |
— |
✓ |
TBD |
|
Entity Creation Policy |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Aggregate Conflict Resolution |
X |
— |
X |
— |
Deprecated and removed as of Axon Framework 5 |
Event Store |
|||||
Event Store - DCB API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
DCB Event Storage - Axon Server integration |
X |
— |
✓ |
5.1.0 |
|
DCB Event Storage - JPA support |
TBD |
— |
TBD |
— |
|
DCB Event Storage - PostgreSQL integration |
X |
— |
✓ |
5.1.0 |
|
Event Store - Aggregate API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Aggregate-based Event Storage - Axon Server integration |
X |
— |
✓ |
5.1.0 |
|
Aggregate-based Event Storage - JPA support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Aggregate-based Event Storage - JDBC support |
TBD |
— |
TBD |
— |
|
Aggregate-based Event Storage - Mongo integration |
X |
— |
X |
— |
Deprecated and removed as of Axon Framework 5 |
Event Processing |
|||||
Event Processing API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Subscribing Event Processors |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Streaming Event Processors |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Event Sequencing |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Event Processing Replays |
✓ |
5.1.0 |
✓ |
5.1.0 |
|
Token Store API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
JPA Token Store |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
JDBC Token Store |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Mongo Token Store |
X |
— |
✓ |
TBD |
|
Persistent Stream integration |
X |
— |
✓ |
5.2.0 |
|
Multi-Source Event Streaming |
X |
— |
✓ |
5.1.0 |
|
Sequenced Dead-Letter Queue API |
X |
— |
✓ |
5.1.0 |
|
Sequenced Dead-Letter Queue - JPA support |
X |
— |
✓ |
5.1.0 |
|
Sequenced Dead-Letter Queue - JDBC support |
X |
— |
✓ |
5.1.0 |
|
Sequenced Dead-Letter Queue - Mongo integration |
X |
— |
✓ |
TBD |
|
Process Management |
|||||
Saga pattern integration |
X |
— |
X |
— |
Replaced fully with the Workflow integration |
Workflows |
X |
— |
✓ |
5.1.0 |
Follows the "Durable Execution" paradigm, fully replacing Saga support from previous versions, as well as supporting many other process management styles |
Message Interceptors |
|||||
Message Dispatch Interceptors |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Message Handler Interceptors |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Declarative Message Handling Component Interceptors |
✓ |
5.2.0 |
✓ |
5.2.0 |
|
Annotated Message Handling Component Interceptors |
✓ |
5.2.0 |
✓ |
5.2.0 |
|
Declarative Exception Handlers |
✓ |
5.2.0 |
✓ |
5.2.0 |
|
Annotated Exception Handlers |
✓ |
5.2.0 |
✓ |
5.2.0 |
|
Message Handler Timeout support |
TBD |
— |
TBD |
— |
|
UnitOfWork Timeout support |
TBD |
— |
TBD |
— |
|
Conversion, versioning, and upcasting |
|||||
Conversion / Serialization |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Conversion - Jackson integration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Conversion - Avro integration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Conversion - Data Protection integration |
X |
— |
✓ |
5.1.0 |
|
Command Versioning |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Event Versioning |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Query Versioning |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Upcasting |
Partial |
5.2.0 |
✓ |
5.2.0 |
Marked partial for Axon Framework as message handlers can receive the payload in any format. Hence, upcasting can be done specific to a message handler at the user’s discretion. Support in Axoniq Framework is more extensive, with implementable components and guard rails |
Conversion - XStream integration |
X |
— |
X |
— |
Deprecated and removed as of Axon Framework 5 due to incompatibility with new JDK versions |
Snapshotting |
|||||
Integrated Command Model / Entity Snapshotting |
Partial |
5.1.0 |
✓ |
5.1.0 |
Marked partial for Axon Framework, as it solely provides the API for snapshot storage (the |
Generic Entity Snapshotting |
X |
— |
TBD |
— |
|
Event Scheduling and Deadline Management |
|||||
Event Scheduling API |
TBD |
— |
TBD |
— |
To-be-decided given the ease to have a custom integration |
Event Scheduling - Axon Server integration |
TBD |
— |
TBD |
— |
|
Event Scheduling - Quartz integration |
TBD |
— |
TBD |
— |
|
Event Scheduling - JobRunr integration |
TBD |
— |
TBD |
— |
|
Event Scheduling - db-scheduler integration |
TBD |
— |
TBD |
— |
|
Deadline Manager API |
TBD |
— |
TBD |
— |
To-be-decided given the relative ease to have a custom integration |
Deadline Manager - Quartz integration |
TBD |
— |
TBD |
— |
|
Deadline Manager - JobRunr integration |
TBD |
— |
TBD |
— |
|
Deadline Manager - db-scheduler integration |
TBD |
— |
TBD |
— |
|
Test fixtures |
|||||
Test Fixtures - Entity support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Test Fixtures - Workflow support |
X |
— |
✓ |
5.1.0 |
|
Test Fixtures - Projection support |
TBD |
— |
TBD |
— |
|
Test Fixtures - Command Handler support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Test Fixtures - Event Handler support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Test Fixtures - Query Handler support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Configuration-based Testing |
TBD |
— |
✓ |
TBD |
|
Monitoring and tracing |
|||||
Correlation Data |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Monitoring API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Monitoring - Dropwizard integration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Monitoring - Micrometer integration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Distributed Tracing |
X |
— |
✓ |
5.2.0 |
|
Multi-tenancy |
|||||
Multi-Tenancy support |
X |
— |
✓ |
TBD |
|
Dependency Injection integration |
|||||
Spring Framework integration |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Spring AOT integration |
TBD |
— |
TBD |
— |
|
Quarkus integration |
✓ |
TBD |
✓ |
TBD |
|
Micronaut integration |
✓ |
TBD |
✓ |
TBD |
|
Language/Library integration |
|||||
Kotlin integration |
✓ |
5.1.0 |
✓ |
5.1.0 |
|
Reactor integration |
✓ |
5.1.0 |
✓ |
5.1.0 |
|
Configuration and tooling |
|||||
Configuration API |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Modularized Configuration support |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Lifecycle Handlers |
✓ |
5.0.0 |
✓ |
5.1.0 |
|
Migration support |
✓ |
5.1.1 |
✓ |
5.1.1 |
|
Feature-based project modularization |
X |
— |
✓ |
5.1.0 |
Means a module-per-feature is used, providing more granular dependencies when desired. |