Introducing the Open Brew Standard
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
Thoughts for future versions
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
Open Brew - Format Description
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
Unit Type Value Description
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
Elements in order of their apperance
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