Batches#

Self Hosted Cloud Hosted

A batch represents a single brew from planning through fermentation to packaging and, eventually, archiving. Everything else in BrewGraph — devices, readings, storage vessels — attaches to a batch. Predictions are coming soon to Cloud Hosted.

Creating a batch#

Batches can be created two ways:

  • Manual entry — fill in name, style, target starting and final gravity, volume, and (optionally) yeast and dry-hop details by hand.

  • Import — pull batch data from Brewfather (one-time pull, no ongoing sync) or from a BeerXML file. Fields with no source in the imported data (batch volume, yeast, dry hops, cost) are left blank for manual entry.

On Cloud Hosted, Brewfather credentials are stored client-side only (in the app’s local storage) and are never transmitted to BrewGraph’s servers — the app calls the Brewfather API directly. On Self Hosted, credentials are used by a server-side proxy instead, since there the “server” is your own machine and the credentials live in your local config. This keeps your Brewfather API key on your own device.

Batch status lifecycle#

A batch has three stored statuses, plus a ready-to-serve indication based on the packaging date and the conditioning time you entered:

State

Kind

Meaning

fermenting

Stored status

Active fermentation. A device (or manual readings) can be attached; gravity readings can arrive. This is the starting status.

packaged

Stored status

Transferred to keg or bottle. Shown as-is until a conditioning-days value is set.

conditioning

Computed

A conditioning-days value is set, and that many days haven’t passed since package_date yet.

ready

Computed

package_date plus the conditioning-days value has passed.

archived

Stored status

Non-destructive, reversible long-term storage. Reachable from either fermenting or packaged — a keeper recipe, a competition entry, or an abandoned/failed ferment worth keeping as a record, without entering the 30-day delete-recovery clock. See “Archiving a batch” below.

Status is changed from the batch detail view; a “Package” action (see below) handles the change from fermenting to packaged together with vessel creation in one step.

Archiving a batch#

Archiving is available from either the fermenting or packaged state — a batch doesn’t need to be finished or packaged first. It’s a way to set a batch aside for the long term without deleting it: an archived batch keeps all its history, but drops out of the active-view clutter and never enters the 30-day delete-recovery clock that a deleted batch does.

An archived batch is read-only: its fields and notes can no longer be edited. Dry-hop entries are preserved. Self Hosted also preserves a fermentation-step schedule; that feature is coming soon to Cloud Hosted. (Its rating can still be set or changed, the same as a packaged batch — rating a finished beer is meaningful either way.) On Self Hosted, archiving also stops any active chamber controller.

Un-archiving is reversible, but not a memory of what the batch was before — the resulting status is derived from what’s true right now: if a storage vessel is currently connected to the batch, it comes back as packaged; otherwise it comes back as fermenting. A batch whose only vessel was later emptied and detached is correctly treated as no longer packaged rather than restored to a state nothing currently backs.

Archived batches still count toward the five-batch limit on Cloud Hosted — archiving is about keeping a record out of the way, not reducing what you’re limited on, since the underlying data (readings, notes, history) is unchanged and still uses the same storage space. Available on both Self Hosted and Cloud Hosted, no feature flag.

Packaging a batch#

The “Package” action (shown on the batch detail view while status is fermenting) replaces what used to be a multi-step manual process — mark the batch packaged, create a vessel, re-link devices, assign a tap — with a single dialog. A batch can be split across both destinations at once:

  • Keg — reuse-only. Pick an existing clean, empty keg from the vessel list; packaging never creates a new keg, since kegs are persistent physical assets registered once and refilled over their lifetime.

  • Bottles — always creates a new storage vessel (bottles have no reusable physical identity in the data model).

Each destination gets its own conditioning-days and carbonation-target value, since a force-carbonated keg and naturally-conditioning bottles from the same brew often need different settings. Packaging with no vessel at all (“I’ll add one later”) is also supported — it just flips the status without creating anything.

Device re-linking and tap assignment are deliberately not part of packaging; those are handled afterward from the device, tap, and vessel detail views.

Fermentation steps#

On Self Hosted, a batch can have a temperature schedule for stages such as primary fermentation, a diacetyl rest, or cold crashing. Fermentation steps and chamber control are coming soon to Cloud Hosted.

Gravity readings and charts#

In the Cloud Hosted beta, an assigned gravity device sends readings and the temperature measured with them. Follow both on the batch chart. Self Hosted also supports pressure readings. You can leave an obviously bad reading out of a chart without deleting its history. Fermentation completion prediction is coming soon to Cloud Hosted.

Notes, cost tracking, and export#

Add dated notes to a batch and download its summary report. Every Cloud Hosted beta account can also download its brewing data and a full backup from Settings > Data & Privacy. Self Hosted has further cost-tracking and export tools.

Deleting a batch#

Deleting a batch is destructive but recoverable for a 30-day window, after which it is deleted from BrewGraph and from backups, which takes up to 60 days in total. If you just want a batch out of the way without starting that clock, archiving (see “Archiving a batch” above) is the non-destructive alternative — it keeps the batch and all its history around indefinitely, just read-only and out of the active view.