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:

  • A finally tagless API that allows you to do persistence with the effect of your choice, including Scala futures, IO monads, or a purely synchronous, blocking approach.
  • Streaming query results with any of 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 repository with simple, typesafe, effectful 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.
  • Schema migration framework.
  • Test data generation.

Upcoming Features

The current high-priority features and improvements are:

  • 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.