https://github.com/tofu-tf/tofu
Functional programming toolbox
https://github.com/tofu-tf/tofu
concurrent config effects functional-programming hacktoberfest logging optics reader-monad tagless-final typeclasses
Last synced: 2 months ago
JSON representation
Functional programming toolbox
- Host: GitHub
- URL: https://github.com/tofu-tf/tofu
- Owner: tofu-tf
- License: apache-2.0
- Created: 2019-04-04T16:44:51.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-03-26T14:11:50.000Z (4 months ago)
- Last Synced: 2025-05-14T18:02:00.266Z (2 months ago)
- Topics: concurrent, config, effects, functional-programming, hacktoberfest, logging, optics, reader-monad, tagless-final, typeclasses
- Language: Scala
- Homepage: https://tofu-tf.github.io/tofu/
- Size: 24.8 MB
- Stars: 543
- Watchers: 22
- Forks: 97
- Open Issues: 31
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# ToFu
[](https://github.com/tofu-tf/tofu/actions?query=workflow%3A%22Scala+CI%22)
[](https://maven-badges.herokuapp.com/maven-central/tf.tofu/tofu-core-ce3_2.13)
[](https://oss.sonatype.org/content/repositories/snapshots/tf/tofu/tofu-core-ce3_2.13/)
[](https://discord.gg/qPD5GGH)
[](https://tofu-tf.zulipchat.com)
[](https://scala-steward.org)**Functional programming toolkit aimed at taming the complexity of Tagless Final approach.**
# Quick Start
## see [the docs on the microsite](https://tofu-tf.github.io/tofu)
## see the [examples in the `examples` directory](https://github.com/tofu-tf/tofu/tree/master/examples)
To use the whole utils pack just add to your `build.sbt`:
```scala
libraryDependencies += "tf.tofu" %% "tofu" % "latest version in badge"
```Of course, you can also specify an exact list of `tofu` modules that you want to add to your dependencies (used in place
of `"tofu"`):* `tofu-kernel` for core independent utils
* `tofu-kernel-cats-mtl` for interop between `tofu-kernel` and [Cats MTL](https://github.com/typelevel/cats-mtl)
* `tofu-core-*` for core utils (replace suffix `*` with `ce2` or `ce3` depends on which cats-effect version you use)
* `tofu-core-higher-kind` for higher kinded utils
* `tofu-concurrent` for concurrent utils
* `tofu-config` for config utils
* `tofu-data` for data utils
* `tofu-derivation` for derivation utils and [derevo](https://github.com/tofu-tf/derevo) annotations
* `tofu-doobie` for [Doobie](https://github.com/tpolecat/doobie) utils
* `tofu-enums` for [Enumeratum](https://github.com/lloydmeta/enumeratum) utils
* `tofu-env` for `Env` (a variation of a Reader Monad based on [Monix](https://github.com/monix/monix) Task)
* `tofu-fs2-interop` for interop with [fs2](https://github.com/functional-streams-for-scala/fs2)
* `tofu-streams` for streaming utils
* `tofu-logging` for the whole set of logging utils (derivation, layout, structured, util, interop)
* `tofu-logging-derivation` for logging derivation only
* `tofu-logging-layout` for logging layout only
* `tofu-logging-structured` for logging structured only
* `tofu-logging-util` for logging util only
* `tofu-logging-refined` for interop between tofu-logging and [Refined](https://github.com/fthomas/refined)
* `tofu-logging-shapeless` for interop between tofu-logging and [Shapeless](https://github.com/milessabin/shapeless) tag
* `tofu-logging-log4cats` for interop with [Log4Cats](https://github.com/typelevel/log4cats)
* `tofu-memo` for caching utils
* `tofu-observable` for `monix.reactive.Observable` utils
* `tofu-zio-interop` for interop with [ZIO](https://zio.dev) (core, logging)
* `tofu-zio-core` for ZIO instances only
* `tofu-zio-logging` for ZIO logging only
# Adopters
Proud user of ToFu? Feel free to [add your company!](https://github.com/tofu-tf/tofu/edit/master/README.md)
# Contributing
Please note we use the following labels for automated release descriptions:
* `chore` if your PR does not change any types and runtime semantics
* `fix` if your PR merely fixes incorrect behavior## Formatting
We have an automated check for style conformance. You can run `sbt checkfmt` before PR.
If you have any trouble during this check, just run `sbt fmt` and commit again.
# Copyright
Copyright the maintainers, 2019-2024Logos made with love by [@impurepics](https://twitter.com/impurepics)