Skip to content
famstack-devPublic

Repository files navigation

famstack.dev

Website Discord Bluesky X YouTube

macOS AGPLv3 License Version

Drop a letter in the family chat, ask about it months later, and get the answer with its source. famstack files your family's documents, backs up the photos from every phone and turns voice memos into a family diary. A family wiki writes itself from all of it. Nothing leaves your home: it runs on a Mac in your house, with local AI. Open source.

"I built this because our photos, our voices, our documents: That's our life. It belongs on our hardware, not in someone else's cloud."

"I am absolutely crazy excited about the idea of just uploading documents and then being able to ask the AI later questions about it if I need information." (an early adopter on Discord)

The reference implementation runs on a Mac Studio M1 in our living room at Lake Constance, Germany. Where is yours going to run?

Note

v0.4.0 is the current release.

famstack runs in other homes now, not just ours. If it doesn't work in yours, tell me: open an issue, start a discussion or join our Discord. If it works: please share it. A star, a post, a mention. That's what keeps a project like this alive.

Tip

New in 0.4

  • A family diary. Post voice memos, photos and a few lines in the Memories room, and famstack keeps them as plain files you own and back up, and turns them into a diary you can keep forever, with a nice web page to browse your memories.
  • Lists and a calendar in the chat. Tell Stacky, the family agent, what goes on the shopping list: by text, by voice or with a photo of a handwritten list. How lists work.
  • A wiki that starts with the family. The home page shows the household at a glance, what happened last month and what is ahead.
  • Talk to the bots. A voice message works like a typed one, and the bots answer in the encrypted chats you invite them to.
  • Updates in one command. ./stack update moves your install to the newest release, and a menu bar app shows and controls the stack.

Stacky is beta, and the part I am most excited about: it is the main topic of 0.5. Read the 0.4.0 release notes.

What you get today

famstack takes on the everyday pain of managing a family and closes the gaps I ran into myself, like keeping our memories.

  • Documents you can ask about. Photograph a letter and send it to the chat. The local AI files it in a document archive with OCR, and when you ask about it later, the answer cites the documents (Paperless-ngx).
  • Photo library and mobile backup that replaces iCloud Photos for the whole family (Immich).
  • Your family diary: voice messages, photos and notes from the Memories room, read back month by month in your own words. Correct any memory by replying to its card in the chat (memory).
  • Your family wiki: written from the documents, notes and voice memos you file, kept as plain Markdown files you can open in Obsidian (memory).
  • Stacky, the family agent (beta): keeps the shopping list, the packing list and the calendar, and answers from what the family has filed. By text or by voice (agent).
  • Private family chat with native iOS, Android, macOS, Windows and web apps (Matrix + Element X). Use it for more than chat: to share files and notes between your own devices.
  • Local AI on the Mac's GPU, or on a bigger Mac elsewhere in the house: voice transcription, text-to-speech and the language model (oMLX + Whisper + Piper).
  • Bots in the chat that do the small stuff: filing receipts, transcribing voice memos, status reports.
  • Email into the family memory: point a mailbox at a chat room and new family mail (with its attachments) lands there for the archivist to file, Stacky to answer and in your wiki to showgo. newsletters and marketing filtered out (IMAP, read-only, private).
  • One CLI to operate it all: ./stack up <thing> and it is running.

The start page of the family wiki in the Simpsons demo: the address, a link to the family diary, then the members, broader family, home and vehicles, each line with the numbers of the documents it came from.
The family wiki: what your documents say about the family, every line with its sources

archivist-demo.mp4
Homer asks in the family chat whether driving under the influence of Duff beer is covered by the car insurance. The archivist answers no, citing the policy documents.
The archivist files and finds documents from your phone, in chat Ask the wiki a question in chat, get an answer with sources

Everything runs on your Mac. Nothing leaves your network unless you tell it to.

Quick Start

You need a Mac with Apple Silicon (M1+), Homebrew, and OrbStack (or Docker Desktop). 16 GB of memory runs it with a smaller model: fine in English, weaker in German, and tight with voice on. 32 GB gives the best answers. The installer guides you through anything that's missing. If your python3 is Apple's Command Line Tools build (3.9), run brew install python first.

git clone https://github.com/famstack-dev/famstack.git && cd famstack
./stack         # Starts the Installer

