Most people find out food has expired after they have already opened the package. And most people have, at some point, bought a second bottle of something sitting perfectly fine in the cupboard. These are not big problems, but they are constant ones, and they compound into real money over a year. Grocy is a self-hosted open-source application, available at github.com/grocy/grocy with 9,340 stars (observed July 2026) and an MIT license, that tracks exactly this: what you have, when it expires, and what you need to buy.
| Fact | Value |
|---|---|
| What it is | Self-hosted household inventory and management system |
| Built by | Bernd Bestel and contributors (open-source) |
| License | MIT (free to use) |
| Platforms | Docker, Linux, Raspberry Pi |
| Requires | Docker or PHP web server |
| Install method | Docker Compose |
| Verdict | Install if you regularly waste food from forgetting expiry dates or buy duplicates of things already in your pantry |
What Grocy actually is
Grocy describes itself as an ERP for your household. ERP stands for Enterprise Resource Planning, which is the category of business software that connects inventory, purchasing, and logistics into one system. A warehouse knows what stock it has, when to reorder, and what needs to go out because its ERP connects those three things. Grocy applies the same concept at home: it knows what you own, what is running low, and what tasks are scheduled.
The metaphor is more than marketing. The three pillars in a business ERP map directly to what Grocy does: inventory management becomes your pantry and fridge contents, procurement becomes your shopping list, and operations becomes your chores calendar. None of these features are novel individually. The value is that they connect. When stock of an item drops below a minimum quantity you set, Grocy adds it to your shopping list automatically. When a chore is due, it appears on the dashboard. When something is about to expire, it surfaces in the expiry view before you have to dig through the freezer to find out.
The project runs on a web server, which means you access it through a browser on any device on your network. It is self-hosted, meaning the data lives on your own machine or home server rather than a third-party cloud. Bernd Bestel started the project and continues to maintain it alongside open-source contributors. The MIT license means you can run it indefinitely at no cost.
What you get after installing it
The stock management view is where most of the work happens. Each product in your household has a stock entry with a current quantity, a minimum stock level (the point at which Grocy adds it to your shopping list), and an optional expiry date for each unit. You can track your pantry, fridge, freezer, and any other storage location as separate locations within the system. The dashboard shows a summary: what is expiring in the next five days, what has already expired, and what is below its minimum stock level.
Expiry tracking is the feature that justifies the install for most households. When you add an item, you log its best-before date. Grocy surfaces anything expiring within a configurable window, currently showing as a count on the dashboard and a detailed list when you drill in. For households that regularly find themselves throwing away yogurt or salad bags, having a running list of what needs to be used first is the practical change that makes a difference.
The barcode scanner integration makes adding stock fast enough to actually use. Grocy has two companion options: Grocy Android (an open-source app available on F-Droid, an independent Android app store for open-source software, and on GitHub) and Barcode Buddy (a separate open-source scanning tool). When you unpack groceries, you scan each item's barcode with your phone. Grocy looks up the product in its database, finds or creates the entry, and adds the quantity to stock with a prompt for the expiry date. When you use the last of something, you scan it out. The scanning flow handles the part that makes manual inventory systems collapse: the ongoing maintenance.
The shopping list auto-populates from your stock minimums, but you can also add items manually or have an AI agent add them via the Grocy API (the programming interface Grocy exposes so outside tools and agents can read and update your household data). When you go shopping, the list is available in the browser on your phone. Items can be grouped by store section to match the physical layout of where you shop.
Beyond stock and shopping, Grocy covers a chores module for recurring household tasks. You define a chore (clean the bathroom, change the HVAC filter (heating and air conditioning system), test smoke alarms), set a schedule, and Grocy tracks when it was last done and when it is due. Equipment tracking handles maintenance schedules for appliances. Battery tracking records which device uses which battery type. Meal planning integrates with stock to suggest recipes based on what you have available and what is about to expire.
The install experience
Grocy runs on Docker. Docker is software that packages an application and all its dependencies into a container, a portable unit that runs identically on any machine without manual configuration of the underlying system.
The recommended install uses Docker Compose. Docker Compose is a tool that lets you define a multi-component application in a single configuration file and start it with one command. For Grocy, the compose file pulls the official image from the LinuxServer.io project, which maintains a well-supported Grocy container. A minimal configuration looks like this:
services:
grocy:
image: lscr.io/linuxserver/grocy:latest
container_name: grocy
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./grocy/config:/config
ports:
- 9283:80
restart: unless-stopped
With Docker installed, docker compose up -d starts Grocy. The interface is available at http://localhost:9283. First login uses the default credentials in the documentation, which you change immediately. The settings page lets you configure currency, date format, first day of the week, and expiry days warning threshold.
The realistic setup time for someone who has used Docker before is under ten minutes. For a first-time Docker user on a home server or a Raspberry Pi (a low-power single-board computer that runs Linux and is commonly used for self-hosted applications), the official documentation at grocy.info covers the installation steps in enough detail to follow without prior Linux experience. LinuxServer.io also maintains documentation for their container specifically.
Setting up the barcode scanner companion adds another fifteen minutes. You install the app on your phone, point it at your Grocy instance's URL, and authenticate with an API key generated from the Grocy settings page. The first few grocery unpacking sessions involve creating product entries for items not already in Grocy's database, but the database fills quickly and subsequent scans match existing products.
One consideration worth naming: Grocy does not have built-in data sync to cloud backup. If you are running it on a home server or Raspberry Pi, you are responsible for backing up the data directory. The data lives in a SQLite database file, which is a single-file database format, and copying that file to a second location is the backup strategy. It is simple but it is your responsibility.
Where it fits and what to compare it to
OurGroceries is a hosted shopping list app available on iOS and Android, with a $1.99 per month subscription for the premium tier. It handles shared grocery lists well and has a clean mobile experience, but it does not track inventory or expiry dates. If your only need is a shared shopping list between household members, OurGroceries is less setup than Grocy. If you want to know what is in your pantry and when it expires, OurGroceries does not do that.
AnyList is an iOS-first recipe and grocery list app with a subscription pricing model. It is polished and integrates recipes with shopping lists, but it stores data in AnyList's cloud, covers iOS and Mac only, and has no inventory or expiry tracking.
A plain grocery app on your phone handles the immediate shopping list case but not the inventory problem. You still open the fridge to check what you have before writing the list, and you still discover expired items after the fact.
Paper lists work for the shopping trip and fail for everything else. No search, no expiry dates, nothing shared across devices, nothing that updates when stock changes.
Grocy sits at the intersection of features none of the above cover together: inventory tracking, expiry dates, barcode scanning, and a self-hosted architecture where your household data stays on your own machine.
Verdict
Install Grocy if you regularly throw away food that expired before you got to it, or if you regularly come home from the grocery store with something you already had. Those two problems are exactly what the core stock and expiry tracking features address. The barcode scanning workflow is the thing that makes it sustainable past the first week: scanning items in and out is fast enough that it does not become another abandoned spreadsheet.
The caveats are real. Grocy requires self-hosting, which means a machine that stays on (a Raspberry Pi, a home server, or a NAS (network-attached storage device, a compact always-on box designed for home file storage and small services)) and a Docker install. There is no hosted cloud version you can sign up for in two minutes. The mobile experience is a browser interface rather than a native app, which is functional but not as polished as a purpose-built phone app. And the initial product database setup takes a few sessions of creating entries for items not already recognized by barcode lookup.
For the household that is committed to reducing food waste and wants a system rather than a reminder app, the install is worth the hour of setup. The project has 9,340 GitHub stars, an active issue tracker, and has been maintained since 2017. The MIT license and self-hosted architecture mean there is no vendor dependency. Your pantry data stays yours.