Pantrix

Pantrix

Docker app from 007Darkmatter5's Repository

Overview

Pantrix is a self-hosted kitchen planner. Save recipes and the ingredients they use, keep track of what is in your refrigerator, freezer and pantry, and plan meals on a calendar. A recipe line can accept substitutes ("penne or elbow pasta"), and a planned meal can be a recipe, a single ingredient such as a packaged meal, or eating out. The shopping list writes itself: it always holds what your upcoming meals need plus anything below the minimum you set, less what you already have. Add your own items, check things off as you shop, and save one-off items as ingredients for next time. Add the stores you shop at and record which aisle each item is in at each one. Pick the store on a shopping list and it sorts into walking order. Each item can also carry the exact product you usually buy and a link to its page on the store's website. Store addresses can be looked up through OpenStreetMap. With the optional Pantrix-Browser container installed, Pantrix can also look aisles up on store websites that show them (H-E-B is tested), when you ask it to. Several people can use one install. Each account has a kitchen of its own that nobody else can see, and a kitchen's owner can share a join code so a partner or housemate works in the same one. The first account you create becomes the admin, who can close sign-ups once everyone has an account. Everything is stored in the appdata folders below. Keep the keys folder with the data folder: it holds the encryption keys for sign-ins. To reach Pantrix from outside your network, put it behind a reverse proxy with HTTPS and set "Behind a reverse proxy" to true.

Pantrix

A self-hosted kitchen planner: recipes, what's in the fridge and pantry, meal plans, and a shopping list that writes itself from the three.

  • Recipes and ingredients. Recipes scale by servings. An ingredient line can accept substitutes ("penne or elbow pasta"), and an ingredient can record the exact product you usually buy.
  • Inventory. What you have in the refrigerator, freezer and pantry, with expiry dates and a "keep at least" amount per ingredient.
  • Meal plans. Put a recipe, a single ingredient (a packaged meal), or "eating out" on each day, and close out days as you finish planning them.
  • A live shopping list. Always current: what upcoming meals need, plus anything below its minimum, less what's in inventory. Add your own items too.
  • Stores and aisles. Record which aisle each item is in at each store you use, and the list sorts into walking order for the store you're in. Each item can link to its page on the store's website.

Accounts and kitchens

Pantrix is behind a username and password. The first time you open a fresh install it asks you to create an account, and that account is the admin.

  • Each account has its own kitchen. Recipes, ingredients, inventory, meal plans, shopping lists and stores all belong to a kitchen, and nobody outside it can see them.
  • Sharing a kitchen. A kitchen's owner finds a join code on the Kitchen page. Anyone with an account who enters it joins that kitchen and can see and change everything in it. They can go back to their own kitchen at any time, and the owner can remove them or change the code.
  • Sign-ups. Anyone who can reach the sign-in page can create an account until the admin switches that off on the Admin page. Do so once everyone has an account, especially if Pantrix is reachable from the internet. The admin can see who has an account, but not into their kitchens.

Upgrading from a version without kitchens keeps everything: the existing data becomes the first account's kitchen.

Unraid

Install Pantrix from Community Applications, or add the template by hand from 007darkmatter5/unraid-templates.

The template maps two folders. Back them up together:

Container path Default on Unraid Holds
/data /mnt/user/appdata/pantrix/data The database, pantrix.db
/keys /mnt/user/appdata/pantrix/keys The keys that encrypt sign-in cookies

To reach Pantrix from outside your network, put it behind a reverse proxy that handles HTTPS and set Behind a reverse proxy to true.

Docker

docker run -d --name pantrix \
  -p 8080:8080 \
  -v /path/to/data:/data \
  -v /path/to/keys:/keys \
  -e PUID=1000 -e PGID=1000 \
  ghcr.io/007darkmatter5/pantrix:production

Then open http://<host>:8080 and create your account.

Tag Built from For
production, latest, <version> main Everyday use
beta, <version>-beta beta Trying changes before they reach main
Variable Default Meaning
PUID / PGID 1654 The user and group Pantrix runs as and that own /data and /keys (Unraid: 99 / 100)
ASPNETCORE_FORWARDEDHEADERS_ENABLED false Set to true behind a reverse proxy that handles HTTPS

/healthz answers without signing in, for health checks.

Aisle lookups (optional)

