As for the current BSON library, the new API provides an extensible typeclass mechanism, to define how to get and set data as BSON in a typesafe way.
The names of these typeclasses are unchanged (BSONReader and BSONWriter), except the package that is reactivemongo.api.bson (instead of reactivemongo.bson).
In the current BSON library, BSONReader and BSONWriter are defined with two type parameters:
B being the type of BSON value to be read/written,
and T being the Scala type to be handled.
The new API has been simplified, with only the T type parameter kept.
Not only it makes the API simpler, but it also allows to read different BSON types as a target Scala type (before only supported for numeric/boolean, using the dedicated typeclasses).
For example, the Scala numeric types (BigDecimal, Double, Float, Int, Long) can be directly read from any consistent BSON numeric type (e.g. 1.0 as integer 1), without having to use BSONNumberLike.
The new API is also safer, replacing BSONReader.read and BSONWriter.write respectively with BSONReader.readTry and BSONWriter.writeTry, so that serialization errors can be handle at typelevel.
Like the current BSON library, some specific typeclasses are available (with same names) to read and write using BSON documents: BSONDocumentReader and BSONDocumentWriter.
The new library also provide similar macros, to easily materialized document readers and writers for Scala case classes and sealed traits.