{"id":14235669,"url":"https://github.com/tofu-tf/tofu","last_synced_at":"2025-05-14T18:02:27.404Z","repository":{"id":37764421,"uuid":"179538139","full_name":"tofu-tf/tofu","owner":"tofu-tf","description":"Functional programming toolbox ","archived":false,"fork":false,"pushed_at":"2025-03-26T14:11:50.000Z","size":25989,"stargazers_count":543,"open_issues_count":31,"forks_count":97,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-05-14T18:02:00.266Z","etag":null,"topics":["concurrent","config","effects","functional-programming","hacktoberfest","logging","optics","reader-monad","tagless-final","typeclasses"],"latest_commit_sha":null,"homepage":"https://tofu-tf.github.io/tofu/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tofu-tf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-04-04T16:44:51.000Z","updated_at":"2025-03-26T08:45:02.000Z","dependencies_parsed_at":"2023-02-13T07:45:58.009Z","dependency_job_id":"7374615f-5552-429c-9dda-20723d868f12","html_url":"https://github.com/tofu-tf/tofu","commit_stats":{"total_commits":1289,"total_committers":77,"mean_commits":16.74025974025974,"dds":0.7121799844840961,"last_synced_commit":"2ebd463927cabbbe72d764408e105450d5d31f44"},"previous_names":["tinkoffcreditsystems/tofu"],"tags_count":52,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tofu-tf%2Ftofu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tofu-tf%2Ftofu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tofu-tf%2Ftofu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tofu-tf%2Ftofu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tofu-tf","download_url":"https://codeload.github.com/tofu-tf/tofu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254198453,"owners_count":22030964,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurrent","config","effects","functional-programming","hacktoberfest","logging","optics","reader-monad","tagless-final","typeclasses"],"created_at":"2024-08-20T21:02:15.851Z","updated_at":"2025-05-14T18:02:27.375Z","avatar_url":"https://github.com/tofu-tf.png","language":"Scala","funding_links":[],"categories":["Scala"],"sub_categories":[],"readme":"\u003cimg align=\"right\" src=\"logos/tofu-mascot.png\" height=\"170px\" style=\"padding-left: 20px\"/\u003e\n\n# ToFu\n\n[![Build \u0026 Release](https://github.com/tofu-tf/tofu/workflows/Scala%20CI/badge.svg)](https://github.com/tofu-tf/tofu/actions?query=workflow%3A%22Scala+CI%22)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/tf.tofu/tofu-core-ce3_2.13/badge.svg)](https://maven-badges.herokuapp.com/maven-central/tf.tofu/tofu-core-ce3_2.13)\n[![Sonatype Nexus (Snapshots) badge](https://img.shields.io/nexus/s/https/oss.sonatype.org/tf.tofu/tofu-core-ce3_2.13.svg)](https://oss.sonatype.org/content/repositories/snapshots/tf/tofu/tofu-core-ce3_2.13/)\n[![Discord Chat](https://img.shields.io/discord/657318688025739283.svg)](https://discord.gg/qPD5GGH)\n[![Zulip](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://tofu-tf.zulipchat.com)\n[![Scala Steward badge](https://img.shields.io/badge/Scala_Steward-helping-blue.svg?style=flat\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://scala-steward.org)\n\n**Functional programming toolkit aimed at taming the complexity of Tagless Final approach.** \n\n# Quick Start\n\n## see [the docs on the microsite](https://tofu-tf.github.io/tofu)\n\n## see the [examples in the `examples` directory](https://github.com/tofu-tf/tofu/tree/master/examples)\n\nTo use the whole utils pack just add to your `build.sbt`: \n\n```scala\nlibraryDependencies += \"tf.tofu\" %% \"tofu\" % \"latest version in badge\"\n```\n\nOf course, you can also specify an exact list of `tofu` modules that you want to add to your dependencies (used in place\nof `\"tofu\"`):\n\n* `tofu-kernel` for core independent utils\n  * `tofu-kernel-cats-mtl` for interop between `tofu-kernel` and [Cats MTL](https://github.com/typelevel/cats-mtl)\n* `tofu-core-*` for core utils (replace suffix `*` with `ce2` or `ce3` depends on which cats-effect version you use)\n* `tofu-core-higher-kind` for higher kinded utils\n* `tofu-concurrent` for concurrent utils\n* `tofu-config` for config utils\n* `tofu-data` for data utils\n* `tofu-derivation` for derivation utils and [derevo](https://github.com/tofu-tf/derevo) annotations\n* `tofu-doobie` for [Doobie](https://github.com/tpolecat/doobie) utils\n* `tofu-enums` for [Enumeratum](https://github.com/lloydmeta/enumeratum) utils\n* `tofu-env` for `Env` (a variation of a Reader Monad based on [Monix](https://github.com/monix/monix) Task)\n* `tofu-fs2-interop` for interop with [fs2](https://github.com/functional-streams-for-scala/fs2)\n* `tofu-streams` for streaming utils\n* `tofu-logging` for the whole set of logging utils (derivation, layout, structured, util, interop)\n  * `tofu-logging-derivation` for logging derivation only\n  * `tofu-logging-layout` for logging layout only\n  * `tofu-logging-structured` for logging structured only\n  * `tofu-logging-util` for logging util only\n  * `tofu-logging-refined` for interop between tofu-logging and [Refined](https://github.com/fthomas/refined) \n  * `tofu-logging-shapeless` for interop between tofu-logging and [Shapeless](https://github.com/milessabin/shapeless) tag\n  * `tofu-logging-log4cats` for interop with [Log4Cats](https://github.com/typelevel/log4cats)\n* `tofu-memo` for caching utils\n* `tofu-observable` for `monix.reactive.Observable` utils\n* `tofu-zio-interop` for interop with [ZIO](https://zio.dev) (core, logging)\n  * `tofu-zio-core` for ZIO instances only\n  * `tofu-zio-logging` for ZIO logging only\n\n\u003cimg align=\"right\" src=\"logos/tofu-logo.png\" height=\"100px\" style=\"padding-left: 5px\"/\u003e\n\n\n# Adopters\n\nProud user of ToFu? Feel free to [add your company!](https://github.com/tofu-tf/tofu/edit/master/README.md)\n\n\u003ca href=\"https://tinkoff.ru/\"\u003e\u003cimg width=\"40%\" src=\"logos/t-logo.svg?sanitize=true\" /\u003e\u003c/a\u003e\n\n\u003ca href=\"https://vivid.money/\"\u003e\u003cimg width=\"40%\" src=\"logos/vivid.svg?sanitize=true\" /\u003e\u003c/a\u003e\n\n\u003ca href=\"https://tele2.ru/\"\u003e\u003cimg width=\"40%\" src=\"logos/tele2-ru-logo.svg?sanitize=true\" /\u003e\u003c/a\u003e\n\n\u003ca href=\"https://konfy.care/\"\u003e\u003cimg width=\"40%\" src=\"logos/konfy-logo.svg?sanitize=true\" /\u003e\u003c/a\u003e\n\n\u003ca href=\"https://www.raiffeisen.ru/en/\"\u003e\u003cimg width=\"40%\" src=\"logos/raiffeisen-logo.svg?sanitize=true\" alt=\"Raiffeisen Bank Russia\"/\u003e\u003c/a\u003e\n\n\u003ca href=\"https://www.rms.com/\"\u003e\u003cimg width=\"15%\" src=\"logos/rms-logo.svg?sanitize=true\" alt=\"Risk Management Solutions\" /\u003e\u003c/a\u003e\n\n# Contributing\n\nPlease note we use the following labels for automated release descriptions:\n  * `chore` if your PR does not change any types and runtime semantics\n  * `fix` if your PR merely fixes incorrect behavior\n\n## Formatting\n  We have an automated check for style conformance. You can run `sbt checkfmt` before PR.\n  If you have any trouble during this check, just run `sbt fmt` and commit again.\n  \n# Copyright\nCopyright the maintainers, 2019-2024\n\nLogos made with love by [@impurepics](https://twitter.com/impurepics)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftofu-tf%2Ftofu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftofu-tf%2Ftofu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftofu-tf%2Ftofu/lists"}