Ribbon¶
A mobile-first family gift tracker you host yourself.
Ribbon keeps track of the gifts your household gives and receives, shows what needs you (thank-yous to write, gifts still to buy), and looks back over the year. Everything (family, people, gifts, occasions, logins) lives in one SQLite file on your own server, so every phone and laptop sees the same data and nothing goes to anyone else's cloud.
Get started Browse the features View on GitHub

Status: in development (0.3.0-dev)
Ribbon works and keeps your data on your own server, but there is no release yet and you should expect rough edges. It is built for one family. The Docker image to use today is the dev tag, built from the newest main. See Upgrading for what that means in practice.
What you get¶
-
A ledger of gifts
Log what you give and receive, who it was for, the occasion and the cost. See what still needs buying and which thank-yous are owed.
-
Surprise-safe wishlists
Reserve an item so nobody double-buys. The person whose list it is never sees the marks, even through the API. Wishlists
-
Dates and a calendar feed
Birthdays, anniversaries and yearly occasions with a countdown, plus a secret ICS link for your calendar app. Upcoming dates
-
Secret Santa
Draw names across a household or linked households, with exclusions and no peeking. Secret Santa
-
Households that can share
Several households on one server, each with a private ledger. Link two and share just the people you choose. Sharing
-
Built to be self-hosted safely
Passkeys and single sign-on, scrypt passwords, sign-in lockout, nightly backups, and a documented security review.
On a phone¶
Ribbon is designed for the phone first and installs as an app over HTTPS.
| Overview | Wishlist | Secret Santa |
|---|---|---|
![]() |
![]() |
![]() |
Where to go next¶
| I want to... | Read |
|---|---|
| Install Ribbon and create my family's ledger | Getting started |
| Look up an environment variable | Configuration |
| Reach it from outside my home safely | Securing your install and HTTPS and reverse proxies |
| Know what a feature does | Features |
| Back up or restore my data | Backups & restore |
| Fix something that is not working | Troubleshooting & FAQ |
| Help build Ribbon | Contributing |
Under the hood¶
- TanStack Start (React, Vite, Tailwind), built to a standalone Node server (Nitro).
- One SQLite database (Node's built-in
node:sqlite), migrated automatically on start-up. - A small JSON API at
/api/*; the browser keeps an instant copy of the ledger and sends each change to the server. - A single container image for
linux/amd64andlinux/arm64, running as an unprivileged user. - MIT licensed. Source: github.com/thepizzatech/ribbon.


