Grocy: A Self-Hosted Household ERP That Tracks Stock, Chores, and More
ERP beyond your fridge - Grocy is a web-based self-hosted groceries & household management solution for your home.
At a glance
- What is it?
- Grocy is a web-based, self-hosted groceries and household management tool that goes beyond a simple shopping list. It offers stock tracking, chores, and a REST API, but its PHP setup and single-maintainer model demand careful consideration.
- Who is it for?
- Adopt Grocy if you are comfortable with a PHP application that requires a writable data directory, a webserver pointing to the public folder, and a willingness to maintain a config file. It suits households that want a single tool for stock, chores, and meal planning, and that value a REST API for custom integrations.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 11 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Grocy Solves and Who It Is For
Grocy addresses a problem that many households face but few tools tackle well: managing the inventory of a home, not just a shopping list. The README describes it as an 'ERP beyond your fridge,' a phrase that signals its ambition to handle stock levels, chores, meal planning, and other household tasks in one place. The author, Bernd Bestel, states that he built it after years of using a C# Windows forms application and Excel sheets, which he found painful to use. That context matters. Grocy is for people who want a self-hosted system that tracks what is in the pantry, when items expire, and what needs to be done, rather than a simple to-do list. It is not aimed at businesses or multi-user organizations. The typical user is a technically inclined individual who can run a webserver and is willing to maintain a small PHP application. The project is a hobby, as the author explicitly notes, so users should expect a tool shaped by one person's household needs, not a commercial product with a support team.
The Core Mechanism: Stock, Chores, and the REST API
Grocy's functionality centers on a few interconnected modules. The stock management feature tracks quantities of items, their locations, and expiry dates, which is the foundation for a household ERP. The README also mentions chores, which are recurring tasks, and meal planning, though the README is truncated and does not detail these modules. What is clear is that the web frontend uses a REST API for nearly everything. The README states: 'The web frontend uses exactly this API for pretty much everything. So everything you can do there is also possible via the API.' That design is a significant architectural choice. It means that every action, from adding a product to completing a chore, goes through a defined interface, which makes automation possible. Users can write scripts to interact with Grocy without touching the UI. The API is documented via an integrated Swagger UI instance on the /api endpoint, which is a practical touch for developers. The data flow is straightforward: the frontend makes HTTP requests to the API, which then interacts with a SQLite database. This is not a microservices architecture or a message queue. It is a simple, monolithic PHP application that exposes a clean API. The simplicity is both a strength and a limitation, as it keeps deployment easy but also means that heavy customization requires working within the API's constraints.
Getting It Running: Commands and Configuration
Installation is manual but well documented. The README gives a clear sequence: unpack the latest release, copy config-dist.php to data/config.php and edit it, ensure the data directory is writable, and point the webserver root to the public directory. For nginx, you must include a specific line in your location block: try_files $uri /index.php$is_args$query_string;. Alternatively, you can disable URL rewriting by setting DISABLE_URL_REWRITING in data/config.php. The default login is admin with password admin, and the README insists that you change it immediately. That is a concrete, security-critical step. Platform requirements are explicit: PHP 8.5 with SQLite 3.40 or later, and a list of PHP extensions: fileinfo, pdo_sqlite, gd, ctype, intl, zlib, mbstring. If you prefer Docker, the README points to a LinuxServer.io image on Docker Hub, which is a common community distribution. There is also a Grocy Desktop variant for Windows that bundles a webserver, reducing setup friction. The update process is equally manual: overwrite everything except the data directory, and check config-dist.php for new options. A provided update.sh script on Linux automates this and creates a backup in data/backups, deleting backups older than 60 days. This is a practical approach, but it places the burden on the user to keep the config file in sync with new releases.
Barcode Scanning and External Lookup: A Mixed Bag
Grocy integrates barcode scanning in a way that reflects real-world household use. The README explains that fields with a barcode icon can accept scanned input, and the author recommends a USB laser scanner for reliability. That advice is telling: the built-in camera scanning, powered by ZXing, works only over HTTPS due to browser security restrictions, and the README notes that it is 'totally offline / client-side camera stream processing.' That is a useful feature, but the author's personal recommendation to use a USB scanner suggests that camera scanning is not the primary path. The external barcode lookup is more interesting. Products can be added by scanning a barcode and looking it up against external services, with a plugin for Open Food Facts included by default. The configuration option STOCK_BARCODE_LOOKUP_PLUGIN controls which plugin is used. This is a concrete mechanism that can save time when entering new items. However, it depends on external services, which means network connectivity and the reliability of those services. If Open Food Facts is down or lacks a product, the lookup fails. The plugin system is extensible, with a demo plugin available as a template, but writing a custom plugin requires PHP knowledge and an understanding of the API.
Limitations and Failure Modes: What to Watch For
Grocy has several genuine limitations that potential users should weigh. The most obvious is the lack of RTL language support, which the README explicitly states: 'RTL languages are not yet supported.' That rules out Grocy for households that primarily use Arabic, Hebrew, or other right-to-left scripts. Another limitation is the hobby-project status. The README identifies the author as a single maintainer, and while the release history shows regular updates (v4.5.0 in 2025, v4.6.0 in early 2026, v4.7.0 in August 2026), the pace is not guaranteed. Users who need a long-term support commitment may find this risky. The update process is also a failure mode. Overwriting everything while keeping the data directory works only if you do it correctly. A mistake could lead to data loss, and the README's advice to check config-dist.php for new options is a manual step that can be missed. The requirement for PHP 8.5 is a constraint; if your server runs an older PHP version, you cannot run the latest Grocy. Finally, the external barcode lookup depends on third-party services, which introduces a point of failure that is outside the project's control. These are not deal-breakers for everyone, but they are real.
Alternatives: Home Assistant and Dedicated Inventory Tools
Grocy is not the only self-hosted option for household management. A direct alternative is Home Assistant, which is a home automation platform that also offers inventory and shopping list integrations. The difference in approach is fundamental: Home Assistant is built around automating devices and sensors, with inventory as one of many components, whereas Grocy is a purpose-built household ERP. If you already run Home Assistant, you might prefer to keep everything in one system, but Home Assistant's stock tracking is often less detailed than Grocy's, which offers expiry dates, locations, and a dedicated API. Another alternative is a simple inventory spreadsheet, which the author himself used before Grocy and found inadequate. The trade-off is clear: a spreadsheet is flexible but lacks the structured workflows and barcode support that Grocy provides. For users who want a lightweight solution without a PHP dependency, a tool like Tandoor Recipes focuses on meal planning and recipes, but it does not cover chores or stock management to the same degree. The key distinction is that Grocy treats the household as a system with inventory, tasks, and interactions, while alternatives tend to specialize in one area. Choosing between them depends on whether you want a single, self-contained tool or an ecosystem that integrates with other home automation.
Maintenance, Upgrades, and Licensing
Maintenance and upgrade cost is a central consideration for Grocy. The update process is manual, and the README provides a script for Linux users, but the responsibility falls on the administrator. The script updates the application and creates a backup, but it also deletes backups older than 60 days, which means you have a limited window to recover a previous version. The config file is a persistent maintenance point: when a new release comes out, you must compare config-dist.php with your data/config.php and add any new options manually. The README states that default values from config-dist.php will be used for settings not defined in your config, which is helpful, but it still requires attention. The project's license is MIT, which is permissive and allows modification and redistribution, but it comes with no warranty, as is typical for such licenses. That is not a legal opinion, but it means you cannot hold the author responsible for data loss or bugs. The localization system is community-driven via Transifex, and the default language is English, with German always maintained. This is a positive for international users, but the RTL limitation remains. Overall, the maintenance burden is moderate for a PHP application, but it is higher than a managed service or a packaged desktop app.
Editorial conclusion
Adopt Grocy if you are comfortable with a PHP application that requires a writable data directory, a webserver pointing to the public folder, and a willingness to maintain a config file. It suits households that want a single tool for stock, chores, and meal planning, and that value a REST API for custom integrations. Do not adopt it if you need a fully polished, enterprise-grade ERP or if you expect frequent, guaranteed updates. Before adopting, verify that your PHP environment meets the required extensions (fileinfo, pdo_sqlite, gd, ctype, intl, zlib, mbstring) and that you can handle the update process, which involves overwriting files while preserving the data directory. The project is a hobby effort, so check the issue tracker for recent activity and confirm that the features you need, such as RTL language support or specific barcode workflows, are not missing. Grocy is a genuine, self-contained solution, but its success depends on your ability to manage a PHP stack and accept a single-maintainer roadmap.
Community notes