Skip to content
Django application for managing recipes
JavaScript Python HTML Other
Branch: develop
Clone or download
Latest commit 6a61c93 Jan 19, 2020
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea nice checkboxes Dec 24, 2019
cookbook meal plan prev+next week buttons Jan 19, 2020
nginx/conf.d nginx max body size Dec 25, 2019
recipes meal plan WIP Jan 17, 2020
.dockerignore docker first try Nov 7, 2018
.env.template fixed missing entry in env template Nov 19, 2019
.gitignore added recipe images Dec 25, 2019
Dockerfile changed image base Dec 8, 2019 Initial commit Jan 31, 2018 update readme Jan 19, 2020
docker-compose.yml some cleanup Nov 13, 2019 refactor app name (typo) Feb 5, 2018
preview.png image resize Dec 9, 2019
requirements.txt meal plan WIP Jan 17, 2020 more cleanup and fixes Nov 13, 2019


Recipes is a django application to manage, tag and search recipes using either built in models or external storage providers hosting PDF's, Images or other files.



  • 📦 Sync files with Dropbox and Nextcloud (more can easily be added)
  • 🔍 Powerful search with djangos TrigramSimilarity
  • 🏷 Create and search for tags, assign them in batch to all files matching certain filters
  • 📄 Create recipes locally within a nice, standardized web interface
  • 📱 Optimized for use on mobile devices like phones and tablets
  • 👱 Share recipes with friends and comment on them to suggest or remember changes you made
  • 🐳 Easy setup with Docker
  • Many more like recipe scaling, image compression, cookbooks, ...

This application is meant for people with a collection of recipes they want to share with family and friends or simply store them in a nicely organized way. A basic permission system exists but this application is not meant to be run as a public page.


Most things should be straight forward but there are some more complicated things.

Storage Backends

A Storage Backend is a remote storage location where files are stored. To add a new backend click on Storage Data and then on Storage Backends. There click the plus button.

Enter a name (just a display name for you to identify it) and an API access Token for the account you want to use. Dropboxes API tokens can be found on the Dropboxes API explorer with the button on the top right. For Nextcloud you can use a App apssword created in the settings.

Adding Synced Paths

To add a new path from your Storage backend to the sync list, go to Storage Data >> Configure Sync and select the storage backend you want to use. Then enter the path you want to monitor starting at the storage root (e.g. /Folder/RecipesFolder) and save it.

Syncing Data

To sync the recipes app with the storage backends press Sync now under Storage Data >> Configure Sync.

Import Recipes

All files found by the sync can be found under Manage Data >> Import recipes. There you can either import all at once without modifying them or import one by one, adding tags while importing.

Batch Edit

If you have many untagged recipes, you may want to edit them all at once. To do so, go to Storage Data >> Batch Edit. Enter a word which should be contained in the recipe name and select the tags you want to apply. When clicking submit, every recipe containing the word will be updated (tags are added).

Currently the only option is word contains, maybe some more SQL like operators will be added later.



When cloning this repository, a simple docker-compose file is included. It is made for setups already running an nginx-reverse proxy network with let’s encrypt companion but can be changed easily. Copy .env.template to .env and fill in the missing values accordingly.
Now simply start the containers and run the script that will apply all migrations and collect static files. Create a default user by executing into the container with docker-compose exec web_recipes sh and run python3 createsuperuser.


Copy .env.template to .env and fill in the missing values accordingly.
You can leave out the docker specific variables (VIRTUAL_HOST, LETSENCRYPT_HOST, LETSENCRYPT_EMAIL). Make sure all variables are available to whatever serves your application.

Otherwise simply follow the instructions for any django based deployment (for example this one

To start developing:

  1. Clone the repository using your preferred method
  2. Install requirements from requirements.txt either globally or in a virtual environment
  3. Run migrations with migrate
  4. Create a first user with createsuperuser
  5. Start development server with runserver


Pull Requests and ideas are welcome, feel free to contribute in any way.


This project is licensed under the MIT license. Even though it is not required to publish derivatives, I highly encourage pushing changes upstream and letting people profit from any work done on this project.

You can’t perform that action at this time.