The beer brewing scene changes. Since the craftbeer revolution came along, brewing beer became a popular sport again. Everyone has the ability to brew a custom beer and make experiences by creating own recipes. And that's great. But the distribution of these recipes is a disaster. There are so much cool projects (such as craftbeerpi, kleiner-brauhelfer and so on) but all of them use individual data exchange formats like sql or the outdated beerxml. So we still miss an offical, fully featured standard for brewing recipes. Let us design a worldwide standard format in json together. Let's make the default for home brewing automation. Let's make it easy, sharing brew recipes across the world. Everyone with some experience in brewing and json-skills is welcome!
- Json Schema as definition format
- Versioning for further development
- Variable and scalable ingredient amounts
- Multi language support
- Automation details possible but not required
- Free definition of brew steps
- Enums for often used values
- Support for multiple units, etc.
- Finalize the JSON Example
- Full Documentation in Wiki
- Extract json schema from example
- Add description, required fields, enum values to schema
- Release version 1.0.0
- Swagger json definition
- Wikipedia article about Open Brew
- Formula and Codelibs for extrapolating amounts
- Minimum requirements of brew equipment (container size, ...)
- Free online hub for all recipes worldwide (open-brew-hub.com)
- Directly import your favourite recipes to your IoT-Device
- Address all automated parts (SSRs; Pumps; ...) in this json format
TODO: Translate grain types and add them to "Wording"
Value | Grain Type | Extract in Grams |
---|---|---|
pilsenerMalt | Pilsener Malz | 800 - 840 |
viennaMalt | Wiener Malz | 800 - 820 |
munichMalt | Münchner Malz | 790 - 820 |
caraMalt | Caramalz | 720 - 750 |
caraMaltDark | Caramalz, dunkel | 720 - 760 |
wheatMalt | Weizenmalz | 800 - 820 |
roastedMalt | Röstmalz | 700 - 750 |
corn | Mais | 800 - 810 |
rice | Reis | 800 |
grainFlakes | Getreideflocken | 650 - 750 |
saccharose | Haushaltszucker | 1000 |
dryMaltExtract | Malzextrakt (trocken) | 990 |
liquidMaltExtract | Flüssigmalzextrakt | 800 |
honey | Honig | 680 - 750 |
Some elements need a concrete specification of their unit types. The supported unit types for the respective element are defined below.
Element | Type | Possible Values |
---|---|---|
ratioUnit | string | gramPerLiter, percent, degreePlato |
tempUnit | string | celsius, fahrenheit, kelvin |
timeUnit | string | week, hour, minute, second, millisecond |
tasteUnit | string | ibu |
chemicalUnit | string | dh, ppm |
colorUnit | string | srm, lovibond, ebc |
weightUnit | string | grams, kilograms |
Value | Display Hint | Description |
---|---|---|
gramPerLiter | g/L | Defines the ratio amount of grams for each liter |
percent | % | Defines the ratio amount in percent (fraction of 100) |
volumePercent | % vol. | MISSING: Has anyone a good description? |
degreePlato | °P | MISSING: Has anyone a good description? |
celsius | °C | Temperature using Celsius skala |
fahrenheit | °F | Temperature using Fahrenheit skala |
kelvin | °K | Temperature using Kelvin skala |
week | You don't know that? Go back to school ;) | |
hour | You don't know that? Go back to school ;) | |
minute | You don't know that? Go back to school ;) | |
second | You don't know that? Go back to school ;) | |
millisecond | You don't know that? Go back to school ;) | |
ibu | IBU | International Bitterness Unit for measuring bitterness |
dh | °dH | Measuring unit for alkalinity or "hardness" of water |
ppm | ppm | Measuring unit for alkalinity or "hardness" of water |
srm | SRM | "Standard Reference Method" Standard color measuring unit outside of europe |
lovibond | °L | "Degree Lovibond" First, oldest and rareliest color measuring unit |
ebc | EBC | "European Brewing Convention" Standard color measuring unit in europe |
Element | Type | Description |
---|---|---|
openBrewVersion | string | Defines the version of the Open Brew Format (major.minor.patch) |
encoding | string | Defines the encoding of the current json document, standard ist "UTF-8" |
recipeName | string | The Name of the beer brewing recipe |
recipeVersion | number | Defines the version of the recipe. Every change increases the value by 1, beginning by 1 |
createDate | date-time | Provides the date and time when this recipe has been created |
changeDate | date-time | Provides the date and time of the last change to this recipe |
brewStyle | string | Brew style, i. e. "Amber Lager". Freetext, too much variations here |
descriptions | array Multi language texts | Describe your recipe in a few words. Muliple languages supported |
matureTime | object Amount | The expected timespan the beer needs to mature |
originalWort | object Amount | The amount of original wort in your maish. Nearly always describes in percent |
bitterness | object Amount | Describes the bitterness of your beer. IBU is the unit |
carbonDioxide | object Amount | The little thing, that makes you burp comes up with that likely name. It's preferred to define it in gram per liter |
author | object Author | Provides information about the author of the current recipe |
ingredients | object Ingredients | Provides every commodity you need to start brewing |
brewing | array Brewing | Describes the hard way to glory. The steps to your own beer. And that manual and also fully automated. Automated is not so hard ;) |
Element | Type | Description |
---|---|---|
private | boolean | Indicates if the author is a private or commercial brewer |
brewery | string | Name of the brewery |
brewMaster | string | Full name of the brew master, i. e. "Hannes Pfaffenhuber" |
url | string | A valid url to the authors homepage, i. e. "http://holdmybeer.de" |
phone | string | The phone number with country code, i. e. "+49 911 123456789" |
address | object Address | The full address of the brewery or the private brewmaster |
geo | object Geo | Provides geo coordinates of the address for displaying at maps, etc. |
Element | Type | Description |
---|---|---|
street | string | Full street name with house number and additions (i. e. "Street 14 A") |
zip | string | Zip of the address, string for international use |
city | string | The city of the address. For multilingual citynames, use english version |
federated State | string | The federated state (not available in all countries) i. e. "Bavaria" |
country | string | The name of the brewers country |
Element | Type | Description |
---|---|---|
latitude | number | Latitude of the address (value between -90 and 90) |
longitude | number | Longitude of the address (value between -180 and 180) |
Element | Type | Description |
---|---|---|
water | object Water | An object that provides some data about the brewing water |
solids | array Solid | This array contains all used solids and their details |
hops | array Hop | This array contains all hops and their details |
yeast | object Yeast | The details about the yeast to use |
Element | Type | Description |
---|---|---|
alkalinity | object Amount | Defines the required, ideal alkalinity of brewing water |
Element | Type | Description |
---|---|---|
name | string | Name of the used solid |
type | enum | Type of the used solid (Supported Solids) |
relativeAmount | object Amount | The relative amount in percent. All amounts found in solids-array together must yield 100 |
color | object Amount | The color in the unit type. So that the final color of the beer can be calculated |
Seems like here is something to do...
Element | Type | Description |
---|---|---|
name | string | Name of the used yeast |
Element | Type | Description |
---|---|---|
mashing | object Mashing | Stop! Mashing Time! Here are all rest steps defined. |
sparging | object Sparging | Steps for sparging |
fermentation | object Fermentation | Steps for fermentation |
Element | Type | Description |
---|---|---|
mashInTemperature | object Amount | When this temperature has been reached, add solids to your mash |
rests | array Rest | Defines the rests at each temperature levels |
Seems like here is something to do...
Seems like here is something to do...
Seems like here is something to do...
Seems like here is something to do...
Some types are more or less often reused in open brew format.
Element | Type | Description |
---|---|---|
language | string | Defines the language by ISO 639-1, i. e. "en" |
text | string | The text value in the specified language |
Element | Type | Description |
---|---|---|
amout | number | A double-precision floating point number representing the value |
{current}Unit | string | The unit type of the amount. For possible element names and values see Supported Unit Types |