Yuvomi

Yuvomi

Docker app from ulsklyc's Repository

Overview

Yuvomi is a private, self-hosted family planner — one calm home for everything your household needs to stay organized. No cloud accounts, no subscriptions, no tracking: your data lives on your server and nowhere else.

Independent modules — turn on what fits, ignore the rest:

  • Dashboard — today's tasks, events, meals and reminders at a glance
  • Tasks — shared to-dos with priorities, due dates and assignees
  • Shopping — collaborative grocery lists, auto-sorted by category
  • Meals & Recipes — weekly meal planner with a built-in recipe book
  • Calendar — family calendar with recurring events and reminders
  • Budget — shared expenses, split costs and a spending overview
  • Housekeeping — chores, supplies and staff/session tracking
  • Documents — store and find important household files
  • Notes, Contacts & Birthdays — everything else in one tidy place

Why Yuvomi:

  • Mobile-first PWA — install it on any phone, works offline
  • Light & dark mode, fast and polished (no bloated frameworks, no build step)
  • Optional sync — CalDAV / CardDAV, Apple and Google Calendar
  • OIDC single sign-on for households that already run an identity provider
  • Encrypted-at-rest storage (SQLCipher) with automated, scheduled backups
  • Multi-language, fully self-contained and MIT-licensed

— Setup —

REQUIRED: Set a long random SESSION_SECRET.
RECOMMENDED: Set a strong DB_ENCRYPTION_KEY to encrypt the database at rest — without it the database and any synced calendar/contact credentials are stored unencrypted.
Generate either secret with: openssl rand -base64 48

After the container starts, open the WebUI — the first visit guides you through creating your admin account. (Headless setups can alternatively run node setup.js in the container console.) Then log in — pick the modules you want and invite your family.

Yuvomi

Yuvomi

The self-hosted family planner. Private, offline-capable, and beautiful.

MIT License Latest Release Docker Image Node.js ≥22 PWA

→ Install  ·  Website & screenshots  ·  Docs  ·  Changelog


16
modules
· 23
languages
· 0
trackers
· AES-256
optional DB encryption
· MIT
license

Yuvomi dashboard — tasks, calendar events, meals and shopping at a glance Yuvomi on mobile
Mobile PWA
Switch GitHub to dark mode to preview the dark theme.

Yuvomi keeps your household organized — tasks, groceries, meals, calendar, budget, and more — in one private place, without cloud accounts or subscriptions. Runs as a Docker or Podman container on any home server or NAS, including rootless Podman on SELinux-enabled RHEL/Fedora/CentOS Stream systems. A polished, mobile-first PWA makes it feel native on every device.

Each module is independent. Use what fits, skip what doesn't.

Coming from Oikos? This project was renamed — nothing about the app changes.

Yuvomi was renamed from Oikos to avoid a trademark conflict with an unrelated product. Same code, same data, same maintainer.

  • Old links (github.com/ulsklyc/oikos) redirect here automatically.
  • The Docker image moved to ghcr.io/ulsklyc/yuvomi; the old ghcr.io/ulsklyc/oikos keeps working — please update at your convenience.
  • Existing data and settings are fully preserved on upgrade.

New home: https://yuvomi.cloud/ · Questions? Open a discussion.

Screenshots  ·  Modules  ·  Design  ·  Install  ·  Tech stack  ·  Docs

App screenshots

Tasks — Kanban board with priorities, deadlines and multi-member assignment
Tasks — Kanban board, recurring schedules, multi-assignment
Calendar with Google OAuth and CalDAV sync
Calendar — Google OAuth, iCloud, CalDAV, ICS subscriptions
Budget — income, expenses and split costs with debt simplification
Budget — Income, expenses, split costs, CSV export
Meals — weekly drag-and-drop planner with recipe import
Meals — Weekly planner, recipes, one-click shopping export
Shopping — collaborative aisle-organized lists
Shopping — Shared lists, aisle groups, swipe gestures
Contacts — family directory with CardDAV sync
Contacts — Family directory, CardDAV sync
See all screenshots →

Modules

