hretheum22 downloadsSend ingredients from recipe notes to a Bring! shopping list, with LLM-based unit normalization and summed quantities.
Turn the ingredients of your recipe notes into a ready shopping list in Bring!, in a few clicks.
Before: 2 tbsp finely chopped dill in one recipe, 1 bunch dill in another.
After: one item dill on your list, with the specification 2× bunch — Recipe A, Recipe B.
You need three things:
type: recipe in the frontmatter and an ## Ingredients heading (table or list, see Recipe format).Then: install the plugin, open its settings, fill in the LLM address and your Bring! email and password, and run the command Add ingredients from recipes to shopping list.
Heads-up: unofficial API. Bring! offers no public API for this. The plugin uses the same web API as the Bring! web app, so it may stop working at any time and may not be permitted by Bring!'s terms. Use it with your own account and at your own risk. Details are in Requirements and disclosures.
Not affiliated. This is an independent, community project with no connection to, and no endorsement from, Obsidian or Bring!. "Obsidian" and "Bring!" are trademarks of their respective owners, used only to describe what this plugin works with. Other product names (Ollama, llama.cpp, LM Studio, OpenAI, OpenRouter) are used for reference only, for the same reason.
2 tbsp finely chopped dill into dill, converts to your preferred shopping unit (for example half a bunch), and drops stray instruction sentences.ingredient_units.yaml) in your vault; the LLM proposes entries for new ingredients, which are appended for you to review.From the Community plugins browser (once listed): search for "Recipe Shopping List".
Manual: download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/recipe-shopping-list/, then enable the plugin.
Requires Obsidian 1.11.4 or newer (secret storage).
http://localhost:11434/v1 for Ollama), optionally choose an API key secret, and pick a model (use Load models to list what the server offers). Models that "think" before answering can return an empty reply on some servers: turn reasoning off on the server if you see that.type: recipe, and the ingredients sit under a heading called Ingredients. If your ingredients are in a table, Ingredient table column selects the column with the ingredient text (default 2). All of this is configurable.ingredient_units.yaml into your vault and adjust it.Run the command Add ingredients from recipes to shopping list:
Either a table:
## Ingredients
| Original | Normalized |
| :--- | :--- |
| 1 cup rice | 200 g rice |
| 2 tbsp chopped dill | 2 tbsp chopped dill |
or a list:
## Ingredients
- 200 g flour
- [ ] 2 eggs
Sub-section labels ending with a colon (Herb butter:) are skipped. Ingredients and recipe text can be in any language; ingredient names keep the language of the recipe.
Please read this before installing.
api.getbring.com, to log in to your Bring! account, read your lists, create a list and add items.http://localhost:11434/v1). The text of the selected ingredient lines and your unit dictionary are sent to that endpoint. If you point it at a cloud service, that service receives this text.data.json and not in your vault. The Bring! email is stored in the plugin's data.json.type: recipe).Ingredients) and, for tables, the column number in the settings.npm install
npm run build # tsc + esbuild -> main.js
npm test # unit and smoke tests (nothing reaches a live account)
npm run lint # official eslint-plugin-obsidianmd rules
Releases are built by GitHub Actions when a tag matching the manifest version (for example 1.0.0) is pushed.