# BeerXML

Short description: Markup language
Filename extension .xml application/xml[1]text/xml[2] public.xml public.text Markup language XML SGML 1.0
Status Published 2005 Brad Smith, Drew Avis, Michael Taylor, Andrew Perron, David Johnson XML Schema Data Serialization BeerXML

BeerXML is a free, fully defined XML data description[3] standard designed for the exchange of beer brewing recipes[4] and other brewing data. Tables of recipes as well as other records such as hop schedules and malt bills can be represented using BeerXML for use by brewing software.

BeerXML is an open standard and as a subset of Extensible Markup Language (XML). BeerXML is a markup language that defines a set of rules for encoding documents in a format that is both human-readable and machine-readable.

BeerXML is supported by a number of web sites, computer programmes[5][6] and an increasing number of Android[7] Windows Phone[8] and iOS apps.[9][10]

Plugins and extensions supporting BeerXML have been written for a variety of platforms including Ruby via RubyGems,[11] WordPress,[12] PHP[13] and JavaScript[14]

Many brewing hardware manufacturers incorporate BeerXML into their systems[15][16][17] and third party plugins and patches are being developed for brewery control hardware and embedded systems[18] allowing the automation and fine control and timing of processes such as mashing[19] and potentially fermentation.

## Common applications and examples of usage

BeerXML is used in both amateur[20] and professional[21] brewing and facilitates the sharing of brewing data over the internet.[22] Users of different applications such as the open-source software[23] Brewtarget (with more than 52,000 downloads [24] ) can share data via XML with users of popular proprietary software such as Beersmith and ORRTIZ: BMS 4 Breweries or upload their data to share on BeerXML compatible sharing sites and cloud platforms such as Brewtoad (over 50,000 registered users[25] ) or the Beersmith Recipe Cloud (with 43,000 registered users). A user of a recipe design and sharing and creation site such as Brewersfriend.com can import and export[26] BeerXML to and from mobile apps or enter it into a brewing competition database[27] such as The Brew Competition Online Entry & Management (BCOE&M) system.

The adoption of BeerXML as a standard is leading to new developments such as ingredients databases[28] which attempt to standardise ingredients definitions and characteristics. Brewers can use platforms like Brewblogger.com to create recipes and log their brewday for publication as a blog and for export to databases[29][30] and common spreadsheet applications.[31]

JavaScript applications such as brauhaus.js (developed from the Malt.io recipe sharing site[32] ) allow users to run them on a local machine or web browser for execution through any standards compliant web browser.

## Supported fields

The following fields form the core information of the BeerXML structure

• Recipes
   Recipe name
Brewer
Brewing method (All grain, Partial Mash, Extract )
Recipe Type (Ale, Lager, Hybrid, etc.)
Recipe volume (Run length)
Boil volume (Wort size)
Boil time (duration)
Recipe efficiency
Estimated values
OG (Original Gravity)
FG (Final Gravity)
Color (SRM)
Bitterness (IBU)
Alcohol content (%abv)

• Hops
   Name
Origin
Description
Alpha acids
Beta acids
Storageability (HSI)
Humulene
Caryophyllene
Cohumulone
Myrcene
Farsene (not explicitly included in BeerXML v1)
Total oil (not explicitly included in BeerXML v1)


Recipe Specific - When added (Boil, Mash, First Wort, Dry, etc.)

   Amount
Time (duration)

• Fermentables
   Name
Origin
Description
Type (Grain, Sugar, etc.)
Potential
Recommend Mash (true or false)
IBU gal/lb (for hopped extract)
Color (°Lovibond)
Moisture content
Protein content
Diastatic power (°Lintner)
Maximum used (% of grist)


Recipe Specific

   Amount

• Additives (Called MISC for miscellaneous in BeerXML v1)
   Name
Description
Type (Fining, Spice, Herb, etc.)


Recipe Specific - When added (Boil, Primary, etc.)

   Amount
Time (duration)


Yeasts

   Name
Supplier
Catalog number
Description
Type (Ale, Lager, etc.)
Form (Dry, Liquid, etc.)
Best for
Temperature range
Flocculation
Attenuation
Max reuse


Recipe Specific

   Amount
Added to secondary (true or false)
Time cultured


## Limitations

BeerXML 1.0 supports no more than three fermentation steps.[33] While this is not a real world limitation for many brewers, it does introduce a discrepancy where a software tool or web service that allows several or unlimited fermentation steps wishes to implement BeerXML as an import/export mechanism. For example; where a fermentation schedule instruction to pitch at 21 degrees Celsius, allow to drop to 17 over three days and then decrease by 1 degree per day until the wort reaches 10 degrees, hold for 12 days before racking for maturation. This could not be accommodated within the formal structure requiring the use of informal/optional and non machine readable fields.

All units are converted to SI units internally. As a result, there is loss of precision when converting non SI units whether they be Imperial, US Customary or metric.

Hop oil contributions in the copper are not explicitly supported in the current definition.

Farsene levels are not explicitly supported in the current definition.

No distinction is made between weight and mass[34]

## Development

The BeerXML standard has a proposed second version which has been mooted and is under development. It has not been validated or published as its feature set is still under discussion.[35]

As in XML, all files begin with a header line as the first line. After the XML header a record set should start (for example<RECIPES>…</RECIPES> or <HOPS> … </HOPS>).

Required XML Header Example with Recipes tag:

<?xml version="1.0" encoding="UTF-8"?>
<RECIPES>
…
</RECIPES>

## Tag Names

Tag names are always uppercase. For example, "HOP" is acceptable, but "hop" and Hop" are not.

## Version

