#8388·mealie

[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

  1. During initial entry by spouse typing "Salt" into field:
Image
  1. 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:
Image
  1. 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:
Image
  1. Now when my spouse refreshes the page and opens the drop-down, "Salt" is shown as an available option:
Image

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 0

Mealie 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=true