---
title: "Deploy Trug"
description: "Trug is a self-hosted shared shopping list for one household."
category: "Other"
url: https://railway.com/deploy/trug
---

# Deploy Trug

Trug is a self-hosted shared shopping list for one household.

**[Deploy Trug on Railway](https://railway.com/template/trug)**

- **Creator:** Max Illis's Projects
- **Category:** Other
- **Total deploys:** 3

## Template content

### trug https://raw.githubusercontent.com/maxdraki/trug/refs/heads/main/icon/trug-logo.svg

- **Image:** ghcr.io/maxdraki/trug:latest
- **Health check:** /healthz
- **Public domain:** Yes

## Documentation

# Deploy and Host Trug with Railway

Trug is a self-hosted shared shopping list for one household. Everyone gets the
list on their phone as an installable PWA that works with no signal in the shop
and syncs when it's back. Sign-in is passkeys only — no passwords, no accounts to
manage. Assistants like Claude can read and edit the list over MCP. Open source,
MIT-licensed, and small enough to understand end to end.

## About Hosting Trug

Trug is a single container: a FastAPI server, a SQLite database, and the compiled
web app in one image, with no external services to wire up. Railway attaches a
volume at `/data` where the database lives, so your list survives redeploys and
restarts. Deploying from this template generates all three access tokens for you
and pins them into the service's Variables tab — there are no logs to grep — and
resolves the passkey settings automatically from your generated domain, which is
the one piece of configuration that is fiddly to get right by hand. It runs
comfortably inside the Hobby plan's included $5 of monthly usage. The volume is
your data: Railway's volume backups cover it, and there's a restore guide in the
repo.

## Common Use Cases

- **A household shopping list** that everyone has on their phone, grouped into
  aisles in the order you actually walk the shop, and usable offline mid-aisle.
- **Voice capture from a smart ring or Home Assistant** — a webhook endpoint turns
  "milk, eggs and bread" into three items without anyone unlocking a phone.
- **Adding things via Claude or any MCP client** — "add what I need for a carbonara"
  fills the list, iconed and sorted, over a linked connector.
- **An open-source escape from Google Keep, Bring! or AnyList** for people who would
  rather their shopping habits stayed on hardware they control.

## Dependencies for Trug Hosting

- FastAPI and SQLite (bundled in the image — nothing to provision)
- A Railway volume mounted at `/data` for the database
- Optional: an API key for any OpenAI-compatible LLM, used only to guess item icons
  and aisles. Trug is fully functional without one — a built-in icon map covers the
  common groceries.

### Deployment Dependencies

- [Trug on GitHub](https://github.com/maxdraki/trug) — source, issues and releases
- [Container image on GHCR](https://github.com/maxdraki/trug/pkgs/container/trug) — multi-arch, published on tagged releases
- [Connecting AI assistants over MCP](https://github.com/maxdraki/trug#connect-ai-assistants-mcp)
- [Backup and restore](https://github.com/maxdraki/trug/blob/main/docs/restore.md)

### Why Deploy Trug on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will
host your infrastructure so you don't have to deal with configuration, while
allowing you to vertically and horizontally scale it.

By deploying Trug on Railway, you are one step closer to supporting a complete
full-stack application with minimal burden. Host your servers, databases, AI
agents, and more on Railway.

## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — [Jul'26] Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/trug
