[BUG] - Spouse (non-admin) can't add ingredients to recipe but I (admin) can
Author: spiralhamCreated Sep 13, 2026Updated Sep 13, 2026
Labelsbugtriage
First Check
- This is not a feature request.
- I added a very descriptive title to this issue (title field is above this).
- I used the GitHub search to find a similar issue and didn't find it.
- I searched the Mealie documentation, with the integrated search.
- I already read the docs and didn't find an answer.
- This issue can be replicated on the demo site (https://demo.mealie.io/).
What is the issue you are experiencing?
I'm using Mealie with sqlite. When new ingredients in a recipe are manually created by my spouse (who is not a Mealie admin), they aren't being saved. When I however create them using the same method, they are saved properly.
Steps to Reproduce
- During initial entry by spouse typing "Salt" into field:
- After pressing enter, the field goes back to being blank ("Salt" is removed and replaced by "Choose Food" hint). Dropping down the available options shows no "Salt" entry was saved:
- When I (a Mealie admin) login and edit the same recipe using the same steps, after pressing enter "Salt" remains in the field like so:
- Now when my spouse refreshes the page and opens the drop-down, "Salt" is shown as an available option:
Please provide relevant logs
There's no activity in docker logs while taking these steps. There are however a lot of prior IndexError: index 0 is out of bounds for axis 0 with size 0 entries with py stacktraces. I don't know if this is relevant but I'm including it anyway:
ERROR 2026-09-13T13:55:52 - Exception in ASGI application
Traceback (most recent call last):
File "/opt/mealie/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/applications.py", line 1163, in __call__
await super().__call__(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/applications.py", line 96, in __call__
await self.middleware_stack(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in __call__
raise exc
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in __call__
response = await self.dispatch_func(request, call_next)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/middleware/locale_context.py", line 21, in dispatch
response = await call_next(request)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next
ERROR 2026-09-13T13:55:52 - Exception in ASGI application
Traceback (most recent call last):
File "/opt/mealie/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/applications.py", line 1163, in __call__
await super().__call__(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/applications.py", line 96, in __call__
await self.middleware_stack(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in __call__
raise exc
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
await self.app(scope, receive, _send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/base.py", line 193, in __call__
response = await self.dispatch_func(request, call_next)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/middleware/locale_context.py", line 21, in dispatch
response = await call_next(request)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/base.py", line 168, in call_next
raise app_exc from app_exc.__cause__ or app_exc.__context__
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
raise app_exc from app_exc.__cause__ or app_exc.__context__
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/base.py", line 144, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 88, in __call__
await self.app(scope, receive, send_wrapper)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/sessions.py", line 88, in __call__
await self.app(scope, receive, send_wrapper)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 78, in __call__
await responder(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 103, in __call__
await self.app(scope, receive, self.send_with_compression)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 78, in __call__
await responder(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/gzip.py", line 103, in __call__
await self.app(scope, receive, self.send_with_compression)
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
raise exc
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/routing.py", line 670, in __call__
await self.middleware_stack(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2734, in app
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1791, in _handle_selected
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
File "/opt/mealie/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
raise exc
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/routing.py", line 670, in __call__
await self.middleware_stack(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2734, in app
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1791, in _handle_selected
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1791, in _handle_selected
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1791, in _handle_selected
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1800, in _handle_selected
await original_route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1279, in handle
await app(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 158, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
raise exc
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1791, in _handle_selected
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1791, in _handle_selected
await route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1780, in handle
await self.original_router.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 2789, in handle
await included_router._handle_selected(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1800, in _handle_selected
await original_route.handle(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 1279, in handle
await app(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 158, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
raise exc
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "/opt/mealie/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
await app(scope, receive, sender)
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 144, in app
response = await f(request)
^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 706, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 352, in run_endpoint_function
return await dependant.call(**values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/routes/parser/ingredient_parser.py", line 22, in parse_ingredients
return await parser.parse(ingredients.ingredients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/services/parser_services/ingredient_parser.py", line 279, in parse
return [await self.parse_one(ingredient) for ingredient in ingredients]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/services/parser_services/ingredient_parser.py", line 275, in parse_one
parsed_ingredient = parse_ingredient(ingredient_string, custom_units=database_units)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/parsers.py", line 122, in parse_ingredient
return parse_ingredient_en(
^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 144, in app
response = await f(request)
^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 706, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/fastapi/routing.py", line 352, in run_endpoint_function
return await dependant.call(**values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/routes/parser/ingredient_parser.py", line 22, in parse_ingredients
return await parser.parse(ingredients.ingredients)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/services/parser_services/ingredient_parser.py", line 279, in parse
return [await self.parse_one(ingredient) for ingredient in ingredients]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/mealie/services/parser_services/ingredient_parser.py", line 275, in parse_one
parsed_ingredient = parse_ingredient(ingredient_string, custom_units=database_units)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/parsers.py", line 122, in parse_ingredient
return parse_ingredient_en(
^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/en/parser.py", line 85, in parse_ingredient_en
labels, scores = zip(*TAGGER.tag_from_features(features))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/inference.py", line 79, in tag_from_features
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/en/parser.py", line 85, in parse_ingredient_en
labels, scores = zip(*TAGGER.tag_from_features(features))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/inference.py", line 79, in tag_from_features
return self.model.predict_sequence(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/inference.py", line 334, in predict_sequence
lattice_scores[0] = state_scores[0]
~~~~~~~~~~~~^^^
IndexError: index 0 is out of bounds for axis 0 with size 0
return self.model.predict_sequence(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mealie/lib/python3.12/site-packages/ingredient_parser/inference.py", line 334, in predict_sequence
lattice_scores[0] = state_scores[0]
~~~~~~~~~~~~^^^
IndexError: index 0 is out of bounds for axis 0 with size 0Mealie Version
Version: v3.25.1
Docker image: ghcr.io/mealie-recipes/mealie:latest
Build tag: cce7601ef3ff3fddb3932918cd9d59b6c7158c39
Deployment
Docker (Linux)
Additional Deployment Details
Using OIDC with Pocket ID for auth, here's the config from docker-compose.yml:
- OIDC_AUTH_ENABLED=true
- OIDC_CONFIGURATION_URL=https://redacted/.well-known/openid-configuration
- OIDC_CLIENT_ID=redacted
- OIDC_CLIENT_SECRET=redacted
- OIDC_USER_GROUP=user__mealie
- OIDC_ADMIN_GROUP=admin
- OIDC_AUTO_REDIRECT=true
- OIDC_PROVIDER_NAME=Pocket ID
- OIDC_REMEMBER_ME=trueSource: mealie-recipes/mealie