The installer checks dependencies, sets up your data directory, and gets the nervous system running: Matrix and Element X. Once you log in to your private Element X, you operate the stack from your Server Room. Or your Terminal. From there, add what your family needs:

./stack up docs        # Paperless-ngx: document archive with OCR
./stack up ai          # Local AI: TTS, Whisper, oMLX
./stack up photos      # Immich: family photo library + mobile backup
./stack up code        # Forgejo: private git server, needed by memory
./stack up memory      # family wiki and diary (needs code)
./stack status         # check everything is running

Your Mac is too small for local models? Skip ./stack up ai and point the stack at an AI server on another machine or a hosted provider instead: ./stack ai switch <url> (see the Admin Guide).

Twenty minutes from clone to a working family server. The Admin Guide covers install, stacklets, operations, and troubleshooting in detail. The User Guide is the page you send your family: what to type in chat and what comes back.

famstack install

Then explore your stack in your family messaging

famstack docs in chat


Who This Is For

People who know what a Terminal is. Families that are interested in Tech. Families who are tired of uploading their kids' photos to servers they don't control. Parents who'd rather spend Saturday morning with their kids or tinkering rather than searching for a specific important document. Families who want to take advantage of tech and store memories of their lives where it belongs: your home.

No Linux experience required, no Docker knowledge assumed. If you can run a shell command, you can run famstack.

Why I Built This

I was manually copying photos off my phone with a cable. Like a caveman. Twenty years of automating things for businesses as a veteran software engineer, and my own family was running on drawers full of paper and a 15-year-old Synology NAS that hadn't seen an update in years.

In March 2026 we started recording our kids' voices in a family chat room. Tiny moments, funny things they said, bedtime stories in their own words. We wished we'd started with our first son. Those memories would be gone forever. Now they're not. They live on our own server, transcribed, searchable.

That's what this is. An open source stack that puts photos, documents, family memories and local AI on a Mac in your home. Private, no subscriptions, and no cloud provider that might shut down next year. But it's not just archiving. The goal is an assistant for the family: something that remembers, organizes, and eventually runs the boring parts of everyday life for you. Think JARVIS, built one stacklet and bot at a time. Stacky, the family agent, is the first step.

Read more on the website.


How It Works

famstack is composed of stacklets: self-contained mini-stacks that snap together. Each stacklet is just Docker Compose, shell scripts, and a TOML manifest. No custom runtime. Convention over configuration and a small CLI gluing it together. It's just a convenience layer on top of existing open source technologies. No lock-in. You don't need an eject button, because there is nothing to eject.

famstack/
├── stack                    CLI (single Python file, zero pip deps)
├── stack.toml               User configuration (domain, data dir, timezone)
└── stacklets/
    ├── core/
    │   └── stacklet.toml    Always-on infrastructure (Caddy, Watchtower)
    └── photos/
        ├── stacklet.toml    Manifest: identity, env config, health check
        ├── docker-compose.yml
        ├── hooks/           Lifecycle hooks: install, start, stop (idempotent)
        ├── caddy.snippet    Reverse proxy config
        └── .env             Auto-generated by 'stack up'

.env is a derived artifact

I was quite annoyed with juggling a gazillion .env files and with secrets. So I fixed it. One central configuration, one single source of truth. Everything else is just derived.

No manual .env editing. stack up generates it every time from three sources:

  1. stack.toml for paths, domain, timezone
  2. stacklet.toml [env.defaults] for templates like {data_dir}/photos/library
  3. .stack/secrets.toml for auto-generated passwords (created once, reused on re-up)

Change something in stack.toml, run stack up again, and the .env regenerates to match.

Data

All persistent data lives in ~/famstack-data/<stacklet>/ (configurable) outside the repo. Each stacklet owns its subdirectory. stack destroy wipes it, so back up that directory separately.


Stacklets

Each stacklet except core and messages is opt-in. You can mix and match them as you please. Messages is optional in theory (But without it, the whole point of famstack is a bit neglected). Messages allows you to operate the stack from your smartphone.

famstack comes with a lightweight bot runtime. The bots are tiny helpers that automate tasks in your family chat: filing documents, transcribing voice memos, managing your stack. The agent stacklet (beta) adds Stacky, a family agent built on nanobot that keeps your lists and answers from your own notes.

