Step 1.
Define rich, type‑safe domain model
Describe commands, events, and state of entities using Protobuf.
Step 2.
Generate the data types code for all tiers and runtimes
Step 3.
Add business logic in a straight and testable way
Focus on business logic rather than “plumbing”.
A Command
will be delivered to only one Aggregate
.
Projection
s will get all Event
s they need.
ProcessManager
s will cover more complex scenarios. Storage,
message delivery, and other environment matters are isolated from the main code.
Step 4.
Easily deploy to Google Cloud or a custom environment
In-memory and JDBC-based storage implementations allow to implement and test the core logic quickly. Adopt your application to selected deployment environment(s) with a few lines of code.
Why Spine?
The code is automatically generated for all the languages of
your project, as you update the model.
Forget about missed hashCode()
or equals()
.
With Protobuf support, a model can be extended preserving backward and future compatibility with client- and server nodes of your application.
Transforming a single-tenant application into
a multi-tenant one requires a few lines of code. You don't have to introduce
tenantId
parameters for all the calls.
Add and remove fields while keeping binary compatibility with older code;
handle new opportunities with oneof
, natively provided by Protobuf.
Build new Projections
based on the whole event history of the system.
Concepts from the DDD books, such as
Aggregate
,
Projection
,
ProcessManager
,
Repository
are right in the code.
Ever guessed how to cook a BoundedContext
?
Guess no more!
Constraints defined in a business model are automatically checked for commands, events, and entity states. Learn more.
Use freely in closed-source projects. You are also welcome to contribute to improving our framework.
All the data types are immutable, which makes it easy to cache and share. Mutations are performed only in response to incoming messages using clearly defined cycles.
Should you need CustomerId
or
WorkEstimate
value, you get it within seconds,
for multiple languages. You can also have binary storage format
and automatic JSON support.
With CQRS and Event-Driven Architecture you can separate development workflows. More experienced team members can concentrate on the core domain and the write-side tasks while the read–side and UI are created by the rest of the team.