Spine Event Engine is a framework for building modern cloud applications. It aims to free developers from creating boilerplate code as much as possible. Our framework is built on top of Protocol Buffers and gRPC to make development of microservices much easier.

The primary language of the backend is Java. Client applications and server-side modules can be written on JavaScript, Java, JavaNano (Android), Swift, Objective-C, C, C++, C#, Go, Python, Ruby, and PHP.

Core Features
  • Strongly Typed Domain Model. Spine promotes strong typing of all parts of a business model. You don't have to deal with Json.

  • Model Extensibility. Thanks to Protobuf support, a model can be extended preserving backward compatibility with clients running older code.

  • Built-in Validation. Constrains defined in a business model are automatically checked for commands, events, and entity states.

  • Code Generation. The model is defined and maintained in Protobuf. The code is automatically generated for all the languages of your project, as you update the model.

  • Promoted Immutability. Messages like commands or events, entity state objects, query results, and many other business logic objects being immutable greatly simplify the code since they are automatically thread-safe, and as such are freely shared or referenced.

  • Multitenancy Support. Transforming a single-tenant application into a multi-tenant one requires very few lines of code. You don't have to introduce tenantId parameters for all the calls.

  • Choice of Storage and Deployment Platforms. The framework promotes writing storage- and platform-agnostic code. You can start with JDBC and later switch to Google Cloud Platform Datastore by changing few lines of code.

  • Open Source. Permissive Apache License allows using the framework in closed-source projects. You are welcome to contribute to the framework development.

The story behind Spine

We started working on the framework after two CQRS/ES projects. Having the experience of tons of manual work for creating commands, events, message handlers, delivering messages and data to web and mobile clients, we thought that there must be a more productive.

Using existing CQRS/ES frameworks caused us to compromise on a number of things, including type safety, immutability, writing conversion code for inter-platform communications, etc. So in June 2015 we decided to build a tool for us and software developers like us.

For more background on why we created the framework, please read Motivation and Design Principles blog post.