Recipe management with Obsidian
July 16, 2022 -Those who enjoy cooking will have encountered a familiar problem - how to keep track of recipes over time? Primitive solutions range from keeping links to recipes in bookmarks folder to sticky notes marking pages of physical recipe books. But to someone who likes cooking and is also an engineer, it's clear that these solutions don't scale! Indeed, there is a market for more advanced recipe management solutions, e.g. Colander (a previous web app attempt in this space developed by yours truly and my partner), Paprika (a more polished version which has been monetized), and likely many others.
Recently, I've been finding more and more uses for Obsidian, a local-first Markdown editor, and so it was natural to explore ways of using it as a recipe manager. In this post, I'll share some practical tips about my setup and comment on Obsidian's suitability for this purpose. (Spoiler: it's incredibly effective!)
Requirements
Before covering specifics of Obsidian, it may be helpful to share my requirements (both core requirements and nice-to-haves) for a recipe manager. While specific requirements may differ from person to person, my personal list of "must-haves" is below:
- Recipe display: My primary use case is viewing existing recipes while actively cooking.
- Recipe input: Adding new recipes to the system should be straightforward, regardless of source.
- Recipe exploration: Finding recipes which have already been added should be a pleasant and efficient experience.
Similarly, my nice-to-haves include:
- Meal planning: E.g., creating a simple collection of recipes that we intend to make together or throughout the week.
- Shopping: We try to make a bigger grocery store trip once a week, so creating a list of needed ingredients from the meal plan is useful.
- Sharing: My wife and I enjoy cooking together and ideally have the same level of access and editing abilities in the system. Similarly, we use different devices for different actions (e.g., a mobile device for cooking and shopping, a computer for recipe input).
Using Obsidian as a recipe manager
With the above requirements in mind, how does Obsidian measure up?
Recipe format
To start, viewing and editing recipes is quite good, thanks to Obsidian's polish as a text editor. Because recipes themselves are stored as simple Markdown files, all essential formatting and display features in Markdown are available, including headers, lists, sections, and images.
Organization
One of Obsidian's standout capabilities is the ability to define links between documents, which can either be in terms of tags (e.g. #chicken
) or explicit links (e.g. [[Pastry for single-crust pie]]
). This brings a lot of flexibility and power to recipe management, as recipes that are associated can simply reference one another, and every recipe can be classified with appropriate tags.
Additionally, with Obsidian's Dataview plugin, one can quickly create recipe indexes which auto-update as new recipes are added or tagged, for example, by cuisine, type of dish, or in this case, ingredient:
Meal plans & shopping
Basic indexes and document links help facilitate easy meal planning. While there is no prescribed format, I typically keep each plan in a distinct document, with links to recipes I intend to make that meal or week.
Shopping lists are similarly straightforward - just a list of checkboxes organized according to my grocery store's layout. We currently create these lists by hand, but it could certainly be automated eventually.
Access & syncing
As a local-first editor, Obsidian does not prescribe a solution of syncing files between devices, but since the underlying data representation is just plain text files and images, many syncing options are available. To date I have found Syncthing and git to be sufficient for my purposes.
Syncthing is definitely more convenient than git, and it is supported on all but iOS devices. It works by setting up a peer network of devices, specifying one or more folders to keep in sync, and then running a background service which updates and copies documents across devices over time. Importantly, it does all of this securely, without documents being readable by third parties!
A full description of Syncthing is best left for a future blog post, but for now, it's hard to overstate the convenience of editing a recipe or shopping list on a computer and having it appear on my mobile device, without having to manually save or sync anything!
Git, on the other hand, requires a more technical setup, but does work with iOS via the iSH Shell application. And for those who want syncing to iOS without any fuss and who don't mind a small subscription fee, there is always Obsidian's own Sync service.
Concluding thoughts
In the ~6 months since I began using this setup, Obsidian has proven to be a surprisingly capable and effective recipe management solution. One of my favorite aspects of this system is that Obsidian has a low barrier to entry but also offers many opportunities for deeper customization: armed with some basic knowledge of Markdown syntax, one can create a very serviceable recipe collection, and those looking for something more sophisticated should be able to add features incrementally over time. Also, did I mention that Obsidian is free? Due to its emphasis on local-first data, there is no concern that a cloud-based offering might remove features, change pricing models, or go out of business, taking your data with it.
While I anticipate using Obsidian as my recipe manager for the foreseeable future, I'm not quite done tweaking. 🙃 I'm actively brainstorming future improvements, such as:
- Imports - from blogs, recipe sites, scanned photos
- External sharing - e.g., on this blog, so sharing a recipe with a friend is one link away
- Formatting improvements: - e.g., adding ingredient amount tooltips when ingredients appear in the recipe instructions (this was one of Colander's differentiating features and made viewing recipes while cooking significantly more convenient!)
- Recipe scaling: e.g., automatically scaling ingredient amounts with a single click or command
- Pantry/ingredient management: e.g., automatically building shopping lists based on meal plans, aggregating similar ingredients, and perhaps even allowing you to keep track of what's already in your pantry
Since the recipes are simple plain text files, there's quite a bit of flexibility for developing these tools. For example, an Obsidian plugin would be a straightforward choice, but a separate CLI tool written in a different language (e.g. Rust!) would also be reasonable.
It's important to state that despite the above features not being supported out of the box, the overall experience with Obsidian as a recipe manager is really great - I highly recommend it!