Lucre (STM|Event|Data|Confluent) - a transactional, persistent, reactive object model.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Hanns Holger Rutz 4e8668c9fd v4.6.2 2 months ago
.github/workflows LucreExpr should init extensions. travis -> GH CI 2 years ago
adjunct/shared/src dates <> 8 months ago
base/shared/src dates <> 8 months ago
bdb/src/main/scala/de/sciss/lucre/store dates <> 8 months ago
confluent/shared/src dates <> 8 months ago
core/shared/src/main/scala/de/sciss/lucre dates <> 8 months ago
data/shared/src/main/scala/de/sciss/lucre dates <> 8 months ago
expr is #68 actually a "user bug" (illegal feedback)? <> 2 months ago
geom/shared/src/main/scala/de/sciss/lucre/geom dates <> 8 months ago
licenses clean up; ditch old bdb-je versions; change to AGPL 3 years ago
notes merge back from ExObjTest <> 8 months ago
project up deps <> 3 months ago
scripts undo expr0/1 split that was needed for scala 3.0.0 <> 8 months ago
tests/shared/src/test/scala/de/sciss/lucre dates; remove reflection from ExElem (has ??? now!) <> 2 years ago
testsJVM/src/test/scala/de/sciss/lucre dates <> 8 months ago
.gitignore URI ops are in async-file now 2 years ago
.jvmopts ... 2 years ago master -> main 2 years ago
LICENSE add all ex seq ops (todo: except those taking closures) 3 years ago nasty bug in ExpandedMapSeqOrOption <> 2 months ago
build.sbt v4.6.2 2 months ago


Build Status Maven Central


Lucre is an STM based persistent and reactive system for the Scala programming language. It is the foundation of the computer music framework SoundProcesses and its interface front-end Mellite.

Lucre is (C)opyright 2009–2022 by Hanns Holger Rutz. All rights reserved. All modules are released under the GNU Affero General Public License v3+. The software comes with absolutely no warranties. To contact the author, send an e-mail to contact at

Further reading:

  • Rutz, H.H., "A Reactive, Confluently Persistent Framework for the Design of Computer Music Systems," in Proceedings of the 9th Sound and Music Computing Conference (SMC), Copenhagen 2012.

requirements / installation

Lucre builds with sbt against Scala 2.12, 2.13, Dotty (JVM) and Scala 2.13 (JS). The last version to support Scala 2.11 was v3.13.1.

N.B.: On Scala.js, currently the types Artifact and ArtifactLocation are missing, as there is no notion of the underlying In the future, we might change the API to support more generic paths or URIs instead of plain files. Furthermore, the package bdb is not available on Scala.js, meaning there is currently no persistent database back-end available, and you will have to stick to InMemory systems. Ex serialization will currently fail at link time due to the dependency on reflection which is not supported under Scala.js. The currently published version for Scala.js should thus be regarded as aiding experiments with Scala.js only.

linking to Lucre

Lucre comes with multiple modules:

  • adjunct introduces a type-class API with fast serialization.
  • base introduces Base quasi-system type, which may or may not be transactional; it contains a Plain base system.
  • geom introduces geometric data types (required by data)
  • data introduces data structures compatible with base
  • core introduces Sys system type, extending over base, and introducing the event reaction layer; it contains in-memory and durable systems.
  • expr introduces expressions
  • confluent contains a confluently persistent system
  • bdb contains a database back-end based on Oracle BerkeleyDB Java Edition 7.

The following dependency is necessary:

"de.sciss" %% "lucre" % v

Or just for a selected module:

"de.sciss" %% "lucre-{module}" % v

Where {module} is any of the above names.

The current version v is "4.6.2".


Please see the file