All records have a required <VERSION> tag that denotes the version of the XML standard. At present, all are set to the integer 1 for this version of the standard. It is intended that future versions of the standard will be backward compatible with older versions, but the VERSION tag allows newer programmes to check for a higher version of the standard or do conversions if required to be backward compatible.

## Data Formats

• Record Set – A special tag that starts a particular set of data. For example, an XML table that consists of a set of hops records might start with a <HOPS> tag to denote that this is the start of hops records. After the last record, a </HOPS> tag would be used.
• Record - Denotes a tag that starts or ends a particular record—for example "HOP" might start a hops record or "FERMENTABLE" might start a fermentable record.
• Percentage - Denotes a percentage - all percentages are expressed as percent out of 100- for example 10.4% is written as "10.4" and not "0.104"
• List - The data has only a fixed number of values that are selected from the list in the description table for the tag. These items are case sensitive, and no other values are allowed.
• Text - The data is free format text. For multiline entries, line breaks will be preserved where possible and the text may be truncated on import if the text is too long for the importing program to store. Multiline entries may be split with either a newline (Unix format) or a carriage return – newline combination (DOS format). Importing programmes should accept either.
• Boolean - The Boolean data type may be either TRUE or FALSE, with TRUE and FALSE in capitals. A default value should be specified for optional fields - the default is used if the value is not present.
• Integer - An integer number with no decimal point. May include negative values - examples include ...-3, -2, -1, 0, 1, 2, 3,...
• Floating Point - A floating point number, usually expressed in its simplest form with a decimal point as in "1.2", "0.004", etc... Programmes should endeavor to store as many significant digits as possible to avoid truncating or losing small values.

## Units

All units are fixed. It is the responsibility of the importing or exporting programme to convert to and from the units below if needed.

Weight Units
All weights are measured in Kilograms (kg). For small values the exporting programme will make an effort to preserve as many significant digits as possible.
Volume Units
All volumes are measured in Litres (l). For small values the exporting programme will make an effort to preserve as many significant digits as possible.
Temperature Units
All temperatures are measured in degrees Celsius.
Time Units
All times are given in minutes or fractions thereof – unless otherwise specified in the tag description.
Specific Gravity Units
Specific gravity are measured relative to the weight of the same size sample of water. For example, “1.035”, “1.060”, and so on.
Pressure Units
Pressures are measured in kilopascals (kPa)

## Non-Standard Tags

As per the XML standard, all non-standard tags should be ignored by the importing program. This allows an implementation to store additional information if desired by using their own tags. Any tags not defined as part of this standard may safely be ignored by the importing program.

## Optional tags

The optional 'Appendix A' adds tags for use in the display of brewing data using XML style sheets or XML compatible report generators. As the tags in the appendix are for display only and may include rounded values and varying units. These appendix tags are intended for display and not for data import.

## References

1. "XML Media Types, RFC 3023". Internet Engineering Task Force. January 2001. pp. 9–11. Retrieved 2010-01-04.
2. "XML Media Types, RFC 3023". Internet Engineering Task Force. January 2001. pp. 7–9. Retrieved 2010-01-04.
3. "BeerXML An XML Standard for Beer Brewing Data Version 1.0". BeerXML.com. BeerXML group. Retrieved 14 February 2014.
4. Johnston, Casey. "A computerized beer machine takes the legwork out of home-brewing". CNN.com. CNN/Turner. Retrieved 15 February 2014.
5. Revell, Matthew. "Beer as in beer". launchpad.net. Launchpad. Retrieved 19 February 2014.
6. "Mise à jour : JolieBulle 2.9 - Importation d'une liste d'ingrédients. Il est maintenant possible d'importer une liste d'ingrédients au format BeerXML" (in French). Tuxfamily.org. Retrieved 15 February 2014.
8. "Pocket Brewer Windows Phone BeerXML". The Pocket Brewer. Retrieved 14 February 2014.
9. Parker, David. "A recipe formulation App for iOS". DJP Software. Retrieved 15 February 2014.
10. Griffith, William. "HomeBrew Assistant". homebrewassistant.com. iTunes Store. Retrieved 15 February 2014.
11. Palmer, Brian. "BeerXML At RubyGems". Ruby Gems. Retrieved 15 February 2014.
12. Springer, Derek. "BeerXML Shortcode For WordPress". WordPress.org. WordPress. Retrieved 15 February 2014.
13. Hotelling, George. "A PHP BeerXML parser and generator". GitHub. Retrieved 15 February 2014.
14. Taylor, Daniel G.. "A BeerXML import and export plugin for Brauhaus.js". GitHub. Retrieved 15 February 2014.
15. Ingraham, Nathan. "The PicoBrew Zymatic is the Nespresso of beer brewing". Vox Media. The Verge. Retrieved 15 February 2014.
16. Tyson, Mark. "Ex-Microsoft execs launch beer making device on Kickstarter". Hexus. HEXUS.net is the UK’s number one independent technology news and reviews website. Retrieved 15 February 2014.
17. Casey, Johnston. "A computerized beer machine takes the legwork out of home-brewing". arstechnica.com. arstechnica.com/gadgets/2013/10/a-computerized-beer-machine-takes-the-legwork-out-of-home-brewing/. Retrieved 14 February 2014.
19. Wolf, Michael. "Here’s The Little Box That Could Change The Beer World Forever". medium.com. Retrieved 15 February 2014.
20. "Brew Competition BeerXML advice page". Retrieved 11 February 2014.
21. "3BBL Micro Brewery". Bru-Gear.com. BruGear LLC. Retrieved 15 February 2014.
22. "Brew Monkey BeerXML page". brew-monkey.com.
23. "Brewtarget". gitorious.org. Gitorious. Retrieved 15 February 2014.
24. "Linux.com article on Brewtarget". Linux.com. Retrieved 14 February 2014.