Solo
Projects, tasks, priorities, and a scratch pad. Nothing to configure.
Source-available Read it, self-host it, contribute to it
Opsly starts as a single person tracking their own to-dos and grows into a multi-team organization, all on infrastructure you control. Here's the tour.
Move with ← → or the arrows below.
One tool, three sizes
Most tools force a migration the moment you add a second person. Opsly's model is the same at every size. The surface area just grows with you.
Projects, tasks, priorities, and a scratch pad. Nothing to configure.
Assignees, workflow stages, custom fields, dependencies, and notifications.
Per-role permissions, SLA tracking, audit trails, webhooks, and feature flags.
Dashboard
Five counters across the top, then SLA compliance broken out per priority over a window you choose. Anything breached or overdue gets its own panel, and the activity log streams changes as they happen.
Projects
Each project carries its own status, priority, and completion percentage, so you can see which streams are moving without opening any of them.
Inside a project
A project opens on its completion ring and a board scoped to just its work. The tabs alongside hold that project's scratch pad, SLA overrides, and dependency tree.
All tasks
Filter across the whole organization by status, priority, category, assignee, date, or any custom field, then narrow to overdue or SLA-breached work and save the view.
All tasks
The same filters in a denser list. Every row carries a live countdown to its resolution target: time left, at risk, or how long ago it breached.
Dependencies
Open a task that depends on unfinished work and Opsly names the blocker instead of letting it slip through as ready. Closing a parent can cascade to its children.
Dependencies
The project's full dependency tree, nested and collapsible, with each task's open or closed state and current stage on the right. Link tasks directly from here.
Org settings · Stages
Every organization starts with four and can rename, recolor, reorder, or add more. Stages typed closed are what SLA and dashboard math counts as resolved.
Org settings · Custom fields
Text, number, date, single select, and multi select. Define the options once and they appear on every task in the organization, filterable from the task list.
Org settings · Branding
Set a primary color and logo per organization, previewed live before you save. Below it, terminology: rename tasks to tickets, projects to epics, whatever your team already says.
Audit log
Filter by date range, actor, or category. Alongside people, the system records itself: every SLA warning and breach it detects lands in the same trail.
Scratch pad
Notes render as you type, with callouts, tables, code, superscript, and Mermaid diagrams. Keep one private, share it read-only, or let the team edit it.
Instance admin
A single self-hosted install can host many organizations. The admin console sits above them all — a separate, server-wide surface for whoever runs the deployment. It opens on every org on the instance, each with its member and task counts, creation date, and a switch to suspend or remove it.
Instance admin · Feature flags
Flip features for each org independently — webhooks, API keys, custom fields, custom statuses, SLA tracking, branding, task trees. Everything is enabled by default; disable one and the API returns 403 to that org's members, no redeploy needed.
Instance admin · Users
Search all users by email and see which organizations each belongs to and the role they hold, with instance-level admins flagged. One place to find who has access to what across the whole server.
Instance admin · Usage
A live summary straight from the database: total organizations, users, and tasks across the entire deployment, plus how many tasks were created in the last thirty days.
Instance admin · Email
Configure SMTP from the server's environment variables or edit it here, then fire a test email to confirm delivery before anything goes out. Invites and notifications all ride on this.
Also in the box
Plumbing you notice by its absence. All of it ships today on a self-hosted install.
Notifications and cross-org changes stream over Server-Sent Events, so boards stay current without polling.
Edits queue locally while you're disconnected and sync automatically on reconnect, so nothing you do offline is lost.
English, Spanish, French, German, Portuguese, Japanese, Chinese, and Arabic, shipped in the box.
Machine credentials with granular permission scopes, so automation never borrows a human's login.
Inbound and outbound events to connect Opsly with your other systems.
Keep attachments on local disk or point Opsly at any S3-compatible bucket.
Your infrastructure
One VPS with Docker Compose, or a distributed deployment. Your PostgreSQL, your backups, your retention policy.
# Node 24 (see .nvmrc)
pnpm install
# start Postgres, push schema, seed admin
docker compose -f docker-compose.local.yml up db -d
pnpm run setup
# api-server + frontend
pnpm run dev
Take it for a spin
Everything above is free on your own install, under a license that converts to Apache 2.0 two years after each release (what source-available means). Or click around a working board first. Contributions welcome, issue first please.