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
- Host: GitHub
- URL: https://github.com/7mind/izumi
- Owner: 7mind
- License: bsd-2-clause
- Created: 2017-11-03T10:39:42.000Z (over 8 years ago)
- Default Branch: develop
- Last Pushed: 2024-10-29T13:00:22.000Z (over 1 year ago)
- Last Synced: 2024-10-29T14:49:56.631Z (over 1 year ago)
- Topics: 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
- Language: Scala
- Homepage: https://izumi.7mind.io
- Size: 17.8 MB
- Stars: 615
- Watchers: 20
- Forks: 66
- Open Issues: 62
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- awesome-zio - logstage
- fucking-awesome-scala - **izumi** - oriented collection of lightweight fancy stuff for Scala toolchain |   (Table of Contents / Modularization and Dependency Injection)
- awesome-scala - DIStage ★ 75 ⧗ 0 - Staged Dependency Injection with higher-kinded polymorphism and cats/zio support. (Modularization and Dependency Injection)
- awesome-scala - **izumi** - oriented collection of lightweight fancy stuff for Scala toolchain |   (Table of Contents / Modularization and Dependency Injection)
README
[](https://gitter.im/7mind/izumi)
[](https://www.patreon.com/7mind)
[](https://github.com/7mind/izumi/actions/workflows/build.yml)
[](https://codecov.io/gh/7mind/izumi)
[](https://www.codefactor.io/repository/github/7mind/izumi)
[](https://github.com/7mind/izumi/blob/develop/LICENSE)
[](https://github.com/lauris/awesome-scala)
---
---
[](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22io.7mind.izumi%22)
[](https://oss.sonatype.org/content/repositories/releases/io/7mind/izumi/)
[](https://oss.sonatype.org/content/repositories/snapshots/io/7mind/izumi/)
[](https://github.com/7mind/izumi/releases)
[](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/) |
|
| [Raiffeisen Bank Russia](https://www.raiffeisen.ru/en/) |
|
| [Tele2 Russia](https://tele2.ru/) |
|
| [Evo.Pay](https://evo.company/) |
|
| [Glidewell.io](https://glidewell.io/) |
|
| [PITS Global Data Recovery Services](https://pitsdatarecovery.net/) |
|
