Grocy: Self-Hosted ERP for Groceries and Household Management
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 free, MIT-licensed, self-hosted web application for managing household stock, groceries, recipes, and tasks. It runs as a PHP application on SQLite, supports Docker deployment, and exposes a full REST API, making it the closest thing to household ERP software outside of enterprise tooling.
- Who is it for?
- Grocy suits individuals or households who want structured, self-hosted tracking of groceries, household consumables, and related tasks, and who are comfortable running a PHP server or a Docker container. The REST API makes it programmable for Home Assistant users and anyone who wants to integrate it into a broader automation setup.
- 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 14 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 27, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Household Stock Tracking Beyond a Shopping List
Grocy's self-description is "ERP beyond your fridge". That framing is accurate: the application manages stock levels (what you have, when it expires), purchase tracking, recipe planning, barcode-based product lookup, and household task scheduling. The README describes it as a project born from nearly ten years of managing the same functions in a C# Windows application and a set of spreadsheets, and the goal of replacing all of that with one coherent web interface.
The target audience is technically capable individuals who want precise control over household inventory without sharing their data with a cloud service. The feature set covers adding products with barcode scanning, tracking expiry dates, generating shopping lists based on what is below a minimum stock level, storing recipes, and logging when household tasks were last done. The web frontend uses the same REST API it exposes publicly, so every operation in the UI is also available programmatically.
PHP on SQLite: The Technical Stack and Prerequisites
Grocy is a PHP application that stores data in SQLite. The README states the requirements as PHP 8.5 with SQLite 3.40 or later, and lists the required PHP extensions: `fileinfo`, `pdo_sqlite`, `gd`, `ctype`, `intl`, `zlib`, and `mbstring`. Any web server capable of running PHP will work. The README gives a specific nginx location block directive as the recommended configuration.
The frontend is built from a collection of JavaScript libraries (Bootstrap 4, DataTables, Chart.js, ZXing for barcode scanning, and others, as listed in package.json). The frontend assets are bundled into the release archive, so end users do not need Node.js to run Grocy in production.
SQLite as the default storage makes the setup minimal: there is no separate database process to manage. The data directory holds the SQLite file and any other application data, and it must be writable by the web server process.
Installing Grocy from a Release Archive
The basic manual installation follows four steps. Download and unpack the latest release archive from releases.grocy.info/latest. Copy the configuration template:
cp config-dist.php data/config.phpEdit `data/config.php` to match your environment, ensure the `data/` directory is writable, and point the web server root at the `public/` subdirectory.
For nginx, the README specifies including this directive in the server location block:
try_files $uri /index.php$is_args$query_string;Without this directive, URL rewriting will not work. The alternative is to set `DISABLE_URL_REWRITING` in `data/config.php`, though the README notes that option only as a fallback.
The default login after installation is username `admin` with password `admin`. The README explicitly instructs changing that password immediately in the user menu at the top right.
For Docker, the README directs users to https://hub.docker.com/r/linuxserver/grocy, which provides a maintained container image maintained by the LinuxServer.io team. Docker is the simpler deployment path for users who do not want to configure a PHP server directly.
On Linux, updates are automated through `update.sh`. The README notes it must be made executable before use:
chmod +x update.shThe script unpacks the latest release, preserves the `data/` directory, and creates a timestamped `.tgz` backup in `data/backups/`. Backups older than 60 days are deleted automatically during the update.
Barcode Scanning and Open Food Facts Product Lookup
Grocy integrates barcode scanning at the input field level. Fields that show a barcode icon accept either a USB barcode reader or camera-based scanning through the browser. The camera scanning uses the ZXing library, which processes the camera stream entirely on the client side with no data leaving the browser. The README notes that camera scanning requires HTTPS due to browser security restrictions.
For USB barcode scanners, the README recommends configuring the scanner to prefix barcodes with a character not normally found in product names (the author uses `$`) and to send a TAB keystroke after each scan. This prefix approach allows the application to distinguish a barcode scan from manual keyboard input in the same field.
When a barcode is entered for an unknown product, Grocy can look it up against external services. The default plugin looks up products against Open Food Facts, a public food product database. This lookup returns product name, quantity, and other metadata, allowing new products to be added to the inventory without manually entering every field. The plugin uses the `STOCK_BARCODE_LOOKUP_PLUGIN` option in `data/config.php`. Custom lookup plugins can be written using the DemoBarcodeLookupPlugin.php template included in the `plugins/` directory.
The REST API and Home Assistant Integration
Grocy's web frontend is built entirely on top of its own REST API. The README states that "everything you can do there is also possible via the API." The API is documented through an embedded Swagger UI instance at the `/api` path of any running Grocy instance. The live demo at demo.grocy.info/api shows the full endpoint list.
This API is the primary integration point for Home Assistant. The community search data shows "grocy home assistant" as a significant search pattern, reflecting that many Grocy users integrate it with Home Assistant for automations such as alerting when a product expires, triggering shopping list additions from automations, or displaying stock levels on a dashboard.
The API design allows external scripts to add stock entries, create shopping list items, log task completions, and retrieve expiry data. Since Grocy stores everything in SQLite, direct database access is also technically possible, but the REST API is the documented and supported integration path.
Limitations: RTL Support, Multi-User, and Scale
The README explicitly states that RTL languages are not yet supported. For users whose primary language reads right-to-left, the interface will be rendered as LTR regardless of locale settings. Localization is otherwise thorough: Grocy uses Transifex for translations, and any language that reaches 70% translation coverage is included in releases.
Grocy's data model does not appear designed for multiple independent households sharing a single instance. The application has no concept of separate household namespaces or role-based access scoping. It appears designed for a single household with a shared instance and a single primary administrator.
Groceries management is Grocy's core focus. Mealie is a dedicated self-hosted recipe manager that focuses exclusively on recipe storage, meal planning, and shopping list generation from recipes. The difference is scope: Grocy covers the full household stock lifecycle (what you have, when it expires, what to buy, what tasks to do), while Mealie focuses on the cooking workflow. For a household that only wants recipe management, Mealie is a more focused tool. For one that wants stock tracking and expiry management alongside recipes, Grocy covers both in one application.
Maintenance, the Desktop Option, and License
The last push to the repository was on September 16, 2026. The most recent release is v4.7.1, published September 4, 2026. Releases have been consistent throughout 2026 (v4.6.0 in March, v4.7.0 in August, v4.7.1 in September), indicating regular maintenance.
For Windows users who do not want to manage a web server, the README describes Grocy Desktop as a companion project that wraps the PHP application as a native Windows application. It is also available through the Microsoft Store. The installation is described as clicking "next" twice, with no web server configuration required.
Glancing at the default language behavior: the default locale is English, which is integrated directly into the code rather than a translation file. The German localization is maintained by the author. Other languages are contributed through Transifex and are included once they reach 70% completion. The default locale can be set in `data/config.php`:
Setting('DEFAULT_LOCALE', 'de');Grocy is released under the MIT license. MIT permits use, modification, and redistribution without restrictions other than retaining the license notice, making it suitable for personal and commercial deployments.
Editorial conclusion
Grocy suits individuals or households who want structured, self-hosted tracking of groceries, household consumables, and related tasks, and who are comfortable running a PHP server or a Docker container. The REST API makes it programmable for Home Assistant users and anyone who wants to integrate it into a broader automation setup. It is not designed as a shared multi-family or team platform, and RTL language support is absent. Before deploying, confirm that PHP 8.5 and the required extensions are available in your hosting environment, and change the default admin password immediately after the first login.
Frequently asked questions
What is Grocy used for?
Grocy is used for tracking household grocery stock, managing product expiry dates, generating shopping lists based on minimum stock levels, storing recipes, and logging household tasks. The REST API makes it programmable for integration with home automation systems.
Is Grocy free to use?
Yes. Grocy is released under the MIT license with no paid tier or subscription. It runs on self-hosted infrastructure, so the operator pays for their own server or hosting rather than a Grocy subscription.
Is Grocy self-hosted?
Yes. Grocy is a self-hosted application that runs on a web server you control. It can be deployed via Docker using the linuxserver/grocy image or installed manually as a PHP application on any compatible server.
How do you install Grocy?
Grocy can be installed by downloading the release archive from releases.grocy.info/latest, copying config-dist.php to data/config.php, making the data/ directory writable, and pointing the web server root at the public/ directory. The Docker route uses the linuxserver/grocy image and requires no PHP configuration.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/grocy-grocy)