Monica

Personal CRM to remember the people you know

CRM & Business Apps ★ 25.4k stars Medium setup AGPL-3.0

Monica is a personal CRM that helps you record and remember details about friends, family, and personal contacts. It targets individuals who want to nurture personal relationships. It is deployed via Docker or a PHP stack.

Key features

  • Tracks personal relationships
  • Reminders for important dates
  • Notes, gifts and activities
  • Contact journaling

Pros & cons

Strengths

  • Unique personal CRM focus
  • Helps maintain relationships
  • Open source

Trade-offs

  • Not for business sales
  • Development pace varies

Monica replaces

Last reviewed Aug 26, 2026 · 808 words

Monica will not run a sales pipeline, and comparing it to Salesforce or HubSpot misses what it is. It is a CRM for the people in your life: it holds your friend's kids' names, the date her father died, what you gave her last birthday, and it emails you 7 days before the next one. Nothing else in self-hosting does this job, which is why a PHP app with a variable release pace has 25,109 stars. Whether it is worth a 512 MB container depends on one thing: whether you will open it after the conversation, not just during the setup weekend.

What you actually record

A contact in Monica carries relationships (partner, children, colleagues), a "how we met" note, activities you did together, gifts given and ideas for the next one, debts in both directions, documents, tasks, and dated journal entries. Reminders attach to any of it, one-off or recurring. The point of the structure is retrieval: before a call, one page shows the last 3 things you talked about and the thing you promised to send. It is deliberately single-user in spirit even though the app supports several accounts and an API, and there is no pipeline, stage or deal object anywhere.

Docker: three containers, and the cron one does the work

The official image is monica on Docker Hub; the current stable line is v4. It needs a MySQL-compatible database and a 32-character APP_KEY:

services:
  app:
    image: monica:4
    depends_on: [db]
    ports: ["8080:80"]
    env_file: .env
    volumes: ["monica-data:/var/www/html/storage"]
    restart: unless-stopped
  cron:
    image: monica:4
    command: cron.sh
    depends_on: [db]
    env_file: .env
    volumes: ["monica-data:/var/www/html/storage"]
    restart: unless-stopped
  db:
    image: mariadb:11
    environment:
      MARIADB_DATABASE: monica
      MARIADB_USER: monica
      MARIADB_PASSWORD: change-me
      MARIADB_RANDOM_ROOT_PASSWORD: "yes"
    volumes: ["monica-db:/var/lib/mysql"]
    restart: unless-stopped
volumes:
  monica-data:
  monica-db:

The .env file needs APP_KEY, DB_HOST=db, DB_USERNAME, DB_PASSWORD, APP_URL set to the public address, and the MAIL_* variables for SMTP. The cron container is the piece people drop to save memory, and it is the piece that sends reminders. Without it Monica is a pretty address book that never emails you, and you will not notice for 3 months. Set APP_ENV=production and APP_TRUSTED_PROXIES when a reverse proxy sits in front, or the generated links come out wrong.

Everything valuable in Monica leaves through email. Use an SMTP relay you already monitor rather than a fresh account: a transactional provider's free tier, or the same relay your other self-hosted apps use. Send a test reminder for tomorrow on day one, because a misconfigured MAIL_FROM_ADDRESS fails silently in the log and loudly at a missed anniversary.

CardDAV gets contacts onto your phone

Monica v4 exposes CardDAV and CalDAV endpoints under /dav/, so the phone's contacts app can subscribe directly, and birthdays land in your calendar. Sync is one-way in spirit: treat Monica as the source of truth, edit there, and let the phone follow. If you already keep contacts in a Nextcloud address book, pick one master; two-way syncing between the two is a recipe for duplicates.

The pace is the honest caveat

Monica's next-generation rewrite has been in progress for years while v4 receives maintenance, and the release cadence reflects a small team with day jobs. That is not a reason to avoid it, because v4 is stable and your data is one mysqldump plus a storage directory away from portable. It is a reason to keep your expectations at "works and is maintained" rather than "ships features quarterly", and to take the data export question seriously: Monica offers a full SQL export and vCard export from the settings page, and the API returns everything as JSON. The hosted version at monicahq.com exists too, at about 9 dollars a month at last check, and is the sane choice if you want the app without the container.

If you actually wanted a business CRM

Stop here and look at the CRM category. EspoCRM is the mature choice for a small company with leads and deals, and Twenty is the modern one if you want a Notion-like feel. Neither remembers your niece's birthday, and Monica will never track a quarter's revenue.

What I'd do

Run the three-container stack behind a reverse proxy, put it on the same host as your other PHP apps to share memory, wire SMTP through a relay you already trust, and send yourself a test reminder before adding a single contact. Then spend an hour importing the 30 people who matter, with one note each about the last time you spoke. That hour is the whole value; the software just keeps it from fading.

Compare Monica

18 head-to-head comparisons.

Similar crm & business apps apps