Izumi Project
Izumi (*jp. 泉水, spring*) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.
including the following components:
- distage – Compile-time safe, transparent and debuggable multi-modal Dependency Injection framework for pure FP Scala,
- distage-testkit – Hyper-pragmatic pure FP Test framework. Shares heavy resources globally across all test suites; lets you easily swap implementations of component; uses your effect type for parallelism.
- distage-framework-docker – A distage extension for using docker containers in tests or for local application runs, comes with example Postgres, Cassandra, Kafka & DynamoDB containers.
- LogStage – Automatic structural logs from Scala string interpolations,
- BIO - A typeclass hierarchy for tagless final style with Bifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
- izumi-reflect (moved to zio/izumi-reflect) - Portable, lightweight and kind-polymorphic alternative to
scala-reflect
’s Typetag for Scala, Scala.js, Scala Native and Scala 3 - IdeaLingua (moved to 7mind/idealingua-v1) – API Definition, Data Modeling and RPC language, optimized for fast prototyping – like gRPC or Swagger, but with a human face. Generates RPC servers and clients for Go, TypeScript, C# and Scala,
- Opinionated SBT plugins (moved to 7mind/sbtgen) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
- Percept-Plan-Execute-Repeat (PPER) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you’re used to.
Dependencies
To use, add the following into build.sbt
,
libraryDependencies ++= Seq(
// distage core library
"io.7mind.izumi" %% "distage-core" % "1.2.17-SNAPSHOT",
// distage-testkit for ScalaTest
"io.7mind.izumi" %% "distage-testkit-scalatest" % "1.2.17-SNAPSHOT" % Test,
// distage-framework: Roles, Entrypoints, Effect modules
"io.7mind.izumi" %% "distage-framework" % "1.2.17-SNAPSHOT",
// Typesafe Config support
"io.7mind.izumi" %% "distage-extension-config" % "1.2.17-SNAPSHOT",
// Classpath discovery support
"io.7mind.izumi" %% "distage-extension-plugins" % "1.2.17-SNAPSHOT",
// LogStage integration with DIStage
"io.7mind.izumi" %% "distage-extension-logstage" % "1.2.17-SNAPSHOT",
// LogStage core library
"io.7mind.izumi" %% "logstage-core" % "1.2.17-SNAPSHOT",
// Write logs as JSON
"io.7mind.izumi" %% "logstage-rendering-circe " % "1.2.17-SNAPSHOT",
// Route Slf4J logs to LogStage
"io.7mind.izumi" %% "logstage-adapter-slf4j " % "1.2.17-SNAPSHOT",
// Route LogStage logs to Slf4J
"io.7mind.izumi" %% "logstage-sink-slf4j " % "1.2.17-SNAPSHOT",
)
Development
Documentation
- Documentation
- SNAPSHOT Documentation
Scaladoc
Further reading
Example projects:
Support Chats:
- Izumi on Gitter
- Izumi User Group [RU] on Telegram
- Izumi User Group [EN] on Telegram
- Discussions on Github
Videos:
- Izumi 1.0: Your Next Scala Stack
- Scala, Functional Programming and Team Productivity (an overview of distage, distage-framework-docker & distage-testkit)
- Hyper-pragmatic Pure FP Testing with distage-testkit
- Livecoding: DIStage & Bifunctor Tagless Final on Youtube
- DevInsideYou — Tagless Final with BIO
Slides:
- Izumi 1.0: Your Next Scala Stack
- Scala, Functional Programming and Team Productivity
- Hyper-pragmatic Pure FP Testing with distage-testkit
- distage: Staged Dependency Injection
- logstage: Zero-cost Structured Logging
- More slides
Credits
YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. YourKit is the creator of YourKit Java Profiler YourKit .NET Profiler and YourKit YouMonitor.
1.2.17*