Every store works with aisles you type in. For stores that show aisles on their website, Pantrix can also look them up, by driving a real Chrome browser that you run next to it. Store sites turn away plain programs, so a real browser on your own network is the only thing they serve. The Stores page lists which chains are known to work; H-E-B is the one tested so far, and Sam's Club is manual because its website doesn't show aisles at all.

Lookups happen only when someone presses Look up, one page at a time. If a site asks for a human check, Pantrix says so and you complete it in the browser yourself; it doesn't try to get past it. Automated use may be against a store's terms, and a site can change or block it at any time, so treat this as a convenience, not a guarantee.

The browser is a second, optional container, Pantrix Browser: a Chromium with a screen you can open from another computer, set up so that Pantrix can drive it. On Unraid, install it from Community Applications next to Pantrix. The two must share a Docker network of their own, so that only Pantrix can reach the port that controls the browser:

docker network create pantrix

On Unraid, then set Network Type to pantrix on both containers. With Compose:

services:
  pantrix-browser:
    image: ghcr.io/007darkmatter5/pantrix-browser:latest
    container_name: pantrix-browser
    restart: unless-stopped
    shm_size: "1gb"
    environment:
      PUID: "99"
      PGID: "100"
      # A sign-in for the browser's screen. Set both: the screen includes a terminal, and the browser may be
      # signed in to your store accounts.
      CUSTOM_USER: "choose-a-username"
      PASSWORD: "choose-a-password"
    ports:
      - "3011:3001"   # the browser's screen (https). The control port, 9223, is deliberately not published.
    networks:
      - pantrix
    volumes:
      - /mnt/user/appdata/pantrix-browser:/config

networks:
  pantrix:
    external: true
  1. Open https://<host>:3011 (accept the self-signed certificate), go to each store's website in that browser, and choose your store location.
  2. In Pantrix, on the Admin page, enter http://pantrix-browser:9223 as the browser address and press Test.
  3. Give a store the Browser lookup method (H-E-B gets it automatically). Look up then appears on the Stores page and in the ingredient dialog. For a store Pantrix doesn't know, Check website on the Stores page finds out whether its site shows aisles.

Signing in to store accounts

You can sign in to a store's website in that browser, and it stays signed in: the session lives in the browser's own profile (/config), so lookups then run as you, with your account's store already selected. Pantrix never sees or stores the password, and doesn't fill in sign-in forms.

A signed-in browser is worth protecting. Whoever can control it can act as you on those sites, which may include placing an order. That is why the control port above isn't published to your network and the browser's screen has its own sign-in. Automated use is also then tied to your account, not just your internet address.

Address lookup

When you look up a store's address, what you typed is sent to OpenStreetMap's Nominatim service, and to Photon if that finds nothing. Nothing else leaves your server.

Development

Requires the .NET 10 SDK.

dotnet run --project src/Pantrix     # http://localhost:5057
dotnet test
dotnet ef migrations add <Name> --project src/Pantrix

The database is created on first run (src/Pantrix/pantrix.db) and migrations apply on startup. Point the app at a throwaway database with ConnectionStrings__Pantrix="Data Source=<path>".

Day-to-day work happens on beta; merging beta into main releases to Production. Every push to either branch runs the tests, builds the image for amd64 and arm64, starts it the ways it is deployed, and only then publishes it.

License

MIT

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/007darkmatter5/pantrix:production
Last Updated2026-10-07
First Seen2026-10-07

Runtime arguments

Web UI
http://[IP]:[PORT:8080]/
Network
bridge
Shell
bash
Privileged
false

Template configuration

Web UI portPorttcp

Port for the Pantrix web interface.

Target
8080
Default
5057
Value
5057
DataPathrw

The database (pantrix.db).

Target
/data
Default
/mnt/user/appdata/pantrix/data
Value
/mnt/user/appdata/pantrix/data
KeysPathrw

Encryption keys for sign-ins. Back these up with the data.

Target
/keys
Default
/mnt/user/appdata/pantrix/keys
Value
/mnt/user/appdata/pantrix/keys
PUIDVariable

User ID Pantrix runs as. It owns the data and keys folders.

Default
99
Value
99
PGIDVariable

Group ID Pantrix runs as.

Default
100
Value
100
Behind a reverse proxyVariable

Set to true when a reverse proxy (SWAG, Nginx Proxy Manager, Traefik) handles HTTPS in front of Pantrix.

Target
ASPNETCORE_FORWARDEDHEADERS_ENABLED
Default
false
Value
false