Skip to content

RunemarkLabs/munewell

Repository files navigation

Munewell Community Edition

A single-user, self-hosted daily journal. Mood and energy trackers, custom trackers, freeform entries, priority carry-forward, web push reminders, and a Progressive Web App you can install on your phone. Data lives in one SQLite file on disk. The whole thing runs as one Docker container. No signup, no account, no telemetry, no cloud dependency.

Self-host Munewell with this open-source release, or skip the setup and use the hosted version at munewell.com. Free tier, no credit card.

Quickstart

You need Docker and Docker Compose.

git clone https://github.com/RunemarkLabs/munewell.git
cd munewell

# 1. Configure
cp deploy/.env.example deploy/.env

# 2. Generate secrets and paste them into deploy/.env
docker run --rm node:24-alpine sh -c 'npx --yes web-push generate-vapid-keys'
openssl rand -hex 32   # use as REMINDER_SECRET

# 3. Edit deploy/.env (set TZ to your IANA timezone, fill in the values above)
$EDITOR deploy/.env

# 4. Start
docker compose -f deploy/docker-compose.yml --env-file deploy/.env up -d

Munewell is now running at http://localhost:3000. How you reach it from there (LAN only, VPN, public hostname behind a reverse proxy) is up to you. iOS Web Push needs HTTPS, so for phone install put a reverse proxy in front. See docs/deploy/ for optional recipes.

Architecture

  • Next.js 15 (App Router, React 19, standalone output)
  • node:sqlite (Node 24 built-in, zero native deps; the database is a single data/journal.db file)
  • web-push for VAPID-signed push notifications
  • In-process reminder worker, started by Next's instrumentation hook (no separate cron container or process)
  • Docker multi-stage build on node:24-alpine, runs as a non-root user

The container exposes port 3000 and persists everything to /app/data (mapped to ./data in the compose file).

Local development

npm ci --ignore-scripts
npm run dev

App runs on http://localhost:3000. SQLite DB lives at data/journal.db.

Updating

./deploy/update.sh

Pulls the latest image from GHCR, recreates the container only if the digest changed, prunes dangling layers. The data/ volume is preserved.

License

FSL-1.1-MIT, the Functional Source License with an MIT future grant. You can self-host, fork, modify, and redistribute. You cannot offer Munewell as a commercial product or service that competes with us. Two years after each release, that release converts to MIT.

Contributing

PRs welcome for bug fixes, accessibility improvements, and new deployment recipes. See CONTRIBUTING.md.

Security

To report a vulnerability, see SECURITY.md.

About

Munewell Community Edition. A simple, source-available daily journal.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors