{"id":19854021,"url":"https://github.com/wall-brew-co/brew-bot","last_synced_at":"2025-12-12T01:06:32.133Z","repository":{"id":37005893,"uuid":"196751017","full_name":"Wall-Brew-Co/brew-bot","owner":"Wall-Brew-Co","description":"A quick, dirty way to get randomized beer recipes","archived":false,"fork":false,"pushed_at":"2025-07-29T02:00:55.000Z","size":3277,"stargazers_count":11,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-29T14:23:38.985Z","etag":null,"topics":["beer","beer-recipes","brewing","clojure-library","clojurescript-library","randomized-beer-recipes"],"latest_commit_sha":null,"homepage":"https://brewbot.wallbrew.com/","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Wall-Brew-Co.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-07-13T17:56:03.000Z","updated_at":"2025-07-29T02:00:58.000Z","dependencies_parsed_at":"2024-01-27T19:38:31.792Z","dependency_job_id":"f80b1eaa-49dc-47ad-8116-acfc39574f1a","html_url":"https://github.com/Wall-Brew-Co/brew-bot","commit_stats":{"total_commits":239,"total_committers":9,"mean_commits":"26.555555555555557","dds":0.5523012552301255,"last_synced_commit":"733b756edf9664ebc865536ea6b8daabd29a589d"},"previous_names":["nnichols/brew-bot"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/Wall-Brew-Co/brew-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wall-Brew-Co%2Fbrew-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wall-Brew-Co%2Fbrew-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wall-Brew-Co%2Fbrew-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wall-Brew-Co%2Fbrew-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Wall-Brew-Co","download_url":"https://codeload.github.com/Wall-Brew-Co/brew-bot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wall-Brew-Co%2Fbrew-bot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270287088,"owners_count":24558616,"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","status":"online","status_checked_at":"2025-08-13T02:00:09.904Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["beer","beer-recipes","brewing","clojure-library","clojurescript-library","randomized-beer-recipes"],"created_at":"2024-11-12T14:08:21.845Z","updated_at":"2025-12-12T01:06:32.042Z","avatar_url":"https://github.com/Wall-Brew-Co.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# brew-bot - The algorithmic beer recipe generator\n\n[![Clojars Project](https://img.shields.io/clojars/v/com.wallbrew/brew-bot.svg)](https://clojars.org/com.wallbrew/brew-bot)\n[![cljdoc badge](https://cljdoc.org/badge/com.wallbrew/brew-bot)](https://cljdoc.org/d/com.wallbrew/brew-bot/CURRENT)\n[![GitHub](https://img.shields.io/github/license/Wall-Brew-Co/brew-bot)](https://github.com/Wall-Brew-Co/brew-bot/blob/master/LICENSE)\n[![Twitter Follow](https://img.shields.io/twitter/follow/WallBrew?style=social)](https://twitter.com/WallBrew)\n\n\u003e We’re making beer. I’m the brewery!\n\u003e Bender Bending Rodriguez from [*Futurama*](https://www.imdb.com/title/tt0149460/)\n\nA Clojure(Script) library to create randomized beer recipes!\n\nThe beta release of our SPA is now [available!](https://brewbot.wallbrew.com/)\n\nThis repository follows the guidelines and standards of the [Wall Brew Open Source Policy.](https://github.com/Wall-Brew-Co/open-source \"Our open source guidelines\")\n\n## Installation\n\nA deployed copy of the most recent version of [brew-bot can be found on clojars.](https://clojars.org/com.wallbrew/brew-bot)\nTo use it, add the following as a dependency in your project.clj file:\n\n[![Clojars Project](http://clojars.org/com.wallbrew/brew-bot/latest-version.svg)](http://clojars.org/com.wallbrew/brew-bot)\n\nThe next time you build your application, [Leiningen](https://leiningen.org/) or [deps.edn](https://clojure.org/guides/deps_and_cli) should pull it automatically.\nAlternatively, you may clone or fork the repository to work with it directly.\n\n## Dependencies\n\nThis library heavily relies upon the [common-beer-format](https://github.com/Wall-Brew-Co/common-beer-format) and returns all recipes and ingredients to match its specification.\nTherefore, all arguments passed to functions in brew-bot are normalized to these standards as well.\nMost importantly, it assumes measurements are provided in the [International System of Units](https://en.wikipedia.org/wiki/International_System_of_Units), also known as the modern metric system.\nSince many brewing applications, especially those based in America, operate on Imperial Measurements, you may wish to add [brewtility](https://github.com/Wall-Brew-Co/brewtility) to any applications consuming this library to assist with conversions between systems of measure.\n\n## Usage\n\nAll functions necessary to generate a recipe are provided in the core namespace.\n\n```clj\n(:require [brew-bot.core :refer :all])\n\n(def fermentables\n  (select-fermentables))\n\n(def hops\n  (select-hops :random))\n\n(def yeast\n  (select-yeasts :random {:count-cutoff 1}))\n\n(def my-random-recipe\n  (ingredients-\u003ecbf-recipe-template fermentables hops yeast))\n```\n\nEach of the three functions `select-fermentables`, `select-hops`, and `select-yeasts` support multiple arities:\n\n- Zero - Selects ingredients completely randomly across the full set provided by `common-beer-format`\n- One - Given a strategy, select ingredients from the full set provided by `common-beer-format`\n- Two - Given a strategy and a map of options, select ingredients with fine-grained control.\n\nThese are the currently supported strategies:\n\n- `:random` - Select ingredients at random with an even probability of selection and with replacement\n- `:weighted` - Select ingredients with a provided selection probability and with replacement. For example, `{:galaxy 15.0, :el-dorado 5.0, :topaz 1.0}`. In this example, galaxy hops have a 71.43% chance of being selected (15.0 / (15.0 + 5.0 + 1.0)).\n\nThese are the currently supported options:\n\n- amount-cutoff - The maximum weight, in kilograms, of fermentable ingredients to select. Defaults to `2.26796` kilograms (5 pounds)\n- count-cutoff - The maximum number of unique ingredients to allow.\n- selection-weights - A map from ingredient names to probability weights. e.g. `{:amber-liquid-extract 5.0 :biscuit-malt 15.0 ...}`. Only applicable for the `:weighted` strategy\n- default-weight - A probability weight to fall back to for ingredients not specified in selection-weights. Only applicable for the `:weighted` strategy\n\nAdditionally, per ingredient type, you may focus the possible ingredient selections.\nHops also support two additional options for determining when hops are added and their primary use case.\n\n### Fermentables\n\n- include-adjuncts? - A boolean switch to include adjuncts in the list of selectable ingredients. Defaults to `true`\n- include-dry-extracts? - A boolean switch to include dry extracts in the list of selectable ingredients. Defaults to `true`\n- include-extracts? - A boolean switch to include extracts in the list of selectable ingredients. Defaults to `true`\n- include-grains? - A boolean switch to include grains in the list of selectable ingredients. Defaults to `true`\n- include-sugars? - A boolean switch to include sugars in the list of selectable ingredients. Defaults to `true`\n\n### Hops\n\n- timing-strategy - A keyword from the set `#{:random :weighted :inferred}` to determine how hop timings and uses should be selected. Defaults to `:random`\n- time-weights - A map from hop addition times to weights. e.g. `{120 60.0 45 15.0 ...}`\n- use-weights - A map from hop use names to weights. e.g. `{\"boil\" 60 ...}`\n- include-aroma? - A boolean switch to include aromatic hops. Defaults to `true`\n- include-bittering? - A boolean switch to include bittering hops. Defaults to `true`\n- include-both? - A boolean switch to include dual-purpose hops. Defaults to `true`\n\n### Yeasts\n\n- include-brewtek? - A boolean switch to include yeasts from Brewtek. Defaults to `true`\n- include-dcl-fermentis? - A boolean switch to include yeasts from DCL Fermentis. Defaults to `true`\n- include-lallemand? - A boolean switch to include yeasts from Lallemand. Defaults to `true`\n- include-white-labs? - A boolean switch to include yeasts from White Labs. Defaults to `true`\n- include-wyeast? - A boolean switch to include yeasts from Wyeast. Defaults to `true`\n\n## Testing\n\n[doo](https://github.com/bensu/doo), a Leiningen plugin used to run ClojureScript tests in many JS environments, is already in `project.clj`.\n[Karma](https://karma-runner.github.io/latest/index.html) is used as the test runner, and is included in `package.json`.\n\nTo install Karma, simply install the Node package:\n\n```shell\nnpm install\n```\n\nThen build the application and run the tests:\n\n```shell\nlein test-build\n```\n\nThe tests will also execute on the JVM, to ensure the library is compatible for both runtime environments.\n\n## Contributors\n\n\u003ca href=\"https://github.com/Wall-Brew-Co/brew-bot/graphs/contributors\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Wall-Brew-Co/brew-bot/master/CONTRIBUTORS.svg\" alt=\"The GitHub profile pictures of all current contributors. Clicking this image will lead you to the GitHub contribution graph.\" /\u003e\u003c/a\u003e\n\n## License\n\nCopyright © [Wall Brew Co](https://wallbrew.com/)\n\nThis software is provided for free, public use as outlined in the [MIT License](https://github.com/Wall-Brew-Co/brew-bot/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwall-brew-co%2Fbrew-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwall-brew-co%2Fbrew-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwall-brew-co%2Fbrew-bot/lists"}