- Go 80.1%
- Dart 14.2%
- HTML 1.7%
- Nix 1.3%
- PLpgSQL 0.6%
- Other 1.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
release / changes (push) Successful in 6s
pages / changes (push) Successful in 24s
build / proto (push) Successful in 34s
build / go-build (push) Successful in 3m44s
build / lint (push) Failing after 4m11s
build / codegen-drift (push) Successful in 5m39s
pages / build (push) Successful in 5m18s
flutter / analyze-test (push) Successful in 6m50s
nix / nix-build (push) Successful in 9m12s
release / publish (push) Successful in 8m57s
test / go-tests (push) Failing after 13m49s
- The durable-messaging tests asserted that an agent completes normally after a failed, rejected or lost tool call. With the runner now handing such a completion to the owner (action_failed / action_rejected), the stage still ends instead of waiting — which is what those tests guard — but with the fail-close reason; awaitAgentStage takes the expected outcome per test. - vendorHash recomputed for tendant and openPRM (packages/core gained durable/retry.go). |
||
| .claude/skills | ||
| .forgejo/workflows | ||
| .zellij | ||
| apps | ||
| docs | ||
| nix | ||
| packages | ||
| platform | ||
| scripts | ||
| .dockerignore | ||
| .envrc | ||
| .gitignore | ||
| AGENTS.md | ||
| CONTRIBUTING.md | ||
| devenv.nix | ||
| flake.lock | ||
| flake.nix | ||
| go.work | ||
| go.work.sum | ||
| justfile | ||
| LICENSE | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
| VERSION | ||
Home First
Software that runs on a server in your own home — not someone else's cloud.
Home First is a family of self-hosted apps for people who want the convenience of modern software without handing their personal data to a third party. You run it on hardware you control, your data stays on disk you own, and nothing leaves the house unless you decide it should.
This repository (homefirst) is the monorepo that holds those apps and the code they
share.
The apps
| App | What it is |
|---|---|
| tendant | A single-household task orchestrator. It watches the sources you connect (email, calendars, and more), figures out what actually needs doing, and keeps your household's tasks in one place. |
| openPRM | A personal relationship manager (CRM). Throw unstructured notes about the people in your life at it and it files them into clean, time-stamped, fully-sourced facts you can query later. |
Each app is a single Go binary plus a Postgres database, with a Flutter app for the people who use it. Pick the one you want — they run independently.
What "Home First" means
- Your hardware, your data. Everything runs on a machine in your home. There's no account to sign up for and no usage being sold.
- Private by design. The apps are built so that information only reaches an outside service (an LLM, say) when you've explicitly chosen to let it.
- Open source. Licensed under AGPL-3.0 (see
LICENSE) and developed in the open at git.bcnelson.dev/home-first/homefirst, with a read-only mirror on Codeberg.
There's also an optional hosted companion, homefirst.cloud, that handles things a home server can't do well on its own (like reliable push notifications). It's strictly optional and lives in a separate repo; the apps here run fully without it.
Running it yourself & contributing
Want to build it, run it locally, or contribute? Everything technical — the toolchain, how the monorepo is laid out, and how to get each app running on your machine — is in CONTRIBUTING.md.
License
AGPL-3.0. See LICENSE.