OPOS is a machine-readable JSON format for describing pour-over coffee brewing recipes. A single .json file captures everything needed to brew a recipe: the dripper, coffee-to-water ratio, grind setting, and a step-by-step protocol with precise timing and weights.
OPOS was designed to be:
- Human-readable — easy to author and review by hand
- Machine-executable — structured enough to drive automated brewing equipment
- Interoperable — a common language that any app or device can implement
Current version: 1.1.0
{
"version": "1.1.0",
"metadata": {
"name": "My Recipe",
"author": "Your Name",
"description": "A short description",
"compatibility": ["V60"],
"visualizer_hint": "pulse_block"
},
"equipment": {
"dripper": { "model": "V60", "material": "Ceramic" },
"filter_type": "Paper"
},
"ingredients": {
"coffee_g": 15.0,
"water_g": 250.0,
"grind_setting": "Medium-Fine"
},
"protocol": [
{ "step": 1, "action": "bloom", "water_g": 45, "duration_s": 45, "notes": "Saturate grounds" },
{ "step": 2, "action": "pour", "water_g": 205, "duration_s": 60, "notes": "Main pour" },
{ "step": 3, "action": "wait", "duration_s": 60, "notes": "Allow to drain" }
]
}See SPECIFICATION.md for the full spec.
The recipes/ directory contains a growing library of well-known pour-over recipes in OPOS format:
| Recipe | Author | Dripper | Dose | Water |
|---|---|---|---|---|
| Tetsu Kasuya 4:6 | Tetsu Kasuya | V60 | 20 g | 300 g |
| Better 1-Cup V60 (V2) | James Hoffmann | V60 | 15 g | 250 g |
| God/Devil Switch | Tetsu Kasuya | Hario Switch | 20 g | 300 g |
| Single-Pour | Lance Hedrick | V60 | 15 g | 250 g |
| Scott Rao V60 | Scott Rao | V60 | 15 g | 250 g |
- MeticAI — implements OPOS as a "Recipe Mode" in its automated pour-over brewing feature.
Contributions are welcome — new recipes, spec clarifications, or tooling. Open an issue or PR.
The specification and bundled recipes are released under CC0 1.0 Universal — effectively public domain. Use freely, no attribution required.