We are happy to announce the release of Slick 2.0.0. The artifacts are available on Maven Central, as usual. You can find the source code here: https://github.com/slick/slick/tree/2.0.0. Please see http://slick.typesafe.com/docs/ for documentation. This release breaks source compatibility with Slick 1.0 in some areas, hence the 2.0 version number. You can find more information about these changes in the migration guide.

A code generator that reverse-engineers the database schema and generates all code required for working with Slick.

New driver architecture to allow support for non-SQL, non-JDBC databases.

Table definitions in the Lifted Embedding use a new syntax which is slightly more verbose but also more robust and logical, avoiding several pitfalls from earlier versions.

Table definitions (and their * projections) are not restricted to flat tuples of columns anymore. They can use any type that would be valid as the return type of a Query. The old projection concatenation methods ~ and ~: are still supported but not imported by default.

In addition to Scala tuples, Slick supports its own HList abstraction for records of arbitrary size. You can also add support for your own record types with only a few lines of code. All record types can be used everywhere (including table definitions and mapped projections) and they can be mixed and nested arbitrarily.

Soft inserts are now the default, i.e. AutoInc columns are automatically skipped when inserting with += , ++= , insert and insertAll . This means that you no longer need separate projections (without the primary key) for inserts. There are separate methods forceInsert and forceInsertAll in JdbcProfile for the old behavior.

A new model for pre-compiled queries replaces the old QueryTemplate abstraction. Any query (both, actual collection-valued Query objects and scalar queries) or function from Column types to such a query can now be lifted into a Compiled wrapper. Lifted functions can be applied (without having to recompile the query), and you can use both monadic composition of Compiled values or just get the underlying query and use that for further composition. Pre-compiled queries can now be used for update and delete operations in addition to querying.

threadLocalSession has been renamed to dynamicSession and the corresponding methods have distinct names (e.g. withDynSession vs the standard withSession ). This allows the use of the standard methods without extra type annotations.

Support for server-side Option conversions (e.g. .getOrElse on a computed Option column)

Some changes to the API to bring it closer to Scala Collections syntax.

Improved direct embedding.

Query scheduling, based on a new query interpreter and in-memory driver, allows the use of tables from multiple databases in a single query. (This is an experimental feature which will undergo further optimization in a future release.)

The code generator phase has been incorporated into the query compiler.