A Persistence Framework for Scala and NoSQL

View project on GitHub

feature list

Current features are described in detail in the user manual. They include:

  • Asynchronous persistence API using Scala futures and four different Scala streaming libraries.
  • Cassandra, MongoDB, SQLite, and in-memory back ends.

  • Supports flexible construction of your domain model using standard Scala types such as case classes, options, sets and lists.
  • Compile-time DSL to express keys, queries, and indexes.
  • User control of sharding/partitioning.
  • Polymorphic traits and controlled vocabularies.
  • Boilerplate-free description of your domain model.

  • Pre-built repositories with simple, reactive APIs.
  • Configuration-level optimistic locking.
  • Pre-built integration tests that exercise your repositories against a real database.
  • Fully featured in-memory repositories for use in other integration testing.
  • Test data generation.

Upcoming Features

The current high-priority features and improvements are:

  • Use type classes as a better approach to type safety with persistent types, key values, and queries.
  • Free monad wrapper around the repository API.
  • Schema migration framework.
  • Replace home-grown reflection utilities with shapeless/circe.
  • First-class support for optional values.

For more information, please see the story board. Tickets are roughly ordered in order of current priority.