Module What it does
tasks Tasks Deadlines, priorities, subtasks, recurring schedules, multi-member assignment, and a Kanban board. Optional CalDAV import of Apple Reminders.
shopping Shopping Collaborative lists grouped by aisle, with swipe gestures, per-item notes, and one-tap import from the meal plan.
meals Meals Weekly drag-and-drop planner with multiple items per slot, weekly repeats, and direct export to the shopping list.
recipes Recipes Create, duplicate, and scale recipes; pre-fill meal slots or save any planned meal as a recipe.
calendar Calendar Google (OAuth) and CalDAV sync (iCloud, Nextcloud, Radicale), ICS subscriptions, recurring events, attachments, holiday overlays, and a read-only webcal:// export feed.
documents Documents Upload, tag, preview, and organize family files with per-document visibility. Optional WebDAV storage plus Paperless-ngx and Papra (DMS) linking.
budget Budget Income, expenses, recurring entries, trend charts, a statistics tab, CSV export, loans, split expenses, and subscription tracking with renewals and currencies.
housekeeping Housekeeping Manage household staff — schedules, check-in/out, daily or hourly billing, chores, and supply requests.
rewards Rewards Point values on tasks credit assigned members; a reward catalog with parent-approved redemptions, per-member opt-in, and an auditable ledger.
health Health Per-member vitals, medications with refill alerts, lab results, and activity logs — with trend charts, CSV export, and per-entry visibility.
notes Notes & Contacts Colored Markdown sticky notes plus a contact directory with CardDAV sync.
birthdays Birthdays Birthday tracker with automatic calendar events, age display, and custom reminders.
family Family Member profiles with roles, photos, and contact details — synced to Contacts and Birthdays.
reminders Reminders Task and calendar reminders via in-app badges, opt-in Web Push (HTTPS), and household Gotify/ntfy channels.
api-tokens API Tokens Bearer / X-API-Key tokens with an OpenAPI 3.0 spec and a built-in MCP endpoint (/mcp) for AI agents like Claude Desktop.
backup Backup Manual and scheduled database backup/restore with pre-restore rollback. Optional WebDAV upload (Nextcloud, ownCloud, etc.).

Full data model and per-module details in the Spec.

Health is not a medical device — no diagnostic claims. Health data is sensitive; enable database encryption (DB_ENCRYPTION_KEY, SQLCipher).

WebDAV document storage needs its own backup. Database backups hold document metadata and links, not the binaries on WebDAV — back up that target separately. Admin-UI WebDAV targets must resolve to public addresses; for a trusted LAN or loopback target, set DOCUMENT_STORAGE_WEBDAV_URL via the deployment environment.


Design & technology

  • Disciplined Liquid Glass UI — readable work surfaces, subtle translucent navigation, spring animations, and module-tinted overlays — built in pure CSS, no framework
  • PWA — installable on any device, works offline (read-only access to your last-seen calendar, tasks, shopping, contacts, and dashboard), and stays responsive from phone to desktop with a persistent mobile bar, configurable favorites, and tuned touch targets
  • Privacy first — fully self-hosted, optional SQLCipher AES-256 database encryption (enabled in the recommended Docker setup), zero telemetry
  • SSO / OpenID Connect — optional single sign-on via any OIDC provider (Authentik, Keycloak, Google, Microsoft Entra) configured with four env vars; Authorization Code + PKCE flow
  • Self-service password reset — optional SMTP email lets users reset a forgotten password themselves via a time-limited emailed link; anti-enumeration by design
  • Zero build step — pure ES modules, no bundler, no transpiler, no framework
  • Multilingual — 23 languages with automatic locale detection (de, en, es, fr, it, sv, el, ru, tr, zh, ja, ar, hi, pt, uk, pl, nl, cs, vi, hu, ko, id, fa)

Install anywhere

Web installer (recommended)

A localized setup wizard — 23 languages — that runs in your browser. Auto-detects Docker or Podman, configures HTTPS, SSO, and scheduled backups, then starts the container and creates your admin account.

git clone https://github.com/ulsklyc/yuvomi.git && cd yuvomi
node tools/installer/install-server.js

Open http://localhost:8090. Requires Node.js 18+ on the host to run the installer — the app container ships its own Node 22.

Docker / Podman

Pre-built image:

curl -O https://raw.githubusercontent.com/ulsklyc/yuvomi/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/ulsklyc/yuvomi/main/.env.example
cp .env.example .env          # set SESSION_SECRET and DB_ENCRYPTION_KEY
docker compose up -d

Build from source:

git clone https://github.com/ulsklyc/yuvomi.git && cd yuvomi
cp .env.example .env
docker compose up -d --build

Open http://localhost:3000. The first visit walks you through creating your admin account.

Podman (RHEL / Fedora / CentOS Stream): Both installers auto-detect Podman and use podman-compose.yml with SELinux :Z labels. For a manual start: podman compose -f podman-compose.yml up -d. Rootless systemd autostart: tools/quadlet/oikos.container.

NAS & home servers

TrueNAS SCALE Apps → Discover Apps → search Yuvomi → Install No terminal required. Community Apps Catalog. Version updates via Renovate.
Umbrel App Store → search Yuvomi → Install One-click install. Everything stays on your Umbrel.
Unraid Apps → search Yuvomi → Apply Community Applications template. Set SESSION_SECRET during install.

Catalog listings are still registered under the legacy name oikos (TrueNAS oikos_community, Unraid oikos-…). The app shows and installs as Yuvomi — the technical slug is kept so existing installations (database paths and container names) upgrade seamlessly rather than breaking. Search for Yuvomi; if a store still surfaces the entry as oikos, it's the same app.