Stacklet Status Service What it does
core working Bot Runner, Watchtower Reverse proxy and the famstack Bot runner
messages working Matrix + Element The famstack central WhatsApp-like communication center.
photos working Immich Family photo library and mobile backup
docs working Paperless-ngx Document archive with OCR
ai working TTS, Whisper, oMLX Turns your Mac into an AI Machine
memory working Forgejo, Quartz Family wiki, diary and lists, kept as plain files
backup beta rsync Append-only backups of photos, documents and the chat
agent beta nanobot Stacky, the family agent in your chat
chatai deprecated Open WebUI ChatGPT-like chat interface, removed in 0.5.0
code beta Forgejo Private Git server
infra beta Caddy, AdGuard Domain mode: your own names, with HTTPS

Want to add your own to your stack? Creating a stacklet takes about 15 minutes.


Roadmap

Document filing, photo backup, family chat with voice memos, and the family memory wiki all work today, first tagged as v0.3.0-beta.1 (what landed in 0.3). v0.4.0 adds the family diary, household lists, the family agent, encrypted chats with the bots, backups and one-command updates. 0.5 is about Stacky as the family's assistant and an even better family wiki.

Feature Status
Photos (Immich) ✅ Live
Document filing with OCR (Paperless) ✅ Live
Family chat + voice memos (Matrix) ✅ Live
Local AI backend (oMLX, Whisper, TTS) ✅ Live
Bot runtime (archivist-bot, scribe-bot, stacker-bot) ✅ Live
Private Git server (Forgejo) ✅ Live
Family wiki generated from your documents (memory) ✅ Live
Family diary from the Memories room (memory) ✅ Live
Family memory bank (voice + photos matched by day) ✅ Live
Document Q&A with citations, in chat ✅ Live
Voice memos become searchable notes ✅ Live
Topic rooms: the room name is the filing system ✅ Live
Bots answer in encrypted chats ✅ Live
Household lists, kept by the family agent (agent) 🚧 Beta
Backups (backup stacklet, append-only to attached disk) 🚧 Beta
Nice domains setup e.g. https://photos.home.domain.tld 🚧 Beta
Stacky as the family's assistant (0.5) 🚧 Beta
An even better family wiki (0.5) 🎯 Next
Bot interaction patterns (how a family talks to bots) 🎯 Next
Dream cycle (memory consolidation, richer wiki pages) 🎯 Planned
Home Assistant 🎯 Planned
Talk to your Mac 🎯 Planned
Living room display (memories from this day, years ago) 🎯 Planned

Commands

The ones you'll use day to day:

./stack up <stacklet>      # start (idempotent)
./stack down <stacklet>    # stop, data stays
./stack status             # health overview: containers + host + AI
./stack logs <stacklet>    # tail logs
./stack errors             # recent error logs (past 24h)

The full reference (lifecycle, observability, AI, config) lives in the Admin Guide. All commands output JSON when piped; --json and --pretty force the format.


Configuration

stack.toml is the single config file. Committed to your fork.

Each stacklet has a stacklet.toml in the root of the stacklet directory for stacklet-specific configuration.

[core]
domain   = "home.internal"     # wildcard DNS on your router, or empty for port mode
data_dir = "~/famstack-data"   # all persistent data (databases, uploads)
timezone = "Europe/Berlin"

[updates]
schedule = "0 0 3 * * *"       # Watchtower nightly image updates

Docs

Everything lives in docs/: the User Guide, the Admin Guide, the stacklet reference, creating your own stacklet, and the architecture decision records.

Contributing

famstack is young and shaped by daily family usage. The most useful contributions right now:

  • Run it and report. A fresh install on hardware I don't have is worth more than code. Open an issue with what broke.
  • Build a stacklet. Creating a stacklet takes about 15 minutes. If it's useful for your family, it's probably useful for others.
  • Tell me what's missing. Start a discussion or join the Discord and tell me what your family would actually need.

License

AGPLv3, Copyright 2026 arthware.dev


This code was created with the help of frontier AI. There is simply no other way for a family father as a side-project. I refuse to call it vibe coded though. It took too long for a Vibe-Coded project. I'd rather call it AIssisted Engineering. And I think that is the only right way to use AI for code that matters.

Releases

Packages

Contributors

Languages