Taking Stock of What You Actually Own
Most households operate on guesswork. You buy a second bottle of soy sauce because you forgot whether the one in the back of the pantry is empty. You throw out expired medication because nobody tracked when it was purchased. Grocy is a self-hosted, open-source household management tool designed to fix exactly this kind of low-grade domestic chaos – tracking groceries, household supplies, medications, and tasks in a single local application you control entirely.
Unlike cloud-based inventory apps that store your shopping habits on someone else’s server, Grocy runs on your own hardware. That means no subscription fees, no data harvesting, and no service going dark without warning. The setup requires a bit of command-line comfort, but the result is a persistent, private system that works on your home network – and optionally beyond it.

What You Need Before You Start
Grocy can run on a Raspberry Pi, an old laptop repurposed as a home server, a NAS device, or any machine running Linux. The most common and reliable installation method uses Docker, which keeps Grocy’s dependencies containerized and makes updates straightforward. You will need Docker and Docker Compose installed on your host machine before proceeding. If you are already running a home server stack, there is a reasonable chance Docker is already in place.
The official Grocy Docker image is maintained under the lscr.io/linuxserver/grocy repository. LinuxServer.io images are well-documented and consistently updated, which makes them a practical choice over building from source unless you have a specific reason to do so. A modern browser is all the client software you need – Grocy’s interface is entirely web-based, accessible from any device on your network once the container is running.
Port availability matters here. Grocy defaults to port 9283 for HTTP inside the container, but you will map it to whatever external port suits your setup. If you are already running other web services – a dashboard, a media server, a monitoring tool – check for conflicts before writing your Compose file. A quick ss -tlnp or netstat -tuln will show you what is already listening.
Deploying with Docker Compose
Create a working directory for Grocy and inside it place a docker-compose.yml file. A minimal working configuration looks like this: set the image to lscr.io/linuxserver/grocy:latest, map a host port such as 9283 to the container’s internal port 80, define two volume mounts – one for /config where Grocy stores its SQLite database and settings, and one for the timezone. Set the PUID and PGID environment variables to match your local user’s IDs, which you can find by running id in your terminal. Set TZ to your local timezone string, for example America/New_York.
Once the file is saved, run docker compose up -d from that directory. Docker will pull the image and start the container in the background. Give it thirty seconds, then open a browser and navigate to http://[your-server-ip]:9283. The default login credentials on first launch are admin for both username and password – change these immediately in the user settings before doing anything else.

Configuring Grocy for Your Household
The first thing to configure is the system settings, found under the wrench icon in the top navigation. Here you define your currency, default quantity units, energy units if you track nutritional data, and the default location labels for where products are stored. Grocy’s location system is flexible – you can create entries for “Pantry,” “Freezer,” “Medicine Cabinet,” and “Laundry Room” as distinct storage areas, which matters when you are actually looking for something and want the app to tell you exactly where it lives.
Products are the core of Grocy’s inventory model. Each product entry includes a name, default quantity unit, minimum stock level, best-before date tracking, and a barcode field. The barcode field is where Grocy starts to feel genuinely useful rather than just organized. You can use the Grocy companion app for Android or iOS to scan barcodes and log purchases directly, or use a USB barcode scanner attached to the server’s host machine and access it via the web UI. When a barcode is scanned, Grocy checks its internal database and, if connected to the Open Food Facts API, can auto-populate product details for common grocery items.
Stock tracking works through two core actions: purchasing and consuming. When you buy something, you log it as a purchase with the quantity and best-before date. When you use it, you log a consume event. Grocy maintains a running total and will surface items approaching their expiry date on the overview dashboard – the “due soon” and “overdue” lists become a useful daily habit once the initial product catalog is populated. The stock journal records every transaction, which is useful for identifying patterns like how quickly your household burns through specific supplies.
Beyond pantry management, Grocy includes a meal planning module, a recipe database where ingredients link directly to stock items, a shopping list generator that accounts for current stock levels against minimum quantities, and a chores/task tracker. The task tracker is underused by most people who set up Grocy but genuinely functional – it supports recurring schedules with configurable intervals, so things like filter replacements, appliance maintenance, or medication refills can be tracked with the same system as your groceries. If you are already running self-hosted infrastructure, you might also be monitoring it with a tool like Beszel for lightweight server monitoring, which pairs well with any long-running service you want to keep an eye on.

One friction point worth addressing early is the initial catalog build. Grocy does not come pre-loaded with products, so the first few weeks require consistent logging to reach a point where the system is genuinely useful rather than aspirational. The practical approach is to audit one area of your home at a time – start with the pantry, enter everything currently on the shelves with current best-before dates, then move to cleaning supplies, then the medicine cabinet. Trying to do everything at once typically leads to an incomplete database that gets abandoned. Once you hit a threshold of roughly forty to sixty products with accurate stock counts, the shopping list feature starts generating lists you can actually trust without double-checking them against the physical shelves – which is when the daily friction of maintaining Grocy finally pays off in a way you can feel.





