Open source · Self-hosted · Local-first

Your to-dos.
Calm, quick, and yours.

OpenThings is a task manager that runs on your own server. Plan the day, capture ideas in seconds, focus on one thing at a time, and keep the habits that matter, without an account or a subscription.

Free and MIT licensed. The demo keeps everything in your browser. Also on iPhone and as a Mac and Linux app.

The Today list in OpenThings, with This Evening below
OpenThings on a phone
Today & This EveningUpcomingAreas & ProjectsQuick add Brain dumpFocus modeHabitsReminders Eisenhower matrixTime trackingTrashDark modeiPhone appMac & Linux app SyncREST APIMCP

Plan

A day you can actually finish

Today holds what you've chosen to do now, with a quiet This Evening section for later. Upcoming lays out the weeks ahead, and Anytime and Someday keep the rest out of sight until you want it.

  • Areas of responsibility, projects and headings
  • Scheduled dates, deadlines and repeating to-dos
  • Checklists and notes inside every to-do
The Upcoming list grouped by day

Capture

Type it once, put it anywhere

Press Q from any screen and write the whole thing in one line. Short prefixes set the project, date, reminder, deadline, estimate and tags as you type.

+Project @fri %9am !next-week ~2h #shop *weekly
Quick add showing parsed project, date, reminder and tags

Brain dump

A scratch pad that tidies itself

Get the noise out of your head onto something that looks and feels like paper. Each line fades over two days and then disappears, unless you check it off or keep it by moving it to a real list.

  • Sections for ideas, errands, anything
  • Keep an item in one tap: Today, Inbox, or any project
The brain dump styled as lined paper with handwriting

Focus

One thing, on a timer

Select a to-do and press F. Everything else steps back: a Pomodoro ring, the to-do's checklist, and a gentle bell when it's time for a break. Time spent is tracked automatically.

  • 15, 25 or 50 minute sessions, longer break every fourth
  • Keeps running if you close it; a pill brings you back
Focus mode with a Pomodoro countdown ring

Habits

Habits that fit your week

Every day, weekdays, or five times a week on whichever days work. Streaks follow the schedule you set. Turn any habit into a 30, 60 or 75-day challenge with a clear finish line.

  • Streaks that don't break on your days off
  • Progress, missed days and end date at a glance
Habit grid with schedules, streaks and a 75-day challenge

Prioritize

Urgent isn't the same as important

Flag to-dos urgent or important and the matrix sorts them into do, schedule, delegate and drop: a quick check that you're spending the day on the right things.

Eisenhower matrix with four quadrants

Connect

Every device in step, and your assistant too

Your server keeps your phone, laptop and browsers in sync. Each one holds a full copy and works offline; changes merge field by field when it reconnects. The same server has a REST API for scripts and Home Assistant, and an MCP endpoint so Claude and other AI assistants can read your lists and add, move or check off to-dos.

  • One container: the app, sync, REST and MCP
  • Quick-add syntax works over the API too
  • Works with Claude and any other MCP client
Settings showing the MCP endpoint and ready-to-copy config

iPhone

Made for your thumb, too

The same app on iPhone, with reminders that arrive when it's closed, Home and Lock Screen widgets, a Share Sheet to the Inbox or Brain Dump, and Shortcuts. Add with the big blue button, swipe right for your lists, and pull down to find anything. To sync, scan the QR code from Settings on your computer.

Not on the App Store yet. You build it with Xcode on a Mac.

Today on iPhone with Find and add buttons
Today
Quick add with syntax chips and important and urgent toggles
Quick add
The list drawer with areas and projects
Your lists
The brain dump on iPhone
Brain dump

Mac & Linux

Quick add from anywhere

The desktop app for macOS and Arch Linux (Omarchy / Hyprland) adds a global shortcut, ⌃⌥Space, that opens a small quick-add window over whatever you're doing. It keeps running in the menu bar, so reminders arrive as native notifications with the window closed. It also brings a real menu bar, launch at login, openthings:// links, and Things 3 import on the Mac.

Install on a Mac with Homebrew
brew tap spuder/openthings
brew trust spuder/openthings
brew install --cask openthings

One universal build for Apple silicon and Intel Macs, signed and notarized by Apple. Linux preview builds come from GitHub Actions (sign in to download).

The OpenThings desktop app on macOS showing Today
The floating quick-add window with a parsed date, tag and reminder
The quick-add window reads the same short syntax as the app.

The small things, done carefully

Reminders

Notifications with a chime at the time you pick: %6pm, %in30m, or from the picker.

A keyboard for everything

Every action has a shortcut, plus a command palette on Ctrl/⌘ K and a cheat sheet on ?.

Sounds you'll like

Soft bell chimes for completing, checking a habit and finishing a focus session. One key to mute.

Trash with a safety net

Deleted to-dos wait 30 days before they're gone, so mistakes are easy to undo.

Light and dark

Follows your system, or pick one. Comfortable either way.

On your phone

Big touch targets, swipe for your lists, pull down to search, and the keyboard never hides what you're typing. In the browser or as an iPhone app.

Self-hosted

Runs on your server, in one container

Pull the image and start it. With DockTail on the host, it appears on your tailnet over HTTPS with no ports to open. Images are built for amd64 and arm64.

Set OPENTHINGS_PUBLIC_URL to the address your devices use, such as https://openthings.<tailnet>.ts.net. The web app fills it in for you, and your computer shows it as a QR code that the iPhone app scans to connect.

Local-first by design: every change is stored on your device in SQLite and recorded in a change log, which the container syncs between your devices. It also serves a REST API and MCP endpoint.

compose.yaml
services:
  openthings:
    image: ghcr.io/spuder/openthings:latest
    restart: unless-stopped
    environment:
      TZ: America/Denver
      # the address your devices use
      OPENTHINGS_PUBLIC_URL: https://openthings.example.ts.net
    volumes:
      - openthings-data:/data
    labels:
      - "docktail.service.enable=true"
      - "docktail.service.name=openthings"
      - "docktail.service.port=8080"
      - "docktail.service.service-port=443"

volumes:
  openthings-data:
docker compose up -d

What's next

OpenThings is a working proof of concept. These are being built in the open.

Next

Reminders from the server

Notifications pushed by your server, so they arrive in the browser even with the app closed. Plus device tokens for the API.

Planned

Calendar time-blocking

Drag to-dos onto your day and sync blocks to any CalDAV calendar.

Give it a try

No sign-up. Your data stays in your browser until you connect your own server.