org-mode kombucha
Posted: September 04, 2025
Categories:
food, orgmode
I've been making kombucha for some time now. The science is very much non-exact and fascinating. To keep track of experiments, I use a self-contained org-mode file.
Kombucha 101
Kombucha is a fermented drink, made with SCOBY (Symbiotic Culture Of Bacteria and Yeast), tea, sugar and water. The resulting ferment is fizzy, acidic, sweet, and makes for a deliciously refreshing drink.
I've been using variations of this simple state machine recipe:
- Jar, with breathable cloth cover, 1 week, ambient temperature:
- SCOBY
- 0.1 liter of previous batch
- 1 liter of water
- 8 grams of black tea, infused
- 75 grams of sugar, dissolved
- Bottle, airtight, 1 week, ambient temperature
- Fridge
State transitions are naturally Jar → Bottle → Fridge.
The week cycle is convenient if, like me, you have a set time every week for state transition duties, i.e. moving the jar content to a bottle and preparing a new jar.
Adjusting parameters (such as quantity of sugar, fermenting time, temperature) and experimenting with additional ingredients (usually fruits) allows to play with a large number of variations and obtain a different drink for every batch.
Bootstrapping requires obtaining a SCOBY and a bit of kombucha from a friend already brewing – which is ideal because SCOBYs grow and fork after a while, and we don't want to waste anything. Alternatively, starter kits can be purchased in stores or online.
Capturing state and properties
Time for org-mode! Each batch is an org-mode node, with a state, properties, and additional notes if necessary.
* JAR Batch #4... * BOTTLE Batch #3... * FRIDGE Batch #2... * PAST Batch #1...
The state of a batch is captured with the following sequence of todo keywords:
#+TODO: JAR | BOTTLE(!) FRIDGE(!) PAST(!)
A batch starts in a jar, moves to one or more bottles after a week, moves to the fridge after another week, is being consumed (the best part!), and then archived.
A batch has some attributes:
* FRIDGE Batch #2 CLOSED: [2025-08-17 Sun 21:00] DEADLINE: <2025-08-17 Sun> :PROPERTIES: :JAR_AT: [2025-08-10 Sun] :JAR: 1 :SUGAR: 60 :INGREDIENTS: nil :BOTTLE_AT: [2025-08-17 Sun] :BOTTLE: 1 :RATING: 8 :END: :LOGBOOK: - State "FRIDGE" from "BOTTLE" [2025-08-24 Sun 21:00] - State "BOTTLE" from "JAR" [2025-08-17 Sun 21:00] :END:
The node properties mirror my process of having a couple jars, a few bottles, and playing with sugar, fermentation time and ingredients.
Additionally, a batch has a DEADLINE
(to remember to move it from Jar to Bottle)
showing up in the agenda, and a log book to keep track of state transitions.
Dashboards
I use 2 columnview
to display current and archived batches.
#+COLUMNS: %TODO(State) %ITEM(Item) %JAR_AT(Jarred at) %JAR(J) %SUGAR(Sugar) %INGREDIENTS(Ing) %BOTTLE_AT(Bottled at) %BOTTLE(B) %RATING(RTG) #+BEGIN: columnview :id "file:kombucha.org" :hlines 1 :match "TODO<>{PAST}" #+CAPTION: Current kombucha ferments | State | Item | Jarred at | J | Sugar | Ing | Bottled at | B | RTG | |--------+----------+------------------+---+-------+-------+------------------+---+-----| | JAR | Batch #4 | [2025-08-24 Sun] | 1 | 70 | apple | | | | |--------+----------+------------------+---+-------+-------+------------------+---+-----| | BOTTLE | Batch #3 | [2025-08-17 Sun] | 1 | 60 | nil | [2025-08-24 Sun] | 1 | | |--------+----------+------------------+---+-------+-------+------------------+---+-----| | FRIDGE | Batch #2 | [2025-08-10 Sun] | 1 | 60 | nil | [2025-08-17 Sun] | 1 | 8 | #+END: #+BEGIN: columnview :id "file:kombucha.org" :hlines 1 :match "TODO={PAST}" #+CAPTION: Past kombucha ferments | State | Item | Jarred at | J | Sugar | Ing | Bottled at | B | RTG | |-------+----------+------------------+---+-------+-----+------------------+---+-----| | PAST | Batch #1 | [2025-08-03 Sun] | 1 | 75 | nil | [2025-08-10 Sun] | 1 | 7 | #+END:
This is convenient to quickly figure out what is currently fermenting or ready to drink, and to recall the parameters that led to the best batches.
Putting it together
I really like the self-contained approach of a file containing a capture template, some configuration, raw data, and rendered tables. It makes it easy to share with fellow emacs kombucha brewers: find the template there, and if you think of improvements, don't hesitate to report back.
#+BEGIN: columnview :id "file:kombucha.org" :hlines 1 :match "TODO<>{PAST}" #+CAPTION: Current kombucha ferments | State | Item | Jarred at | J | Sugar | Ing | Bottled at | B | RTG | |--------+----------+------------------+---+-------+-------+------------------+---+-----| | JAR | Batch #4 | [2025-08-24 Sun] | 1 | 70 | apple | | | | |--------+----------+------------------+---+-------+-------+------------------+---+-----| | BOTTLE | Batch #3 | [2025-08-17 Sun] | 1 | 60 | nil | [2025-08-24 Sun] | 1 | | |--------+----------+------------------+---+-------+-------+------------------+---+-----| | FRIDGE | Batch #2 | [2025-08-10 Sun] | 1 | 60 | nil | [2025-08-17 Sun] | 1 | 8 | #+END: #+BEGIN: columnview :id "file:kombucha.org" :hlines 1 :match "TODO={PAST}"... * JAR Batch #4 DEADLINE: <2025-08-31 Sun> :PROPERTIES: :JAR_AT: [2025-08-24 Sun] :JAR: 1 :SUGAR: 70 :INGREDIENTS: apple :BOTTLE_AT: :BOTTLE: :RATING: :END: * BOTTLE Batch #3... * FRIDGE Batch #2... * PAST Batch #1... 8: 0 -kombucha.org Bot :master Org Proj[org] Wrap