# v0.5.0 Too Many Changes! 

**App Version: v0.5.0**

**Database Version: v0.5.0**

## Breaking Changes

!!! error "Breaking Changes"

    #### Database
    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
- Fixed #356 - Shopping lists generate duplicate items
- Fixed #271 - Slow handling of larger data sets
- Fixed #472, #469, #458, #456 - Improve Recipe Parser

## Features and Improvements

### Highlights
- Recipe Parser
  - Recipes can now be imported with a bookmarklet!
  - 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