Soundness is an ecosystem of libraries for writing direct-style code with Scala 3, in a number of broad domains:
cli, for building commandline applicationsdata, for working with data in various formssci, for scientific and mathematical operationstest, for testingtool, for building developer toolsweb, for developing web applications
The Soundness website includes more details about developing software using Soundness, and should be the primary source of documentation about Soundness for users.
Soundness is composed of over one hundred modules. Each module has its own
unique name and purpose, and may be used alone (with its dependencies) or in
combination with other modules in the ecosystem. Most modules have a core
component, but many have additional components for optional functionality.
Modules are distributed in bundles, one for each of the domains above.
Releases are published on Maven Central as bundles, each of which packages the modules for one domain, and can be specified as follows:
-
To include a bundle of modules, use
dev.propensive:soundness-<bundle>:<version>where<bundle>is one of:base, the core abstractions every other bundle builds oncli,data,sci,test,toolorweb, for the domains abovewasi, the WASI backends for the platform-abstraction modulesstaged, the expansion-time variants of the data-format modulesandroid, the Android dexing and packaging stages
for example,
dev.propensive:soundness-sci:0.65.0. A bundle depends on the other bundles it needs, sosoundness-scibrings insoundness-baseautomatically. -
To include everything in Soundness, use
dev.propensive:soundness:<version>. This covers every bundle except the two opt-in ones,stagedandandroid, whose dependencies (the staging compiler and R8) are heavyweight enough that they should only ever be asked for by name. -
The compiler plugins are published separately, since they are used with
-Xplugin:rather than on the classpath:dev.propensive:larceny-plugin,dev.propensive:umbrageous-pluginanddev.propensive:beneficence-plugin.
Individual modules do not have coordinates of their own: Maven Central limits how many files a single deployment may contain, and Soundness has too many modules to publish each one separately.
Version numbers are synchronized across all bundles, and the latest release version is shown at the top of this page. Binary compatibility is not guaranteed between modules with different version numbers.
New versions of Soundness are usually released weekly.
Soundness is currently built using Mill, with GNU Make providing some convenient shortcuts.
make testwill compile everything and run the full test suite with fumemake test.<module>will compile and run the tests for the module<module>make devwill compile all source files continuously, watching for changesmake publishLocalwill publish a version of Soundness locally
Soundness requires Scala 3.7. Java 17 should be assumed as a minimum requirement for most modules, however Mandible (which uses the new classfile API) requires Java 24 or later.