An open API service indexing awesome lists of open source software.

https://github.com/7mind/izumi

Productivity-oriented collection of lightweight fancy stuff for Scala toolchain
https://github.com/7mind/izumi

cats-effect config dependency-injection distage-testkit fp-testing framework generative izumi logger logging logging-library pper productivity roles rpc scala scalajs slf4j structured-logging zio

Last synced: 1 day ago
JSON representation

Productivity-oriented collection of lightweight fancy stuff for Scala toolchain

Awesome Lists containing this project

README

          

[![Gitter](https://badges.gitter.im/7mind/izumi.svg)](https://gitter.im/7mind/izumi)
[![Patreon](https://img.shields.io/badge/patreon-sponsor-ff69b4.svg)](https://www.patreon.com/7mind)
[![Build Status](https://github.com/7mind/izumi/workflows/Build/badge.svg)](https://github.com/7mind/izumi/actions/workflows/build.yml)
[![codecov](https://codecov.io/gh/7mind/izumi/branch/develop/graph/badge.svg)](https://codecov.io/gh/7mind/izumi)
[![CodeFactor](https://www.codefactor.io/repository/github/7mind/izumi/badge)](https://www.codefactor.io/repository/github/7mind/izumi)
[![License](https://img.shields.io/github/license/7mind/izumi.svg)](https://github.com/7mind/izumi/blob/develop/LICENSE)
[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/lauris/awesome-scala)



Izumi

---


Izumi

---

[![Maven Central](https://img.shields.io/maven-central/v/io.7mind.izumi/distage-core_2.12.svg)](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.7mind.izumi%22)
[![Sonatype releases](https://img.shields.io/nexus/r/https/oss.sonatype.org/io.7mind.izumi/distage-core_2.12.svg)](https://oss.sonatype.org/content/repositories/releases/io/7mind/izumi/)
[![Sonatype snapshots](https://img.shields.io/nexus/s/https/oss.sonatype.org/io.7mind.izumi/distage-core_2.12.svg)](https://oss.sonatype.org/content/repositories/snapshots/io/7mind/izumi/)
[![Latest Release](https://img.shields.io/github/tag/7mind/izumi.svg)](https://github.com/7mind/izumi/releases)
[![Latest version](https://index.scala-lang.org/7mind/izumi/distage-core/latest.svg?color=orange)](https://index.scala-lang.org/7mind/izumi)

What is it?
===========

Izumi (jp. 泉水) is an ecosystem of independent libraries and frameworks allowing you to significantly increase productivity of your Scala development.

including the following components:

1. [distage](https://izumi.7mind.io/distage/) – Compile-time safe, transparent and debuggable multi-modal Dependency Injection framework for pure FP Scala,
2. [distage-testkit](https://izumi.7mind.io/distage/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.
3. [distage-framework-docker](https://izumi.7mind.io/distage/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.
4. [LogStage](https://izumi.7mind.io/logstage/) – Automatic structural logs from Scala string interpolations,
5. [BIO](https://izumi.7mind.io/bio/) - A typeclass hierarchy for tagless final style with Bifunctor effect types. Focused on ergonomics and ease of use with zero boilerplate.
6. [izumi-reflect](https://github.com/zio/izumi-reflect) (moved to [zio/izumi-reflect](https://github.com/zio/izumi-reflect)) - Portable, lightweight and kind-polymorphic alternative to `scala-reflect`'s Typetag for Scala, Scala.js, Scala Native and Scala 3
7. [IdeaLingua](https://izumi.7mind.io/idealingua/) (moved to [7mind/idealingua-v1](https://github.com/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,
8. [Opinionated SBT plugins](https://izumi.7mind.io/sbt/) (moved to [7mind/sbtgen](https://github.com/7mind/sbtgen)) – Reduces verbosity of SBT builds and introduces new features – inter-project shared test scopes and BOM plugins (from Maven)
9. [Percept-Plan-Execute-Repeat (PPER)](https://izumi.7mind.io/pper/) – A pattern that enables modeling very complex domains and orchestrate deadly complex processes a lot easier than you're used to.

Docs
----

* **[Documentation](https://izumi.7mind.io/)**
* **[Scaladoc](https://izumi.7mind.io/latest/release/api/)**

Example projects:

* [DIStage Example Project](https://github.com/7mind/distage-example)
* [Idealingua Example Project with TypeScript and Scala](https://github.com/7mind/idealingua-example)

Support Chats:

* [Izumi User Group [RU] on Telegram](https://t.me/scala_any/708)
* [Izumi User Group [EN] on Telegram](https://t.me/izumi_en)
* [Izumi on Gitter](https://gitter.im/7mind/izumi)
* [Discussions on Github](https://github.com/7mind/izumi/discussions)

Videos:

* [FScala 2023: Izumi Framework: Reinvent Your Productivity With Modern Pure Functional Scala](https://www.youtube.com/watch?v=Wufg8SJqqd8)
* [Izumi 1.0: Your Next Scala Stack](https://www.youtube.com/watch?v=o65sKWnFyk0)
* [Scala, Functional Programming and Team Productivity](https://www.youtube.com/watch?v=QbdeVoL4hBk)
* [Hyper-pragmatic Pure FP Testing with distage-testkit](https://www.youtube.com/watch?v=CzpvjkUukAs)
* [Livecoding: DIStage & Bifunctor Tagless Final](https://www.youtube.com/watch?v=C0srg5T0E4o&t=4971)
* [DevInsideYou — Tagless Final with BIO](https://www.youtube.com/watch?v=ZdGK1uedAE0&t=580s)
* [Source Talks — Pragmatic Pure FP approach to application design and testing with distage](https://www.youtube.com/watch?v=W60JO3TuFhc)
* [(Talk + Livecoding) Izumi Framework: reinvent your productivity with modern pure functional Scala](https://www.youtube.com/watch?v=Zk0Il6I5MQI)

Slides:

* [Izumi 1.0: Your Next Scala Stack](https://www.slideshare.net/7mind/izumi-10-your-next-scala-stack)
* [Scala, Functional Programming and Team Productivity](https://www.slideshare.net/7mind/scala-functional-programming-and-team-productivity)
* [Hyper-pragmatic Pure FP Testing with distage-testkit](https://www.slideshare.net/7mind/hyperpragmatic-pure-fp-testing-with-distagetestkit)
* [distage: Staged Dependency Injection](https://www.slideshare.net/7mind/scalaua-distage-staged-dependency-injection)
* [LogStage: Zero-cost Structured Logging](https://www.slideshare.net/7mind/logstage-zerocosttructuredlogging)
* [More slides](https://github.com/7mind/slides)

Key goals
=========

We aim to provide tools that:

1. Boost productivity and reduce code bloat
2. Are as non-invasive as possible
3. Are introspectable
4. Are better than anything else out there :3

Current state and future plans
==============================

We are looking for early adopters, contributors and sponsors.

This project is currently a work in progress.

In the future we are going to (or may) implement more tools based on PPER approach:

1. Best in the world build system
2. Best in the world cluster orchestration tool
3. Best in the world load testing/macro-benchmark tool

Projects powered by Izumi
==========================
- [d4s](https://github.com/PlayQ/d4s) - "Dynamo DB Database done Scala way". A library that allows accessing the DynamoDB in a purely-functional way.

Izumi on other platforms
========================

1. [Chibi Izumi for Python](https://github.com/7mind/izumi-chibi-py) - a basic re-implementation of `distage-core` for Python.
2. [Chibi Izumi for Typescript](https://github.com/7mind/izumi-chibi-ts) - a basic re-implementation of `distage-core` for Typescript.
3. DICS - Dependency Injection for C#, an advanced re-implementation of `distage-core` for C# based on Roslyn Analyzers, with extensive Unity support. To be released.

Contributors
============

* Run `./sbtgen.sc` to generate a JVM-only sbt project, run `./sbtgen.sc --js` to generate a JVM+JS sbt crossproject
* If working on sbtgen build files, use `scala-cli setup-ide ./sbtgen` to generate a BSP project for build files. You can attach the BSP project to existing izumi project in Intellij using `Import Module from Existing Sources...` action or open it in a separate window.

See:

- [Build notes](doc/md/build.md)
- [Project flow](doc/md/flow.md)

Adopters
========
Are you using Izumi? Please consider opening a pull request to list your organization here:

| | |
|--------------|-------|
| [Tinkoff](https://tinkoff.ru/) | Tinkoff |
| [Raiffeisen Bank Russia](https://www.raiffeisen.ru/en/) | Raiffeisen Bank Russia |
| [Tele2 Russia](https://tele2.ru/) | Tele2 Russia |
| [Evo.Pay](https://evo.company/) | Evo.Pay |
| [Glidewell.io](https://glidewell.io/) | Glidewell.io |
| [PITS Global Data Recovery Services](https://pitsdatarecovery.net/) | PITS Global Data Recovery Services |