Grocy is a web-based self-hosted groceries & household management solution for your home
Created by @berrnd
- Public demo of the latest stable version (
release
branch) → https://demo.grocy.info - Public demo of the current development version (
master
branch) → https://demo-prerelease.grocy.info
See the website → https://grocy.info
- General help and usage questions → r/grocy subreddit
- Bug Reports and Feature Requests → Issue Tracker
Please don't send me private messages or call me regarding anything Grocy. I check the issue tracker and the subreddit pretty much daily, but don't provide any support beyond that.
See the website for a list of community contributed Add-ons / Tools. → https://grocy.info/addons
Checkout Grocy Desktop, if you want to run Grocy without having to manage a webserver just like a normal (Windows) desktop application.
Directly download the latest release - the installation is nothing more than just clicking 2 times "next".
Grocy is technically a pretty simple PHP application, so the basic notes to get it running are:
- Unpack the latest release
- Copy
config-dist.php
todata/config.php
+ edit to your needs - Ensure that the
data
directory is writable - The webserver root should point to the
public
directory - Include
try_files $uri /index.php$is_args$query_string;
in your location block if you use nginx- Or disable URL rewriting (see the option
DISABLE_URL_REWRITING
indata/config.php
)
- Or disable URL rewriting (see the option
- → Default login is user
admin
with passwordadmin
, please change the password immediately (user menu at the top right corner)
Alternatively clone this repository (the release
branch always references the latest released version) and install Composer and Yarn dependencies manually.
See the website for more installation guides and troubleshooting help. → https://grocy.info/links
- PHP 8.1 or 8.2 (with SQLite 3.34.0+)
- Required PHP extensions:
fileinfo
,pdo_sqlite
,gd
,ctype
,json
,intl
,zlib
,mbstring
- Recommendation: Benchmark tests showed that e.g. unit conversion handling is up to 5 times faster when using a more recent (3.39.4+) SQLite version.
- Required PHP extensions:
- Recent Firefox, Chrome or Edge
See grocy/grocy-docker or linuxserver/docker-grocy for instructions.
- Overwrite everything with the latest release while keeping the
data
directory - Check
config-dist.php
for new configuration options and add them to yourdata/config.php
where appropriate (the default values fromconfig-dist.php
will be used for not indata/config.php
defined settings) - Empty the
data/viewcache
directory - Visit the main route once to apply database migrations (see below)
If you run Grocy on Linux, there is also update.sh
(remember to make the script executable (chmod +x update.sh
) and ensure that you have unzip
installed) which does exactly this and additionally creates a backup (.tgz
archive) of the current installation in data/backups
(backups older than 60 days will be deleted during the update).
Grocy is fully localizable - the default language is English (integrated into code), a German localization is always maintained by me.
You can easily help translating Grocy on Transifex if your language is incomplete or not available yet.
The default language can be set in data/config.php
, e. g. Setting('DEFAULT_LOCALE', 'it');
and there is also a user setting (see the user settings page) to set a different language per user.
The pre-release demo is available for any translation which is at least 70 % complete and will pull the translations from Transifex 10 minutes past every hour, so you can have a kind of instant preview of your contributed translations. Thank you!
Also any translation which once reached a completion level of 70 % (strings
resource) will be included in releases.
RTL languages are unfortunately not yet supported.
A household needs to be managed. I did this so far (almost 10 years) with my first self written software (a C# Windows forms application) and with a bunch of Excel sheets. The software was a pain to use at the end and Excel is Excel. So I searched for and tried different things for a (very) long time, nothing 100 % fitted, so this is my aim for a "complete household management"-thing. ERP your fridge!
See the integrated Swagger UI instance on /api.
Some fields (with a barcode icon above) also allow to select a value by scanning a barcode. It works best when your barcode reader prefixes every barcode with a letter which is normally not part of a item name (I use a $
) and sends a TAB
after a scan.
Additionally it's also possible to use your device camera to scan a barcode by using the camera button on the right side of the corresponding field (powered by Quagga2, totally offline / client-side camera stream processing, please note due to browser security restrictions, this only works when serving Grocy via a secure connection (https://
)). Quick video demo: https://www.youtube.com/watch?v=Y5YH6IJFnfc
My personal recommendation: Use a USB barcode laser scanner. They are cheap and work 1000 % better, faster, under any lighting condition and from any angle.
For (productivity) reasons all date (and time) input (and display) fields use the ISO-8601 format regardless of localization. The following shorthands are available:
MMDD
gets expanded to the given day on the current year, if > today, or to the given day next year, if < today, in proper notation- Example:
0517
will be converted to2023-05-17
- Example:
YYYYMMDD
gets expanded to the proper ISO-8601 notation- Example:
20230417
will be converted to2023-04-17
- Example:
YYYYMMe
orYYYYMM+
gets expanded to the end of the given month in the given year in proper notation- Example:
202307e
will be converted to2023-07-31
- Example:
[+/-]n[d/m/y]
gets expanded to a date relative to today, while adding (+) or subtracting (-) the number ofdays/months/years, in proper notation- Example:
+1m
will be converted to the same day next month
- Example:
x
gets expanded to2999-12-31
(which is an alias for "never overdue")- Down/up arrow keys will increase/decrease the date by 1 day
- Right/left arrow keys will increase/decrease the date by 1 week
- Shift + down/up arrow keys will increase/decrease the date by 1 month
- Shift + right/left arrow keys will increase/decrease the date by 1 year
Wherever a button contains a bold highlighted letter, this is a shortcut key.
Example: Button "P Add as new product" can be "pressed" by using the P
key on your keyboard.
Products can be directly added to the database via looking them up against external services by a barcode.
This is currently only possible through the REST API.
There is no plugin included for any service, see the reference implementation in data/plugins/DemoBarcodeLookupPlugin.php
.
Database schema migration is automatically done when visiting the root (/
) route (click on the logo in the left upper edge).
Please note: Database migrations are supposed to work between releases, not between every commit. If you want to run the current master
branch (which is the development version), you need to handle that (and maybe more) yourself.
If you don't use certain feature sets of Grocy (for example if you don't need "Chores"), there are feature flags per major feature set to hide/disable the related UI elements (see config-dist.php
).
- When the file
data/custom_js.html
exists, the contents of the file will be added just before</body>
(end of body) on every page - When the file
data/custom_css.html
exists, the contents of the file will be added just before</head>
(end of head) on every page
When the MODE
setting is set to dev
, demo
or prerelease
, the application will work in a demo mode which means authentication is disabled and some demo data will be generated during the database schema migration (pass the query parameter nodemodata
, e.g. https://grocy.example.com/?nodemodata
to skip that).
When the file embedded.txt
exists, it must contain a valid and writable path which will be used as the data directory instead of data
and authentication will be disabled (used in Grocy Desktop).
In embedded mode, settings can be overridden by text files in data/settingoverrides
, the file name must be <SettingName>.txt
(e. g. BASE_URL.txt
) and the content must be the setting value (normally one single line).
Any help is welcome, feel free to contribute anything which comes to your mind or see https://grocy.info/#say-thanks if you just want to say thanks.
There is none, this is a hobby project. The progress of a specific bug/enhancement is always tracked in the corresponding issue, at least by commit comment references.
Milestones are used to indicate in which version the corresponding request was done (vNEXT
means it's currently planned to do that for the next release).
The MIT License (MIT)