* Freshen up the SWAG documentation
Added some extra pointers for setting up HTTPS with Mealie and SWAG, and indented the `docker-compose.yml` as it should be.
* Replaced <code> html blocks with backticks
* Better formatting and comments in example config files
* Made DuckDNS consistent with other places on the page
* Add more tests to the time cleaner
* Parse more time entries
* Formatting
* Refactor parse_duration
* Refactor pretty_print_timedelta
* Add some tests for pretty_print_timedelta
* Add option for cook_time from schema
* Fix issue with parsing scraped nutrition
* Attempt to clean nutrition info
* Allow comma separator
* Fix return type for clean_nutrition. Fail safe in case of unexpected type from scraper
* Switch to using regex parsing
* Formatting
* Cleanup - empty strings no longer a concern
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Swedish)
* New translations en-US.json (Swedish)
* New translations en-US.json (Swedish)
* changed python base image to 3.9.6
* bumped poetry version to 1.1.7
* user creation based on env variable PGID and PUID with default as PUID/PGID= 911
* App exposes APP_PORT=80 as env variable
* Removed user mod and handled it in docker image.
* moved scheduler.db to /app/temp dir
* set app default port to 80 if envvariable null
* Changed application port to env variable with default as 80
* Created sch. direcotry as part of image creation
* minor logging improvements.
* removed docker target
* cleanup
* fixed port
* fixed port
* fixed port
* removed volume specification
* fixing code quality warnings
* fixing code quality warnings
* fixing code quality warnings
* bumped versions to fix vulnerabilities
* corrected port
* bumped uvicorn version to fix vulnerabilities
* minor fix
* added sticky permissions
* adding port change info to docs
* adding port change info to docs
* adding port change info to docs
* improved formatting
* docs updated
* added docker port change warning
* Shopping list quantity decrement button -> minus
Missed being renamed when material design icons were moved
to be global variables, still used the original md name.
* Updated poetry lock to fix rdflib-jsonld error
`extruct` depends on rdflib-jsonld, which had an error involving `use_2to3`
(https://github.com/RDFLib/rdflib-jsonld/pull/105), which prevented
building.
* update poetry CI/CD Version
Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Portuguese)
* New translations en-US.json (Portuguese)
* New translations en-US.json (Slovak)
* New translations en-US.json (Slovak)
* New translations en-US.json (Slovak)
* New translations en-US.json (Slovak)
* New translations en-US.json (Slovak)
* New translations en-US.json (German)
* New translations en-US.json (Polish)
* New translations en-US.json (Slovak)
* New translations en-US.json (Slovak)
* New translations en-US.json (Polish)
* New translations en-US.json (French)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Russian)
* New translations en-US.json (Spanish)
* New translations en-US.json (Spanish)
* New translations en-US.json (Catalan)
* New translations en-US.json (Spanish)
* New translations en-US.json (Catalan)
* New translations en-US.json (Spanish)
* New translations en-US.json (Catalan)
* New translations en-US.json (Catalan)
* New translations en-US.json (Catalan)
* New translations en-US.json (Danish)
* New translations en-US.json (Danish)
* New translations en-US.json (Danish)
* New translations en-US.json (Danish)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Norwegian)
* New translations en-US.json (Russian)
* New translations en-US.json (Hungarian)
* New translations en-US.json (Hungarian)
* New translations en-US.json (Hungarian)
* New translations en-US.json (Danish)
* New translations en-US.json (Italian)
* New translations en-US.json (English, United Kingdom)
* New translations en-US.json (English, United Kingdom)
* New translations en-US.json (English, United Kingdom)
* New translations en-US.json (English, United Kingdom)
* Add support for en-GB
Allows for British date format (native in vue-i18n)
+ potential spelling adaptations
* Rename default English locale to American English
* add ingredient sections to UI
* update changelog
* move recipe favorite to action bar
* fix button position on meal-planner
Co-authored-by: hay-kot <hay-kot@pm.me>
* New translations en-US.json (French)
* New translations en-US.json (French)
* New translations en-US.json (Polish)
* New translations en-US.json (Polish)
* New translations en-US.json (Danish)
* New translations en-US.json (Danish)
* New translations en-US.json (German)
* New translations en-US.json (German)
* Localize recipe import popup
* Add Italian language
* Use named formatting
* Remove unused strings
* Use dedicated strings for the sidebar
This will allow for shorter texts, so the text is not truncated,
without impacting other uses
* Fix missing string
* Localize "loading recipes"
* Remove unmaintained languages
Remove support for Danish, Portuguese and Chinese Traditional,
since their current translation state is <20%
* Enhance security and safety around user update API
- Prevent a regular user from promoting themself to admin
- Prevent an admin from demoting themself
- Refactor token fixture to admin + regular user tokens
* Restrict user CRUD API to admins
* Secure admin API routes
* Refactor APIrouter into Admin/UserAPIRouter
* Secure theme routes
* Make 'all recipes' routes public
* Secure favorite routes
* Remove redundant checks
* Fix public routes mistakenly flagged user routes
* Make webhooks changeable only by admin
* Allow users to create categories and tags
* Address lint issues
* remove duplicate keys
* show context menu when not logged in
* remove console.log
* hide menu when printing
* add response to event
* add type definitions
* show context menu always
* add image name enums
* upload/download single recipe
* cleanup menu views+ localization
Co-authored-by: hay-kot <hay-kot@pm.me>
* dump deps
* add job for new groups on interval
* change sort icon
* fix cart icon
* bump version
* changelog
* early return if no comments
* remove comment
Co-authored-by: hay-kot <hay-kot@pm.me>
* New translations en-US.json (French)
* New translations en-US.json (Dutch)
* New translations en-US.json (Swedish)
* New translations en-US.json (Spanish)
* Add Web Share api to ContextMenu.vue. Copy to clipboard is the fallback
* Add Web Share api to ContextMenu.vue. Copy to clipboard is the fallback
* Add translation
* New translations en-US.json (German)
* New translations en-US.json (German)
* New translations en-US.json (German)
* New translations en-US.json (Dutch)
* New translations en-US.json (French)
* New translations en-US.json (Dutch)
* New translations en-US.json (Dutch)
* New translations en-US.json (Swedish)
* New translations en-US.json (German)
* New translations en-US.json (Spanish)
* New translations en-US.json (Spanish)
* New translations en-US.json (Catalan)
* Fix asset link
* remove unused var
* fix no meal-plan returned
* cleanup redundant code
* Fix dates off in UI
* quick set dark/light mode
* user image fixes
Co-authored-by: hay-kot <hay-kot@pm.me>
* fix favorite color issue
* db and models for comments
* rename files
* initial UI for comments
* fix format
* import / export
* fixes#428
* format
Co-authored-by: hay-kot <hay-kot@pm.me>
* lazy load cards
* shopping list recipe search bug
* admin layout fluid
* site loader
* username support
* mobile tabs
* set username at signup
* update user tests
* patch bug on shopping list
* public mealplan links
* support link (I'm a monster)
* icon only on mobile
* padding
Co-authored-by: hay-kot <hay-kot@pm.me>
* New translations en-US.json (Dutch)
* New translations en-US.json (Dutch)
* New translations en-US.json (Dutch)
* New translations en-US.json (Dutch)
* New translations en-US.json (Spanish)
* New translations en-US.json (Dutch)
* New translations en-US.json (Dutch)
* additional server events
* sort 'recent recipes' by updated
* remove duplicate code
* fixes#396
* set color
* consolidate tag/category pages
* set colors
* list unorganized recipes
* cleanup old code
* remove flash message, switch to global snackbar
* cancel to close
* cleanup
Co-authored-by: hay-kot <hay-kot@pm.me>
* Translate sidebar
* Do not force 12-hour format worldwide
Vue-i18n knows which locales prefer 12-hour format over 24-hour format
* Translate new tiles in profile page
* Translate new tiles in dashboard
* New translations en-US.json (German)
* New translations en-US.json (German)
* New translations en-US.json (German)
* New translations en-US.json (French)
* New translations en-US.json (German)
* format with black
* black format
* flake8
* remove bar exceptions
* remove test for depreciated route
* recipe settings editr
* add sqlite
Co-authored-by: hay-kot <hay-kot@pm.me>
* New translations en-US.json (German)
* New translations en-US.json (French)
* New translations en-US.json (Dutch)
* New translations en-US.json (Polish)
* New translations en-US.json (Dutch)
* Translate missing items on About page
* Localize import summary dialog
* Make site menu translation reactive
* Localize import options
* Include semi colon in string
* Move API texts to frontend + better status codes
* Provide feedback to user when no meal is planned
* Fix API tests after latest rework
* Add warning for API changes in changelog
* Refactor API texts handling
* Refactor API texts handling #2
* Better API feedback
* Rearrange strings hierarchy
* Add messages upon recipe updated
* Fix 'recipe effected' typo
* Remove snackbar usage in backend
* Translate toolbox
* Provide feedback for tags CRUD
* Fix messed up merge
* Translate sign-up form
* Better feedback for sign-up CRUD
* Refactor log-in API texts handling
* No error message when user is not authenticated
* Remove unimportant console log
* formatting
* snake case all recipes entries
* set foreign key to int
* run scheduler at startup and not import
* set SQLite file path before imports
Co-authored-by: hay-kot <hay-kot@pm.me>
* New translations en-US.json (Polish)
* New translations en-US.json (Polish)
* New translations en-US.json (Polish)
* New translations en-US.json (German)
* update tag route
* search.and
* offset for mobile
* relative imports
* get settings
* new page
* category/tag CRUD
* bulk assign frontend
* Bulk assign
* debounce search
* remove dev data
* recipe store refactor
* fix mobile view
* fix failing tests
* commit test data
Co-authored-by: hay-kot <hay-kot@pm.me>
* Dummy Commit
* consolidate sidebar and app bar
* fix image error
* consolidate sidebar
* new icon for user menu
* fixes#329
* fix double click on mobile
* swap to computed properties
* fix open/close bug
* rewrite search for mobile
* fix ingredient checkbox
* cleanup console.logs
* set default lang + bump version
* draft changelog
* reword
* update env variables
Co-authored-by: hay-kot <hay-kot@pm.me>
* Translate about page
* Sort messages by keys
* Remove unused strings
* Localize date in meal planner
* Fix quick week not starting on Monday for UTC+x
* New translations en-US.json (French)
* New translations en-US.json (German)
* New translations en-US.json (German)
* New translations en-US.json (French)
* New translations en-US.json (German)
* New translations en-US.json (German)
* Localize more dates and texts
* Adapt source language to 4-letter code for VS code
* Make page titles more reactive to language change
* Translate missing text + fix missed refactoring
* Fix missed page titles refactoring
* Translate nutrition view
* Translate Image upload vue
* Fix default text being defined twice in upload btn
* New translations en-US.json (French)
* New translations en-US.json (French)
* New translations en-US.json (French)
* New translations en-US.json (French)
* New translations en-US.json (Dutch)
* New translations en-US.json (Dutch)
* Fix language in date picker
Vuetify allows custom-named locales,
but the date-picker really only works with BCP 47 language tag
* Save lang at proper time + Update Vuetify lang on the fly
* Make first day of the week customizable
New settings section 'Locale settings'
New setting 'First day of week'
New date picker reusable UI that uses the new setting
Meal planner now uses this new date picker
* Clean up unused code in settings page
* Fix First day of week mapping
* Replace missing v-date-picker with custom card DatePicker
* Mention first day of the week feature in change log
* Fix portuguese localization files
* Use 4-letter code for locales ID
* Update Crowdin configuration file
* Make vuetify locales match with new VueI18n standard
* Fix old locale ID default setting
* Hide project hierarchy from Crowdin
* add dateTimeFormats to Crowdin
* rename 'ENV' to 'PRODUCTION' and default to true
* set env PRODUCTION
* refactor file download process
* add last_recipe.json and log downloads
* changelog + version bump
* set env on workflows
* bump version
Co-authored-by: hay-kot <hay-kot@pm.me>
* Fix docker dev db persistence
* Make run.sh the only startup script for prod + dev
Credits to @hay-kot for run.sh script logic
* Restore dev backend initialization in non-docker setup
* Make run.sh POSIX-friendly
* Allow dev backend to auto-reload in Docker
* fix dialog placement
* markdown support in ingredients
* fix line render issue
* fix tag rendering bug
* change ingredients to text area
* no slug error
* add tag pages
* remove console.logs
Co-authored-by: hay-kot <hay-kot@pm.me>
description:"submit a bug report for the current release"
body:
- type:checkboxes
id:checks
attributes:
label:First Check
description:Please confirm and check all the following options.
options:
- label:This is not a feature request
required:true
- label:I added a very descriptive title to this issue.
required:true
- label:I used the GitHub search to find a similar issue and didn't find it.
required:true
- label:I searched the Mealie documentation, with the integrated search.
required:true
- label:I already read the docs and didn't find an answer.
required:true
- type:textarea
id:description
attributes:
label:What is the issue you are experiencing?
placeholder:A clear and concise description of what the bug is.
validations:
required:true
- type:dropdown
id:os
attributes:
label:Deployment
description:What Deployment system are you using?
multiple:true
options:
- Docker (Linux)
- Docker (Windows)
- Docker (Synology)
- Unraid
- Other
validations:
required:true
- type:textarea
id:os-details
attributes:
label:Deployment Details
description:You can add more details about your operating system here, in particular if you chose "Other". If you are experiencing issues with deployment, please provide your docker-compose or docker commands
<!-- Add any other context about the problem here. If applicable, please include why you think the bug is occurring and/or troubleshooting you have already performed. -->
description:Please confirm and check all the following options.
options:
- label:This is not a feature request
required:true
- label:I added a very descriptive title to this issue.
required:true
- label:I used the GitHub search to find a similar issue and didn't find it.
required:true
- label:I searched the Mealie documentation, with the integrated search.
required:true
- label:I already read the docs and didn't find an answer.
required:true
- type:textarea
id:description
attributes:
label:What is the issue you are experiencing?
placeholder:A clear and concise description of what the bug is.
validations:
required:true
- type:dropdown
id:os
attributes:
label:Deployment
description:What Deployment system are you using?
multiple:true
options:
- Docker (Linux)
- Docker (Windows)
- Docker (Synology)
- Unraid
- Other
validations:
required:true
- type:textarea
id:os-details
attributes:
label:Deployment Details
description:You can add more details about your operating system here, in particular if you chose "Other". If you are experiencing issues with deployment, please provide your docker-compose or docker commands
description:"CONTRIBUTORS ONLY: Submit a Task that needs to be completed"
title:"[v1.0.0b] [Task] - TASK DESCRIPTION"
labels:
- task
- v1
body:
- type:markdown
attributes:
value:|
Thanks for your interest in Mealie! 🚀
This is a place for Mealie contributors to find tasks that need to get done around the repository. Tasks are different than issues as they are generally related to providing a new feature or improve an existing feature. They are _generally_ not related to an issue.
**DO NOT** create a task unless
- You are a contributors who has prior approval via discord/discussions
- You have otherwise been given approval to post the tasks
Otherwise, your post will be closed/deleted.
**Interested in Taking This?**
If you're interested in completing this tasks and it hasn't already been taken, comment below and to let others know you're working on it. As you work through the task, I ask that you submit a draft pull request as soon as possible, and tag this issue so we can all collaborate as best as possible.
- type:textarea
id:problem
attributes:
label:What is the problem this task addresses?
placeholder:A clear and concise description of what the problem this task will address.
validations:
required:true
- type:textarea
id:solution
attributes:
label:Proposed/Possible Solution(s)?
placeholder:Provide as much context around the idea as possible with potential files and roadblocks that may come up
Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.
[Remember to join the Discord](https://discord.gg/R6QDyJgbD2)!
[Remember to join the Discord](https://discord.gg/QuStdQGSGK)!
## Key Features
- 🔍 Fuzzy search
- 🏷️ Tag recipes with categories or tags to flexible sorting
- 🏷️ Tag recipes with categories or tags for flexible sorting
- 🕸 Import recipes from around the web by URL
- 💪 Powerful bulk Category/Tag assignment
- 📱 Beautiful Mobile Views
- 📆 Create Meal Plans
- 🛒 Generate shopping lists
- 🐳 Easy setup with Docker
- 🎨 Customize your interface with color themes layouts
- 💾 Export all your data in any format with Jinja2 Templates, with easy data restoration from the user interface.
- 🎨 Customize your interface with color themes
- 💾 Export all your data in any format with Jinja2 Templates
- 🔒 Keep your data safe with automated backup and easy restore options
- 🌍 localized in many languages
-➕ Plus tons more!
- Flexible API
@@ -89,7 +96,7 @@ As to why we need a database?
<!-- CONTRIBUTING -->
## Contributing
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. Especially test. Literally any tests. See the [Contributors Guide](https://hay-kot.github.io/mealie/contributors/developers-guide/code-contributions/) for help getting started.
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. Especially test. Literally any tests. See the [Contributors Guide](https://hay-kot.github.io/mealie/contributors/non-coders/) for help getting started.
If you are not a coder, you can still contribute financially. financial contributions help me prioritize working on this project over others and helps me know that there is a real demand for project development.
User groups, or "family" groups are a collection of users that are associated together. Users belonging to groups will have access to their associated mealplans and associated pages. This is currently the only feature of groups.
<pathd="M 63.22 68.4 C 63.82 68.4 64.58 67.93 64.58 67.14 C 64.58 66.64 64.03 65.99 63.22 65.99 C 62.34 65.99 61.86 66.7 61.86 67.14 C 61.86 67.83 62.49 68.4 63.22 68.4 Z M 66.39 67.22 C 66.39 68.69 64.91 70 63.27 70 C 61.44 70 60.07 68.65 60.07 67.25 L 60.07 50.06 C 58.43 49.33 56.45 47.65 56.45 44.65 C 56.55 42.25 58.13 40.43 60.07 39.51 L 60.07 44.39 L 63.22 45.99 L 66.39 44.39 L 66.39 39.5 C 68.29 40.34 70 42.32 70 44.78 C 69.95 47.1 68.53 49.03 66.39 50.06 Z M 49.19 69.99 C 48.73 69.99 48.32 69.65 48.32 69.19 L 48.32 57.17 C 48.32 56.81 48.7 56.39 49.17 56.39 L 50.12 56.39 L 50.13 45.21 L 49.77 42.55 L 49.77 38.79 L 52.29 38.79 L 52.3 42.55 L 51.94 45.21 L 51.94 56.39 L 52.85 56.39 C 53.37 56.39 53.74 56.68 53.74 57.21 L 53.74 69.22 C 53.74 69.68 53.33 69.99 52.88 69.99 Z M 27.78 36.63 C 20.5 36.63 14 31.25 14 22.98 C 14 16.57 19.5 10 27.52 10 C 35.36 10 41.1 16.36 41.1 23.29 C 41.1 31.31 34.33 36.63 27.78 36.63 Z M 0 63.51 C 0.63 57.61 1.47 49.54 3.07 45.46 C 3.81 43.61 4.88 42.28 6.61 41.17 C 7.73 40.43 11.72 38.48 12.45 38.16 C 13.73 37.57 15.05 37.26 16.18 38.16 C 22.94 43.46 32.3 43.3 39.15 38.18 C 39.94 37.46 41.21 37.65 42.04 37.94 C 42.97 38.26 45.37 39.46 46.96 40.29 L 46.96 42.69 L 47.32 45.36 L 47.32 54.39 C 46.31 54.92 45.52 55.93 45.52 57.17 L 45.51 63.51 Z"fill="#e58325"stroke="#d79b00"stroke-miterlimit="10"pointer-events="all"/>
Mealie admins are super users that have access to all user data (excluding passwords). Perform administrative tasks like adding users, resetting user passwords, backing up the database, migrating data, and managing site settings. Administrators can also access restricted recipes that are marked hidden or uneditable by the user.
A single user created by an Admin that has basic privlages to edit their profile, create and edit recipes they own. Edit recipes that are not hidden and are marked editable.
The basic relationship and ownership is diagramed below. In short users are owners of recipes and groups are the owners of meal-plans. By default all users will be added to the "default" group. If a recipe is added through a migration or through a backup where no user exists ownership will be set to the default Admin.
<pathd="M 39 611 L 39 690 Q 39 700 49 700 L 130.76 700"fill="none"stroke="#e58325"stroke-width="2"stroke-miterlimit="10"pointer-events="none"/>
<pathd="M 136.76 700 L 128.76 704 L 130.76 700 L 128.76 696 Z"fill="#e58325"stroke="#e58325"stroke-width="2"stroke-miterlimit="10"pointer-events="none"/>
<pathd="M 174 588 L 234 588 Q 244 588 244 578 L 244 550 Q 244 540 254 540 L 391.76 540"fill="none"stroke="#e58325"stroke-width="2"stroke-miterlimit="10"pointer-events="none"/>
<pathd="M 397.76 540 L 389.76 544 L 391.76 540 L 389.76 536 Z"fill="#e58325"stroke="#e58325"stroke-width="2"stroke-miterlimit="10"pointer-events="none"/>
<pathd="M 419 591 L 419 690 Q 419 700 429 700 L 480 700 Q 490 700 490.88 700 L 491.76 700"fill="none"stroke="#e58325"stroke-width="2"stroke-miterlimit="10"pointer-events="none"/>
<pathd="M 497.76 700 L 489.76 704 L 491.76 700 L 489.76 696 Z"fill="#e58325"stroke="#e58325"stroke-width="2"stroke-miterlimit="10"pointer-events="none"/>
Database version has been bumped from v0.4.x -> v0.5.0. You will need to export and import your data. Moving forward, we will be using database migrations (BETA) to do this automatically. Note that you still must backup your data. If you don't, it's entirely possible something may go wrong and you could lose your data on upgrade.
#### Image Directory
the /data/img directory has been depreciated. All images are now stored in the /recipes/{slug}/image directory. Images should be migrated automatically, but you may experience issues related to this change.
#### API Usage
If you have been using the API directly, many of the routes and status codes have changed. You may experience issues with directly consuming the API.
#### Arm/v7 Support
Mealie will no longer build in CI/CD due to a issue with the rust compiler on 32 bit devices. You can reference [this issue on the matrix-org/synapse](https://github.com/matrix-org/synapse/issues/9403) Github page that are facing a similar issue. You may still be able to build the docker image you-self.
!!! warning "Potential Data Loss"
With this release comes a major rework of how files are stored on disk and where things belong. Migration of files should be done automatically. We have tested extensively with many different backups and user bases and have found that no one experienced data-loss. HOWEVER, with all the major changes that have occurred, it is vital that to prevent any data-loss you must create a backup and store that backup outside of your mealie instance. If you do not do this, you may lose your data.
## Bug Fixes
- Fixed #25 - Allow changing rating without going into edit
- Fixed #475 - trim whitespace on login
- Fixes #435 - Better Email Regex
- Fixed #428 - Meal Planner now works on iOS devices
- Fixed #419 - Typos
- Fixed #418 - You can now "export" shopping lists
- Fixed #356 - Shopping List items are now grouped
- Fixed #329 - Fixed profile image not loading
- Fixed #461 - Proper JSON serialization on webhooks
- Fixed #332 - Language settings are saved for one browser
- Fixes #281 - Slow Handling of Large Sets of Recipes
- Significant improvement in supported sites with the new [Recipe Scraper Library](https://github.com/hhursev/recipe-scrapers)
- UI Debugging now available at `/recipes/debugger`
- Better error messages on failure
- ⚠️ last_recipe.json is now depreciated
- Beta Support for Postgres! 🎉 See the getting started page for details
- Recipe Features
- New button bar for editors with improved accessibility and performance
- Step Sections now supported
- Recipe Assets
- Add Asset image to recipe step
- Additional View Settings.
- Better print support
- New Toolbox Page!
- Bulk assign categories and tags by keyword search
- Title case all Categories or Tags with 1 click
- Create/Rename/Delete Operations for Tags/Categories
- Remove Unused Categories or Tags with 1 click
- Recipe Cards now have a menu button for quick actions!
- Edit
- Delete
- Integrated Share with supported OS/Browsers
- Print
- New Profile Dashboard!
- Edit Your Profile
- Create/Edit Themes
- View other users in your Group
- See what's for dinner
- Manage Long Live API Tokens (New)
- New Admin Dashboard! 🎉
- Now you can get some insight on your application with application statics and events.
- See uncategorized/untagged recipes and organize them!
- Backup/Restore right from your dashboard
- See server side events. Now you can know who deleted your favorite recipe!
- New Event Notifications through the Apprise Library
- Get notified when specific server side events occur
### Meal Planner
- Multiple Recipes per day
- Supports meals without recipes (Enter title and description)
- Generate share-link from created meal-planners
- Shopping lists can be directly generated from the meal plan
### General
- User can now favorite recipes
- New 'Dark' Color Theme Packaged with Mealie
- Updated Recipe Card Sections Toolbar
- New Sort Options (They work this time!)
- Alphabetical
- Rating
- Created Date
- Updated Date
- Shuffle (Random Sort)
- New 'Random' Recipe button on recipe sections. Random recipes are selected from the filtered results below. For example, on the "Cakes" category page, you will only get recipes in the "Cakes" category.
- Rating can be updated without entering the editor - Closes #25
- Updated recipe editor styles and moved notes to below the steps.
- Redesigned search bar
- 'Dinner this week' shows a warning when no meal is planned yet
- 'Dinner today' shows a warning when no meal is planned yet
- More localization
- Start date for Week is now selectable
- Languages are now managed through Crowdin
- Application Bar was Rewritten
- Sidebar can now be toggled everywhere.
- New and improved mobile friendly bottom bar
- Improved styling for search bar in desktop
- Improved search layout on mobile
- Profile image now shown on all sidebars
- Switched from Flash Messages to Snackbar (Removed dependency)
### Performance
- Images are now served up by the Caddy increase performance and offloading some loads from the API server
- Requesting all recipes from the server has been rewritten to refresh less often and manage client side data better.
- All images are now converted to .webp for better compression
### Behind the Scenes
- The database layer has been added for future recipe scaling.
- Black and Flake8 now run as CI/CD checks
- New debian based docker image
- Unified Sidebar Components
- Refactor UI components to fit Vue best practices (WIP)
- The API returns more consistent status codes
- The API returns error code instead of error text when appropriate
- ⚠️ May cause side-effects if you were directly consuming the API
- Fixed #617 - Section behavior when adding a step
- Fixed #615 - Recipe Settings are not available when creating new recipe
- Fixed #625 - API of today's image returns strange characters
- Fixed [#590](https://github.com/hay-kot/mealie/issues/590) - Duplicate Events when using Gunicorn Workers
## Features and Improvements
### General
- Recipe Instructions now collapse when checked
- Default recipe settings can be set through ENV variables
- Recipe Ingredient lists can now container ingredient sections.
- You can now download and upload individual recipes
### Localization
Huge thanks to [@sephrat](https://github.com/sephrat) for all his work on the project. He's very consistent in his contributions to the project and nearly every release has had some of his code in it! Here's some highlights from this release
- [755](https://api.github.com/repos/hay-kot/mealie/issues/755) - Mealie Categories Not Displaying Until After Settings Opened
- [748](https://api.github.com/repos/hay-kot/mealie/issues/748) - categories - Internal Server Error
- [689](https://api.github.com/repos/hay-kot/mealie/issues/689) - Importing a recipe with time information
- [671](https://api.github.com/repos/hay-kot/mealie/issues/671) - Localization not loading on upgrade to v0.5.2
- [655](https://api.github.com/repos/hay-kot/mealie/issues/655) - Clicking on "tags" on a mobile phone doesn't work (Wrong link, "Internal server error")
[Please Join the Discord](https://discord.gg/R6QDyJgbD2). We are building a community of developers working on the project.
[Please Join the Discord](https://discord.gg/QuStdQGSGK). We are building a community of developers working on the project.
## We Develop with Github
We use github to host code, to track issues and feature requests, as well as accept pull requests.
@@ -9,11 +9,12 @@ We use github to host code, to track issues and feature requests, as well as acc
Pull requests are the best way to propose changes to the codebase (we use [Github Flow](https://guides.github.com/introduction/flow/index.html)). We actively welcome your pull requests:
1. Fork the repo and create your branch from `dev`.
2.Read the page in in [dev/dev-notes.md](https://github.com/hay-kot/mealie/blob/master/dev/dev-notes.md) to get an idea on where the project is at.
2.Checkout the Discord, the PRs page, or the Projects page to get an idea of what's already being worked on.
3. If you're interested on working on major changes please get in touch on discord and coordinate with other developers. No sense in doubling up on work if someones already on it.
4.If you've changed APIs, update the documentation.
5. Issue that pull request!
6. If you make changes to the dev branch reflect those changes in the dev/dev-notes.md to keep track of changes. Don't forget to add your name/handle/identifier!
4.Once you've got an idea of what changes you want to make, create a draft PR as soon as you can to let us know what you're working on and how we can help!
5. If you've changed APIs, update the documentation.
6. Issue that pull request!
7. If you make changes to the dev branch reflect those changes in the active changelog to keep track of changes. Don't forget to add your name/handle/identifier!
## Any contributions you make will be under the MIT Software License
In short, when you submit code changes, your submissions are understood to be under the same [MIT License](http://choosealicense.com/licenses/mit/) that covers the project. Feel free to contact the maintainers if that's a concern.
After reading through the [Code Contributions Guide](https://hay-kot.github.io/mealie/contributors/developers-guide/code-contributions/) and forking the repo you can start working. This project is developed with :whale: docker and as such you will be greatly aided by using docker for development. It's not necessary but it is helpful.
After reading through the [Code Contributions Guide](../developers-guide/code-contributions.md) and forking the repo you can start working. This project is developed with :whale: docker and as such you will be greatly aided by using docker for development. It's not necessary but it is helpful.
## With Docker
Prerequisites
@@ -8,7 +8,7 @@ Prerequisites
- Docker
- docker-compose
You can easily start the development stack by running `make docker-dev` in the root of the project directory. This will run and build the docker-compose.dev.yml file.
You can easily start the development stack by running `make docker-dev` in the root of the project directory. This will run and build the docker-compose.dev.yml file.
## Without Docker
Prerequisites
@@ -18,32 +18,34 @@ Prerequisites
- Nodejs
- npm
Once the prerequisites are installed you can cd into the project base directory and run `make setup` to install the python and node dependencies. Once that is complete you can run `make backend` and `make vue` to start the backend and frontend servers.
Once the prerequisites are installed you can cd into the project base directory and run `make setup` to install the python and node dependencies. Once that is complete you can run `make backend` and `make frontend` to start the backend and frontend servers.
## Make File Reference
`make setup` installs python and node dependencies
`make backend` Starts the backend server on port `9000`
Run `make help` for reference
`make vue` Starts the frontend server on port `8080`
```
clean-purge ⚠️ Removes All Developer Data for a fresh server start
clean 🧹 Remove all build, test, coverage and Python artifacts
clean-pyc 🧹 Remove Python file artifacts
clean-test 🧹 Remove test and coverage artifacts
test-all 🧪 Check Lint Format and Testing
test 🧪 Run tests quickly with the default Python
lint 🧺 Check style with flake8
coverage ☂️ Check code coverage quickly with the default Python
setup 🏗 Setup Development Instance
backend 🎬 Start Mealie Backend Development Server
frontend 🎬 Start Mealie Frontend Development Server
frontend-build 🏗 Build Frontend in frontend/dist
docs 📄 Start Mkdocs Development Server
docker-dev 🐳 Build and Start Docker Development Stack
docker-prod 🐳 Build and Start Docker Production Stack
code-gen 🤖 Run Code-Gen Scripts
`make mdocs` Starts the documentation server on port `8000`
```
`make docker-dev` Builds docker-compose.dev.yml
## Before you Commit!
`make docker-prod` Builds docker-compose.yml to test for production
Before you commit any changes on the backend/python side you'll want to run `make format` to format all the code with black. `make lint` to check with flake8, and `make test` to run pytests. You can also use `make test-all` to run both `lint` and `test`.
## Trouble Shooting
!!! Error "Symptom: Vue Development Server Wont Start"
**Error:**`TypeError: Cannot read property 'upgrade' of undefined`
**Solution:** You may be missing the `/frontend/.env.development.` The contents should be `VUE_APP_API_BASE_URL=http://127.0.0.1:9921`. This is a reference to proxy the the API requests from Vue to 127.0.0.1 at port 9921 where FastAPI should be running.
!!! Error "Symptom: FastAPI Development Server Wont Start"
**Error:**`RuntimeError: Directory '/app/dist' does not exist`
**Solution:** Create an empty /mealie/dist directory. This directory is served as static content by FastAPI. It is provided during the build process and may be missing in development.
Run into another issue? [Ask for help on discord](https://discord.gg/R6QDyJgbD2)
Run into another issue? [Ask for help on discord](https://discord.gg/QuStdQGSGK)
@@ -9,7 +9,7 @@ We love your input! We want to make contributing to this project as easy and tra
- Becoming a maintainer
- Help translate to a new language or improve current translations
[Remember to join the Discord and stay in touch with other developers working on the project](https://discord.gg/R6QDyJgbD2)!
[Remember to join the Discord and stay in touch with other developers working on the project](https://discord.gg/QuStdQGSGK)!
Additionally, you can buy me a coffee and support the project. When I get financial support it helps me know that there's real interest in the project and that it's worth the time to keep developing.
Translations can be a great way **for non-coders** to contribute to project.
We use **[Crowdin](https://crowdin.com/project/mealie)** to allow several contributors to work on translating Mealie.
You can simply help by voting for your preferred translations, or even by completely translating Mealie into a new language.
Mealie supports a framework for the community to contribute different translations. Translations can be a great way for non-coders to contribute to project.
Translations are regularly pulled from Crowdin and included in each new release.
## My Language Is Missing
If your language is missing, you can add it, by beginning to translate. We use a Vue-i18n in json files. Copy frontend/src/locales/en.json to get started.
Please use Crowdin as much as possible if you have any question/issue regarding a particular string. You can take a look at [Crowdin Knowledge base](https://support.crowdin.com/for-volunteer-translators/) if you want to know more about how to use this tool.
## Improving Translations
If your language is missing the translation for some strings, you can help out by adding a translation for that string. If you find a string you think could be improved, please feel free to do so.
## My language is missing in Mealie
Once your language is translated on Crowdin, we need to manually add it in Mealie. If you believe your language is ready for use, please create an issue on GitHub.
## Tooling
Currently we use Vue-i18n for translations. Translations are stored in json format located in [frontend/src/locales](https://github.com/hay-kot/mealie/tree/master/frontend/src/locales).
## I can't find a particular text in Crowdin
There can be several reasons:
- The text you're looking for is outdated: someone has already changed it or it will be removed/changed in the next release.
- It is possible some texts are not translatable (yet) for technical reasons. If you spot one, please reach out to us on [Discord](https://discord.gg/QuStdQGSGK) or raise an issue on GitHub.
If you have experience with a good Translation Management System, please feel free to chime in on the [Discord](https://discord.gg/R6QDyJgbD2), as such a system could be helpful as the projects grow.
Until then, [i18n Ally for VScode](https://marketplace.visualstudio.com/items?itemName=antfu.i18n-ally) is recommended to aid in translating. It also has a nice feature, which shows translations in-place when editing code.
i18n Ally will also show which languages is missing translations.
## Technical information
We use vue-i18n package for internationalization. Translations are stored in json format located in [frontend/src/locales/messages](https://github.com/hay-kot/mealie/tree/master/frontend/src/locales/messages).
[i18n Ally for VScode](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally) is helpful for generating new strings to translate. It also has a nice feature, which shows translations in-place when editing code.
All recipe data can be imported and exported as necessary from the UI. Under the admin page you'll find the section for using Backups and Exports.
!!! danger
As this is still a **BETA**It is recommended that you backup your data often and store in more than one place. Ad-hear to backup best practices with the [3-2-1 Backup Rule](https://en.wikipedia.org/wiki/Backup). Prior to upgrading you **should** perform a backup to limit any data loss.
As this is still a **BETA**it is recommended that you backup your data often and store in more than one place. Adhere to backup best practices with the [3-2-1 Backup Rule](https://en.wikipedia.org/wiki/Backup). Prior to upgrading you **should** perform a backup to limit any data loss.
!!! tip "Mealie data that is saved on backups"
- [x] Recipe Data
@@ -15,11 +15,11 @@ All recipe data can be imported and exported as necessary from the UI. Under the
To create an export simply add the tag and the markdown template and click "Create" and your backup will be created on the server. The backup is a standard zipfile containing all the images, json files, and rendered jinaj2 templates for each recipe. To view the available variables, open a recipe in the json editor.
To import a backup it must be in your backups folder. If it is in the backup folder it will automatically show up as a source to restore from. Selected the desired backup and import the backup file. Backups can be uploaded from the UI as well as added on the file system
To import a backup it must be in your backups folder. If it is in the backup folder it will automatically show up as a source to restore from. Selected the desired backup and import the backup file. Backups can be uploaded from the UI as well as added on the file system.
## Demo


## API Examples
You can use the API to create and retrieve backups remotely from any server that can access the Mealie instance. This is useful for easily managing off-site backups via cron-job or other scheduled tasks. You can find interactive documentation for your API at https://your-mealie-instance.com/docs
On export you can select a template to use to render files using the jinja2 syntax. This can be done to export recipes in other formats besides regular .json.Look at this example for rendering a markdown recipe using the jinja2 syntax.
On export you can select a template to use to render files using the jinja2 syntax. This can be done to export recipes in other formats besides regular .json.Look at this example for rendering a markdown recipe using the jinja2 syntax.
### Input
```jinja2
@@ -120,4 +128,4 @@ Categories: []
Original URL: https://www.bonappetit.com/recipe/five-spice-popcorn-chicken#intcid=_bon-appetit-recipe-bottom-recirc_3cad5ce9-734a-46f8-b503-78c33d2e7279_similar2-3
```
If you decide you don't like mealie. This is a good way to export into a format that can be imported into another.
If you decide you don't like mealie: This is a good way to export into a format that can be imported into another.
The page building is still experimental and may change. You can provide feedback on any changes you'd like to see on [github](https://github.com/hay-kot/mealie/discussions/229)
Custom pages can be created to organize multiple categories into a single page. Links to your custom pages are displayed on the home page sidebar and accessible by all users, however only Administrators can create or update pages.
Custom pages can be created to organize multiple categories into a single page. Links to your custom pages are displayed on the home page sidebar and accessible by all users, however only Administrators can create or update pages.

To create a new page. Navigate to the settings page at `/admin/settings` and scroll down to the custom pages section. Here you can create, view, and edit your custom pages. To reorder how they are displayed on the sidebar you can drag and drop the pages into the preferred order.
To create a new page navigate to the settings page at `/admin/settings` and scroll down to the custom pages section. Here you can create, view, and edit your custom pages. To reorder how they are displayed on the sidebar you can drag and drop the pages into the preferred order.
To save the order of pages you must click the save button displayed on the bottom of the Custom Page section. This is not necessary for updating individual page data.
To save the order of pages you must click the save button displayed on the bottom of the Custom Page section. This is not necessary for updating individual page data.
The dashboard gives you a quick overview of how your Mealie is doing. There is a 'Recipes' card, an overview of the users and groups, an 'Events' card and a 'Backups' card.

## Recipes
'Recipes' shows how many recipes you have in your catalogue but also checks if you have any untagged or uncategorized ones. If you click on one of these, you are redirected to the Toolbox where you can further organize these recipes.
## Users
This gives an overview of the total number of users for your Mealie instance. The 'manage users' and 'manage groups' button will redirect you to the [user-management page](../admin/user-management.md).
## Backups
Here you can choose to import an older backup from a previous instance. You could also create a custom backup with your own tag where you can choose for a full backup or only some parts like recipes, users,...
If you click 'create', an automatic backup is generated.
@@ -8,7 +8,7 @@ To migrate recipes from a Chowdown
3. Select import on the newly available migration.
## Nextcloud Recipes
Nextcloud recipes can be imported from a zip file the contains the data stored in Nextcloud. The zip file can be uploaded from the frontend or placed in the data/migrations/nextcloud directory. See the example folder structure below to ensure your recipes are able to be imported.
Nextcloud recipes can be imported from a zip file that contains the data stored in Nextcloud. The zip file can be uploaded from the frontend or placed in the data/migrations/nextcloud directory. See the example folder structure below to ensure your recipes are able to be imported.
As of version v0.4.0 users have limited functionality, but they will offer more permissions and structure as time goes on. To understand the different systems, see each section below. Note, that by default all users will be assigned the default group. If you're only managing one household you won't need to do anything to set up a new group.
@@ -47,7 +47,7 @@ As of version v0.4.0 users have limited functionality, but they will offer more
On the first startup you'll need to login to Mealie using the default username and password `changeme@email.com` and `MyPassword` or the default set through the env variable. On first login you'll be required to reset your password. After resetting your password you should also change your email address as appropriate. This will be used for logins on all future requests.
!!! tip
Your default password environmental variable will be the default password for all new users that are created. This is stored in plain text and should not be used **anywhere** else.
Your default password environment variable will be the default password for all new users that are created. This is stored in plain text and should not be used **anywhere** else.
## Creating and Editing Users
@@ -56,7 +56,7 @@ There are two ways to create users in Mealie.
### Manually Creating a User
In the Manage Users section you are able to create a user by providing the necessary information in the pop-up dialog.
{: align=right style="height:50%;width:50%"}
{: align=right style="height:50%;width:50%"}
- User Name
- Email
@@ -69,7 +69,7 @@ When creating users manually, their password will be set from the default assign
### Sign Up Links
You can generate sign-up links in the Manage Users section. Select the "create link" button and provide the name of the link and if the user will be an administrator. Once a link is created it will populate in the table where you'll be able to see all active links, delete a link, and copy the link as needed.


!!! tip
When a link is used it is automatically removed from the database.
@@ -77,10 +77,10 @@ You can generate sign-up links in the Manage Users section. Select the "create l
## Creating Groups
You can easily create and manage groups via the frontend in the admin panel under "Manage Users". Navigate to the groups tab and you'll find a "create group" button as well as a list of all groups in your database. To create a group, select the "create group" button and provide a name for the new group. Once created you can now assign users to the new group.
User Groups can only be deleted if no users are apart of the group. If you want to delete a group, you must assign the users to another group before removing.
User Groups can only be deleted if no users are apart of the group. If you want to delete a group, you must assign the users to another group before removing.
## Password Reset
If a user forgets their password an administrator is able to reset their password through the user management page. In the user table, select edit. In the popup windows click the "Reset Password" to reset a users password to the default. This is either 'MyPassword' or set through an environment variable. See the [Installation Page](/mealie/getting-started/install/) for more details on environmental variables
If a user forgets their password an administrator is able to reset their password through the user management page. In the user table, select edit. In the popup window click the "Reset Password" to reset a user's password to the default. This is either 'MyPassword' or set through an environment variable. See the [Installation Page](../getting-started/install.md) for more details on environment variables.
This example was submitted by a user. Have an Example? Submit a PR!
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
Recipes can be imported in bulk from a file containing a list of URLs. This can be done using the following bash or python scripts with the `list` file containing one URL per line.
In a lot of ways, Home Assistant is why this project exists! Since it Mealie has a robust API it makes it a great fit for interacting with Home Assistant and pulling information into your dashboard.
!!! info
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
In a lot of ways, Home Assistant is why this project exists! Since Mealie has a robust API it makes it a great fit for interacting with Home Assistant and pulling information into your dashboard.
### Get Todays Meal in Lovelace
Starting in v0.4.1 you are now able to use the uri `/api/meal-plans/today/image?group_name=Home` to directly access the image to todays meal. This makes it incredible easy to include the image into your Home Assistant Dashboard using the picture entity.
Starting in v0.4.1 you are now able to use the uri `/api/meal-plans/today/image?group_name=Home` to directly access the image to todays meal. This makes it incredibly easy to include the image into your Home Assistant Dashboard using the picture entity.
Here's an example where `sensor.mealie_todays_meal` is pulling in the meal-plan name and I'm using the url to get the image.
The Bearer token can be created from the User Settings page (https://hay-kot.github.io/mealie/documentation/users-groups/user-settings/#api-key-generation)
!!! tip
Due to how Home Assistant works with images, I had to include the additional styling to get the images to not appear distorted. This includes and [additional installation](https://github.com/thomasloven/lovelace-card-mod) from HACS.

User [brasilikum](https://github.com/brasilikum) opened an issue on the main repo about how they had created an [iOS shortcut](https://github.com/hay-kot/mealie/issues/103) for interested users. This is a useful utility for iOS users who browse for recipes in their web browser from their devices. Recent updates to Mealie has made this original shortcut break. Reddit user [BooNooBooNooB](https://www.reddit.com/user/BooNooBooNooB/) has helped to create a new working version.
Don't know what an iOS shortcut is? Neither did I! Experienced iOS users may already be familiar with this utility but for the uninitiated, here is the official Apple explanation:
> A shortcut is a quick way to get one or more tasks done with your apps. The Shortcuts app lets you create your own shortcuts with multiple steps. For example, build a “Surf Time” shortcut that grabs the surf report, gives an ETA to the beach, and launches your surf music playlist.
>
Basically it is a visual scripting language that lets a user build an automation in a guided fashion. The automation can be [shared with anyone](https://www.icloud.com/shortcuts/9d8827cabde44b379e673a60f27fe4bb) but if it is a user creation, you'll have to jump through a few hoops to make an untrusted automation work on your device.
You need to replace `username` and `password` with the login information for your mealie instance.
This guide was submitted by a community member. Find something wrong? Submit a PR to get it fixed!
To make the setup of a Reverse Proxy much easier, Linuxserver.io developed [SWAG](https://github.com/linuxserver/docker-swag)
SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx web server and reverse proxy with PHP support and a built-in certbot client that automates free TLS server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.
## Step 1: Get a domain
The first step is to grab a dynamic DNS if you don't have your own subdomain already. You can get this from for example [DuckDNS](https://www.duckdns.org).
If you already own a domain, you'll need to create an `A` record that points to the machine that SWAG is running on. See
the [SWAG documentation](https://docs.linuxserver.io/general/swag#create-container-via-http-validation) for more details.
## Step 2: Set-up SWAG
Then you will need to set up SWAG, the variables of the docker-compose are explained on the Github page of [SWAG](https://github.com/linuxserver/docker-swag).
This is an example of how to set it up using DuckDNS and docker-compose.
!!! example "docker-compose.yml"
```yaml
version:"2.1"
services:
swag:
image:ghcr.io/linuxserver/swag
container_name:swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
# valid TZs at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- TZ=Europe/Brussels
- URL=<mydomain.duckdns>
- SUBDOMAINS=wildcard
- VALIDATION=duckdns
- CERTPROVIDER=#optional
- DNSPLUGIN=#optional
- DUCKDNSTOKEN=<duckdnstoken>
- EMAIL=<e-mail>#optional
- ONLY_SUBDOMAINS=false#optional
- EXTRA_DOMAINS=<extradomains>#optional
- STAGING=false#optional
volumes:
- /etc/config/swag:/config
ports:
- 443:443
# required if VALIDATION=http above, if you aren't using DuckDNS
- 80:80
restart:unless-stopped
```
Don't forget to change the `mydomain.duckns` into your personal domain and the `duckdnstoken` into your token and remove the brackets.
You can also include the contents of the [mealie docker-compose](mealie/documentation/getting-started/install/#docker-compose-with-sqlite) in the SWAG
docker-compose, without the `ports` section under mealie. This allows SWAG and mealie to communicate on the same docker network, without
making mealie visible to other applications on your machine.
## Step 3: Change the config files
Navigate to the config folder of SWAG and head to `proxy-confs`. If you used the example above, you should navigate to: `/etc/config/swag/nginx/proxy-confs/`.
There are a lot of preconfigured files to use for different apps such as radarr, sonarr, overseerr, ...
To use the bundled configuration file, simply rename `mealie.subdomain.conf.sample` in the proxy-confs folder to `mealie.subdomain.conf`.
Alternatively, you can create a new file `mealie.subdomain.conf` in proxy-confs with the following configuration:
Since SWAG allows you to set up a secure connection, you will need to open port 443 on your router for encrypted traffic. This is way more secure than port 80 for http. For more information about using TLS on port 443, see [SWAG's documentation](https://docs.linuxserver.io/general/swag#cert-provider-lets-encrypt-vs-zerossl) on cert providers and port forwarding.
## Step 5: Restart SWAG
When you change anything in the config of Nginx, you will need to restart the container using `docker restart swag`.
If everything went well, you can now access mealie on the subdomain you configured: `mealie.mydomain.duckdns.org`
Currently Mealie doesn't support creating a long-live token. You can however get a token from the API. This example was pulled from the automatic API documentation provided by Mealie.
Mealie supports long-live api tokens in the user frontend. See [user settings page](../users-groups/user-settings.md)
On your local installation you can access interactive API documentation that provides `curl` examples and expected results. This allows you to easily test and interact with your API to identify places to include your own functionality. You can visit the documentation at `http://mealie.yourdomain.com/docs or see the example at the [Demo Site](https://mealie-demo.hay-kot.dev/docs)
On your local installation you can access interactive API documentation that provides `curl` examples and expected results. This allows you to easily test and interact with your API to identify places to include your own functionality. You can visit the documentation at `http://mealie.yourdomain.com/docs` or see the example at the [Demo Site](https://mealie-demo.hay-kot.dev/docs)
### Recipe Extras
Recipes extras are a key feature of the Mealie API. They allow you to create custom json key/value pairs within a recipe to reference from 3rd part applications. You can use these keys to contain information to trigger automation or custom messages to relay to your desired device.
For example you could add `{"message": "Remember to thaw the chicken"}` to a recipe and use the webhooks built into mealie to send that message payload to a destination to be processed.
To deploy mealie on your local network it is highly recommended to use docker to deploy the image straight from dockerhub. Using the docker-compose below you should be able to get a stack up and running easily by changing a few default values and deploying. You can deploy with either SQLite (default) or Postgres. SQLite is sufficient for most use cases. Additionally, with mealies automated backup and restore functionality, you can easily move between SQLite and Postgres as you wish.
[Get Docker](https://docs.docker.com/get-docker/)
[Mealie on Dockerhub](https://hub.docker.com/r/hkotel/mealie)
- linux/amd64
- linux/arm64
## Quick Start - Docker CLI
Deployment with the Docker CLI can be done with `docker run` and specify the database type, in this case `sqlite`, setting the exposed port `9925`, mounting the current directory, and pull the latest image. After the image is up and running you can navigate to http://your.ip.address:9925 and you'll should see mealie up and running!
```shell
docker run \
-p 9925:80 \
-v `pwd`:'/app/data/'\
hkotel/mealie:latest
```
!!! tip "Default Credentials"
**Username:** changeme@email.com
**Password:** MyPassword
## Docker Compose with SQLite
Deployment with docker-compose is the recommended method for deployment. The example below will create an instance of mealie available on port `9925` with the data volume mounted from the local directory. To use, create a docker-compose.yml file, paste the contents below and save. In the terminal run `docker-compose up -d` to start the container.
```yaml
version:"3.1"
services:
mealie:
container_name:mealie
image:hkotel/mealie:latest
restart:always
ports:
- 9925:80
environment:
PUID:1000
PGID:1000
TZ:America/Anchorage
# Default Recipe Settings
RECIPE_PUBLIC:'true'
RECIPE_SHOW_NUTRITION:'true'
RECIPE_SHOW_ASSETS:'true'
RECIPE_LANDSCAPE_VIEW:'true'
RECIPE_DISABLE_COMMENTS:'false'
RECIPE_DISABLE_AMOUNT:'false'
# Gunicorn
# WEB_CONCURRENCY: 2
# WORKERS_PER_CORE: 0.5
# MAX_WORKERS: 8
volumes:
- ./mealie/data/:/app/data
```
## Docker Compose with Postgres _(BETA)_
Postgres support was introduced in v0.5.0. At this point it should be used with caution and frequent backups.
| AUTO_BACKUP_ENABLED | False | Disable/Enable Mealie's Auto Backup Function |
| API_PORT | 9000 | The port exposed by backend API. **Do not change this if you're running in Docker** |
| API_DOCS | True | Turns on/off access to the API documentation locally. |
| TZ | UTC | Must be set to get correct date/time on the server |
| WORKERS_PER_CORE | 1 | Set the number of workers to the number of CPU cores multiplied by this value (Value \* CPUs). More info [here][workers_per_core] |
| MAX_WORKERS | | Set the maximum number of workers to use. Default is not set meaning unlimited. More info [here][max_workers] |
| WEB_CONCURRENCY | 2 | Override the automatic definition of number of workers. More info [here][web_concurrency] |
## Raspberry Pi 4
!!! tip "Fatal Python error: init_interp_main: can't initialize time"
Some users experience an problem with running the linux/arm/v7 container on Raspberry Pi 4. This is not a problem with the Mealie container, but with a bug in the hosts Docker installation.
Update the host RP4 using [instructions](https://github.com/linuxserver/docker-papermerge/issues/4#issuecomment-735236388), summarized here:
The items below are completely optional and are not required to manage or install your Mealie instance.
### Custom Caddy File
The Docker image provided by Mealie contains both the API and the html bundle in one convenient image. This is done by using a proxy server to serve different parts of the application depending on the URL/URI. Requests sent to `/api/*` or `/docs` will be directed to the API, anything else will be served the static web files. Below is the default Caddyfile that is used to proxy requests. You can override this file by mounting an alternative Caddyfile to `/app/Caddyfile`.
```
{
auto_https off
admin off
}
:80 {
@proxied path /api/* /docs /openapi.json
root * /app/dist
encode gzip
uri strip_suffix /
handle_path /api/recipes/image/* {
root * /app/data/img/
file_server
}
handle @proxied {
reverse_proxy http://127.0.0.1:9000
}
handle {
try_files {path}.html {path} /
file_server
}
}
```
## Deployed without Docker
!!! error "Unsupported Deployment"
If you are experiencing a problem with manual deployment, please do not submit a github issue unless it is related to an aspect of the application. For deployment help, the [discord server](https://discord.gg/QuStdQGSGK) is a better place to find support.
Alternatively, this project is built on Python and SQLite so you may run it as a python application on your server. This is not a supported options for deployment and is only here as a reference for those who would like to do this on their own. To get started you can clone this repository into a directory of your choice and use the instructions below as a reference for how to get started.
There are three parts to the Mealie application
- Frontend/Static Files
- Backend API
- Proxy Server
### Frontend/ Static Files
The frontend static files are generated with `npm run build`. This is done during the build process with docker. If you choose to deploy this as a system application you must do this process yourself. In the project directory run `cd frontend` to change directories into the frontend directory and run `npm install` and then `npm run build`. This will generate the static files in a `dist` folder in the frontend directory.
### Backend API
The backend API is build with Python, FastAPI, and SQLite and requires Python 3.9, and Poetry. Once the requirements are installed, in the project directory you can run the command `poetry install` to create a python virtual environment and install the python dependencies.
Once the dependencies are installed you should be ready to run the server. To initialize that database you need to first run `python mealie/db/init_db.py`. Then to start The web server, you run the command `uvicorn mealie.app:app --host 0.0.0.0 --port 9000`
### Proxy Server
You must use a proxy server to server up the static files created with `npm run build` and proxy requests to the API. In the docker build this is done with Caddy. You can use the CaddyFile in the section above as a reference. One important thing to keep in mind is that you should drop any trailing `/` in the url. Not doing this may result in failed API requests.
Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and Mealie will automatically import the relevant data or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.
[Remember to join the Discord](https://discord.gg/R6QDyJgbD2)!
[Remember to join the Discord](https://discord.gg/QuStdQGSGK)!
!!! note
In some of the demo gifs the styling may be different than the finale application. demos were done during development prior to finale styling.
!!! warning
This is a **BETA** release and that means things may break and or change down the line. I'll do my best to make sure that any API changes are thoughtful and necessary in order not to break things. Additionally, I'll do my best to provide a migration path if the database schema ever changes. Do not use programs like watchtower to auto update your container. You **WILL** run into issues if you do this,
This is a **BETA** release and that means things may break and or change down the line. I'll do my best to make sure that any API changes are thoughtful and necessary in order not to break things. Additionally, I'll do my best to provide a migration path if the database schema ever changes. Do not use programs like watchtower to auto update your container. You **WILL** run into issues if you do this!
## Key Features
- 🔍 Fuzzy search
- 🏷️ Tag recipes with categories or tags to flexible sorting
- 🕸 Import recipes from around the web by URL
- 📱 Beautiful Mobile Views
- 📱 Progressive Web App
- 📆 Create Meal Plans
- 🛒 Generate shopping lists
- 🐳 Easy setup with Docker
@@ -56,16 +56,15 @@ As to why we need a database?
<!-- ROADMAP -->
## Road Map
[See Roadmap](/roadmap)
[See Roadmap](../../roadmap.md)
<!-- CONTRIBUTING -->
## Contributing
Contributions are what make the open source community such an amazing place to be learn, develop, and create. Any contributions you make are **greatly appreciated**. See the [Contributors Guide](https://hay-kot.github.io/mealie/contributors/developers-guide/code-contributions/) for help getting started.
Contributions are what make the open source community such an amazing place to learn, develop, and create. Any contributions you make are **greatly appreciated**. See the [Contributors Guide](../../contributors/non-coders.md) for help getting started.
If you are not a coder, you can still contribute financially. financial contributions help me prioritize working on this project over others and helps me know that there is a real demand for project development.
If you are not a coder, you can still contribute financially. Financial contributions help me prioritize working on this project over others and help me to know that there is a real demand for project development.
<a href="https://www.buymeacoffee.com/haykot" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-green.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
You MUST read the release notes prior to upgrading your container. Currently Mealie provides no database migrations as doing such would slow down development and hinder major changes that may need to happen prior to v1.0.0. Mealie has a robust backup and restore system for managing your data.
You MUST read the release notes prior to upgrading your container. Currently Mealie provides no database migrations as doing so would slow down development and hinder major changes that may need to happen prior to v1.0.0. Mealie has a robust backup and restore system for managing your data.
### Before Upgrading
- Read The Release Notes
@@ -11,10 +11,10 @@
## Backing Up Your Data
[See Backups and Restore Section](/mealie/site-administration/backups-and-exports/) for details on backing up your data
[See Backups and Restore Section](../admin/backups-and-exports.md) for details on backing up your data
## Docker
For all setups using Docker the updating process look something like this
For all setups using Docker the updating process looks something like this
Below are some general guidelines that were considered when creating the organization structure for recipes.
## From The Community
> My categories are mostly based on the 'course' they belong to. Appetizers, Starters, Main course, but also sauces or beverages. When I'm looking for an idea for an every day dinner, I just browse "main course".
>
> My tags are for picking the exact type of meal I'm looking for, based on my mood or my guests' diet, like gluten-free, vegetarian, sweet-sour or casserole. They can also act as sub-categories, like "alcohol" for beverages or "hot meal" for a main course.
>
> User: [sephrat](https://github.com/sephrat)
## Structure
!!! tip
Below is a suggestion of guidelines my wife and I use for organizing our recipes within Mealie. Mealie is fairly flexible, so feel free to utilize how you'd like! 👍
In the diagram below you will see what we came up with using the new custom pages feature. The large circles indicate pages, and the rectangles indicate categories. We've grouped several 'like' categories with each other as a way to quickly find similar items.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.