New to Docker or Podman? The Installation Guide covers engine setup, HTTPS/reverse proxy, backups, and troubleshooting step by step.


Tech stack

Express SQLite / SQLCipher Vanilla JS Plain CSS Docker Podman PWA


Documentation

Installation  ·  Spec & data model  ·  Modules  ·  Contributing  ·  Security  ·  Privacy for self-hosters  ·  Changelog  ·  Backlog

If you self-host Yuvomi in a GDPR context (EU/EEA, processing other people's data), read docs/PRIVACY-FOR-SELFHOSTERS.md before going live: it covers third-country assessments for every external service (weather, CalDAV/CardDAV, OIDC, WebDAV backup and document storage), data-processing-agreement notes, log-retention guidance, and a records-of-processing template.


License

MIT — see LICENSE.


Built with care for families who value privacy and simplicity.

Media gallery

1 / 5

Install Yuvomi on Unraid in a few clicks.

Find Yuvomi in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Yuvomi Review the template variables and paths Click Install

Details

Repository
ghcr.io/ulsklyc/yuvomi:latest
Last Updated2026-07-07
First Seen2026-06-09

Runtime arguments

Web UI
http://[IP]:[PORT:3000]
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI PortPorttcp

Host port for the Yuvomi web interface.

Target
3000
Default
3000
Value
3000
DataPathrw

Database and stored app data (uploads, documents).

Target
/data
Default
/mnt/user/appdata/yuvomi/data
Value
/mnt/user/appdata/yuvomi/data
BackupsPathrw

Destination folder for scheduled and manual database backups.

Target
/backups
Default
/mnt/user/appdata/yuvomi/backups
Value
/mnt/user/appdata/yuvomi/backups
Modules (optional)Pathrw

Optional: drop-in folder for additional Yuvomi modules. Leave default if unused.

Target
/app/modules
Default
/mnt/user/appdata/yuvomi/modules
Value
/mnt/user/appdata/yuvomi/modules
SESSION_SECRETVariable

REQUIRED. A long random string used to sign sessions. Generate with: openssl rand -base64 48

DB_ENCRYPTION_KEYVariable

RECOMMENDED. Strong key to encrypt the database at rest (SQLCipher). Leave empty for unencrypted SQLite. Cannot be changed later without re-encrypting. Generate with: openssl rand -base64 48

TimezoneVariable

Container timezone, e.g. Europe/Berlin. Affects scheduled backups and reminders.

Target
TZ
Default
Europe/Berlin
Value
Europe/Berlin
SESSION_SECUREVariable

Set to true only when serving Yuvomi over HTTPS behind a reverse proxy. Keep false for direct HTTP access on the LAN.

Default
false
Value
false
TRUST_PROXYVariable

Use 1 behind one reverse proxy (Caddy/nginx/Traefik), or 'loopback' for direct (no proxy) access.

Default
loopback
Value
loopback
DB_PATHVariable

Path to the SQLite database inside the container. Keep default unless you know what you are doing. Legacy /data/oikos.db is auto-migrated on boot.

Default
/data/yuvomi.db
Value
/data/yuvomi.db
WEATHER_LATVariable

Optional. Latitude for the Open-Meteo weather widget (no API key required). Find coordinates on openstreetmap.org or Google Maps, e.g. 52.52.

WEATHER_LONVariable

Optional. Longitude for the Open-Meteo weather widget, e.g. 13.41.

WEATHER_CITYVariable

Optional. Display name shown on the weather widget, e.g. Berlin.

WEATHER_UNITSVariable

Optional. Unit system for temperatures: metric (°C) or imperial (°F).

Default
metric
Value
metric
OPENWEATHER_API_KEYVariable

Optional (legacy). OpenWeatherMap API key to enable the weather widget. Prefer the keyless Open-Meteo variables above.

OPENWEATHER_CITYVariable

Optional (legacy). City for the OpenWeatherMap weather widget, e.g. Berlin.

OPENWEATHER_UNITSVariable

Optional (legacy). Unit system for temperatures: metric (°C) or imperial (°F).

Default
metric
Value
metric
OPENWEATHER_LANGVariable

Optional (legacy). Language code for OpenWeatherMap descriptions, e.g. en, de, fr.

Default
en
Value
en
GOOGLE_CLIENT_IDVariable

Optional. Google OAuth 2.0 client ID for Google Calendar sync.

GOOGLE_CLIENT_SECRETVariable

Optional. Google OAuth 2.0 client secret for Google Calendar sync.

GOOGLE_REDIRECT_URIVariable

Optional. OAuth callback URL, e.g. https://your-domain.com/api/v1/calendar/google/callback

OIDC_ISSUERVariable

Optional. OIDC issuer URL, e.g. https://authentik.example.com/application/o/yuvomi/

OIDC_CLIENT_IDVariable

Optional. OIDC client ID from your identity provider.

OIDC_CLIENT_SECRETVariable

Optional. OIDC client secret from your identity provider.

OIDC_REDIRECT_URIVariable

Optional. OIDC callback URL, e.g. https://your-domain.com/api/v1/auth/oidc/callback

OIDC_TRUST_EMAIL_WITHOUT_VERIFIED_CLAIMVariable

Optional. Set to true to allow account linking when your IdP omits the email_verified claim. Only enable if your IdP fully controls email verification and never issues unverified addresses (e.g. older Authentik without an explicit email_verified mapping).

APPLE_CALDAV_URLVariable

Optional. Apple CalDAV server URL (default: iCloud). Change only if using a custom CalDAV server.

Default
https://caldav.icloud.com
Value
https://caldav.icloud.com
APPLE_USERNAMEVariable

Optional. Apple ID (email) for iCloud Calendar sync.

APPLE_APP_SPECIFIC_PASSWORDVariable

Optional. Apple app-specific password for iCloud Calendar sync (generate at appleid.apple.com).

SYNC_INTERVAL_MINUTESVariable

Interval in minutes for calendar sync (Google, Apple, CalDAV). Default: 15.

Default
15
Value
15
BACKUP_ENABLEDVariable

Optional. Enable automated database backups (default: true).

Default
true
Value
true
BACKUP_SCHEDULEVariable

Optional. Cron schedule for automated backups (default: 2 AM daily).

Default
0 2 * * *
Value
0 2 * * *
BACKUP_KEEPVariable

Optional. Number of backups to retain (default: 7).

Default
7
Value
7
WEBDAV_BACKUP_ENABLEDVariable

Optional. Set to true to enable automatic upload of backups to a WebDAV server after each local backup.

WEBDAV_BACKUP_URLVariable

Optional. WebDAV server URL, e.g. https://cloud.example.com/remote.php/dav/files/username/

WEBDAV_BACKUP_USERNAMEVariable

Optional. WebDAV username for authentication.

WEBDAV_BACKUP_PASSWORDVariable

Optional. WebDAV password for authentication.

WEBDAV_BACKUP_PATHVariable

Optional. Remote directory path where backup files are stored (default: /yuvomi/backups/).

Default
/yuvomi/backups/
Value
/yuvomi/backups/
WEBDAV_BACKUP_KEEPVariable

Optional. Number of remote backup files to keep (default: 7).

Default
7
Value
7
DOCUMENT_STORAGE_WEBDAV_ENABLEDVariable

Optional. Store newly uploaded document files on WebDAV. Existing files are not migrated.

Default
false
Value
false
DOCUMENT_STORAGE_WEBDAV_URLVariable

Optional. WebDAV server URL for document storage, e.g. https://cloud.example.com/remote.php/dav/files/username/

DOCUMENT_STORAGE_WEBDAV_USERNAMEVariable

Optional. WebDAV username for document storage.

DOCUMENT_STORAGE_WEBDAV_PASSWORDVariable

Optional. WebDAV password for document storage.

DOCUMENT_STORAGE_WEBDAV_PATHVariable

Optional. Remote base folder for document files (default: yuvomi-documents).

Default
yuvomi-documents
Value
yuvomi-documents
DOCUMENT_STORAGE_WEBDAV_ALLOW_PRIVATE_NETWORKVariable

Optional. Set to true to allow WebDAV document storage on local/private network addresses (e.g. Nextcloud in the same Docker network). Only enable in controlled environments.

Default
false
Value
false
EMAIL_SMTP_HOSTVariable

Optional. SMTP server hostname for outgoing email (password-reset links).

EMAIL_SMTP_PORTVariable

Optional. SMTP server port (default: 587).

Default
587
Value
587
EMAIL_SMTP_SECUREVariable

Optional. SMTP connection security: ssl, starttls, or none (default: starttls).

Default
starttls
Value
starttls
EMAIL_SMTP_USERVariable

Optional. SMTP authentication username.

EMAIL_SMTP_PASSVariable

Optional. SMTP authentication password.

EMAIL_FROM_ADDRESSVariable

Optional. Sender email address for outgoing mail, e.g. yuvomi@example.com.

EMAIL_FROM_NAMEVariable

Optional. Sender display name for outgoing mail (default: Yuvomi).

Default
Yuvomi
Value
Yuvomi
BASE_URLVariable

Optional but required for password-reset emails to be sent. Absolute origin used to build reset links, e.g. https://yuvomi.example.com. The request Host header is never trusted as a fallback, to prevent reset-link poisoning.

FIXER_API_KEYVariable

Optional. Fixer API key for live currency conversion in Budget → Subscriptions. Rates are cached for 12 hours; works without this key using the cached/manual rate.