Fully Managed Event Sourcing Platform

Serialized is a fully managed cloud-hosted platform. We provide APIs and tools for everything you need to build scalable systems and Microservices using CQRS and Event Sourcing.

For developers

Serialized is an API-first SaaS and you can use any language to build Event Sourcing applications using our API. We also provide high-level client libraries for select languages to make it even easier and faster to use.

Source your domain events to aggregates

  • 
    SerializedClientConfig config = SerializedClientConfig
        .serializedConfig()
        .accessKey(getenv("SERIALIZED_ACCESS_KEY"))
        .secretAccessKey(getenv("SERIALIZED_SECRET_ACCESS_KEY")).build();
    
    AggregateClient<TodoListState> todoListClient =
        aggregateClient("TodoList", TodoListState.class, config)
            .registerHandler(...)
            .build();
    Serialized Java client
  • 
    
    UUID todoListId = UUID.fromString("b19ab533-3e8d-44c1-a8ca-6ecb4ee3d1b2");
    
    TodoList todoList = new TodoList(new TodoListState());
    List<Event> events = todoList.createNew(todoListId, "My todolist");
    todoListClient.save(todoListId, events);
    
    
            
    Serialized Java client
  • 
    UUID todoListId = UUID.fromString("b19ab533-3e8d-44c1-a8ca-6ecb4ee3d1b2");
    UUID todoId = UUID.fromString("bea0a9fa-02de-42b1-8bfc-9a0a79f25777");
    String todoText = "Buy milk";
    
    todoListClient.update(todoListId, state -> {
    TodoList todoList = new TodoList(state);
        List<Event> events = todoList.addTodo(todoId, todoText);
        return events;
    });
    Serialized Java client

Project your events into ready-made read models

  • 
    ProjectionClient projectionClient = ProjectionClient.projectionClient(config).build();
    
    ProjectionClient.projectionClient(config).createOrUpdate(
            singleProjection("completed-todos")
                .feed("TodoList")
                .addHandler(handler("TodoCompleted")
                    .addFunction(merge().build())
                    .withIdField("todoId")
                    .build())
                .build());
    Serialized Java client
  • 
    
    CompletedTodos completedTodos = projectionClient.query(list("completed-todos")
            .sortDescending("updatedAt")
            .build(CompletedTodos.class));
    
    completedTodos.stream().forEach(completedTodo -> {
        System.out.println("Completed: " + completedTodo.text);
    });
    
            
    Serialized Java client

Trigger side-effects or create notifications using reactions

  • 
    ReactionClient reactionClient = ReactionClient.reactionClient(config).build();
    
    reactionClient.createOrUpdate(newReactionDefinition("todo-list-created-notifier")
            .feed("TodoList")
            .reactOnEventType("TodoListCreated")
            .action(slackAction(
                URI.create("https://hooks.slack.com/services/ABC/123"))
                .text("The todo list ${event.data.name} was created!")
                .build()
            ).build());
    
    Serialized Java client

Subscribe and process your event feeds

  • 
    FeedClient feedClient = FeedClient.feedClient(config).build();
    
    feedClient.feed("TodoList").subscribe(feedEntry -> {
        // Process entry
    });
    
    Serialized Java client

Event sourcing

You wouldn't build your own database. You shouldn't build your own event store either.

Custom projections

Setup use-case specific projections to present your data in different ways.

Event reactions

Define reactions to build advanced business flows or trigger third-party services.

Cloud-hosted

Because managing your own servers is such a waste of time.

Dashboard

Your business data is immediately presented on a dashboard.

Encrypted & safe

Client-side encryption makes sure your private data never gets in the wrong hands.


Serialized is built on modern and battle-proven technology