EverShelf

EverShelf

Docker app from DevlinDelFuego's Repository

Overview

EverShelf: Your pantry's best friend. A self-hosted, open source smart pantry manager with AI expiry tracking, barcode scanning, smart shopping lists, and Android Kiosk support.

Connects to OpenFoodFacts for product data (millions of items). Features include camera-based barcode reading, nutrition tracking, allergen information, and offline support for kitchen devices.

For full features (barcode scanning, expiry reading, AI recipe suggestions), you'll need to configure environment variables in the .env file:

🏠 EverShelf

Self-hosted pantry manager — inventory, barcode scan, AI recipes, less waste.

git clone https://github.com/dadaloop82/EverShelf.git && cd EverShelf
cp .env.example .env && docker compose up -d    # → http://localhost:8080
✨ Features
Inventory Scan, locations, expiry, opened packs, favourites, CSV import/export
AI Gemini · OpenAI · Llama — identify, OCR expiry, recipes, chat
Shopping Smart list, anti-waste qty, recipe → list with pantry deduction, optional Bring!
Cooking Steps, TTS, timers, zero-waste tips
Calendar Subscribe to expiries — ICS/WebCal feed for Google/Apple Calendar
Alerts Expiry push without Home Assistant — ntfy, JSON webhook or HA, with a test button
PWA Offline queue, installable, multi-device

Integrations: Home Assistant · MCP · Health Bridge · Kiosk

Languages: IT · EN · DE · FR · ES · ZH — details in wiki → Features

📰 What's new

v1.11.11 — scan screen redesign: hero camera, favourites/recents rail, AI glass tips on-stream, speculative barcode prefetch v1.11.10 — recipe archive dedup by content_hash (no more chat clones); many free-slot recipes per day; “Usa ingrediente” shows big needed qty and scale X / Y v1.11.9 — kiosk dedicated pairing step + token hand-off to WebView (kiosk 1.7.24) v1.11.8 — pairing code visible on a paired device (Settings → Security); kiosk APK from LAN + kiosk-latest; kiosk 1.7.23 emerald Corporate UI redesign (wizard / settings / splash) v1.11.7 — empty recipe “missing from pantry” stub gone; undo of location moves is a pair v1.11.6 — HA shopping_mode + calendar attention=1 v1.11.5 — shopping pack-equiv restock, conf caps, Bring hard-off when internal, HA expiry = dashboard rules v1.11.4 — Open Prices (free) + opt-in Web Push PWA; delete undo toast; torch fillLightMode; settings “da decidere” for prices/push v1.11.3 — shopping trip mode, ntfy digest/Telegram, zerowaste tips, guided settings nav v1.11.2 — extending expiry refreshes banner, dashboard and the current page; optimization backlog in docs/OPTIMIZATION-BACKLOG.md v1.11.1 — faster barcode lookup, top-3 auto-favourites, smart shopping catches depleted stock, Android CI stabilisation v1.11.0 — an article is stored in the singular (Fetta biscottata integrale) and the pantry shows the plural of what is really there (3 Uova medie, 500 g Pasta stays a mass); certifications keep their capitals (IGP, DOP, EVO); the scan step lets you correct the identified title and brand before saving v1.10.1 — splash boot rail: stage icons go grey → blinking → coloured with an aura, a prominent version chip, and every article title now starts with a capital letter v1.10.0 — the genre leads every article title (Yogurt Fiori di latte); products you use often become favourites v1.9.1 — settings collapses into sub-sections, dashboard overview/freshness/trend panels, expiry push without Home Assistant (ntfy/webhook), cron watchdog, setup checklist v1.9.0 — Calendar feed (ICS/WebCal); recipe → shopping list with the pantry deducted; seasonal produce filters; third CSS layer v1.8.10 — Docker build stops baking in local data; CSRF header required on every POST; error reports redacted and GitHub publishing opt-in v1.8.9 — Localised tooltips, placeholders and aria labels; fixed PWA manifest icons v1.8.8 — One-time pairing code for the API token; startup no longer dead-ends behind the splash

→ CHANGELOG.md

⚙️ Install & config

Docker (recommended): docker compose pull && docker compose up -d

Manual: clone → cp .env.example .env → chmod 755 data/ → point web server at repo root.

Minimum .env:

AI_ENABLED=true
AI_PROVIDER=gemini
GEMINI_API_KEY=your_key

Optional: API_TOKEN, SHOPPING_MODE=bring, cron every 5 min on api/cron_smart_shopping.php

Behind a reverse proxy: set TRUSTED_PROXIES to the proxy IP(s)/CIDR so rate limiting sees real client IPs, and EVERSHELF_CANONICAL_HOST in the Apache vhost (docker/apache-evershelf.conf) to enable the forced-HTTPS redirect.

First run with API_TOKEN set: the web UI asks for a one-time pairing code. On a device that is already paired, the live code is under Settings → System → Security (and Info). It is also printed in the server log:

grep -i "pairing code" logs/evershelf_*.log | tail -1   # bare metal
docker logs evershelf 2>&1 | grep -i "pairing code" | tail -1   # Docker

The token is never handed to an anonymous request. On a fully trusted LAN you can opt out with API_BOOTSTRAP_OPEN=true (re-exposes the token — see SECURITY.md).

→ Wiki: Installation · Configuration

🔌 Integrations & API
Link
Home Assistant ha-evershelf
MCP agents mcp-server/README.md
Health / Fuel Mode evershelf-health-bridge/README.md
Android kiosk + scale evershelf-kiosk/README.md
Calendar feed (ICS) Wiki → Calendar Feed
REST API Wiki → API
🏗️ Architecture & security

index.html SPA · api/index.php · assets/js/app.js · SQLite in data/

→ ARCHITECTURE.md · CORPORATE-UI.md · SECURITY.md

🤝 Contributing

CONTRIBUTING.md · Issues · Discussions · Roadmap

Add a language: copy translations/en.json, translate values, open a PR.

📸 Demo

Demo

Live demo — no install, full AI.


MIT · Stimpfl Daniel · @dadaloop82

Unrelated iOS app “EverShelf” by Joshumi Technologies — no affiliation.

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/dadaloop82/evershelf:latest
Last Updated2026-10-11
First Seen2026-10-11

Runtime arguments

Web UI
http://[IP]:[PORT:80]
Network
Bridge
Privileged
false

Template configuration

PortPorttcp

WebUI port for EverShelf

Target
80
Default
80
Value
80
DataPathrw

EverShelf data directory

Target
/var/www/html/.env
Default
/mnt/user/appdata/evershelf/.env
Value
/mnt/user/appdata/evershelf/.env