Tool survey · 31 October 2026 · self-hosted

Six ways to plan work by what blocks what

Before building anything, I graded the open-source options against a single job: enter tasks with blockers between them, see those blockers on a Gantt, and open one page every morning that says which unfinished task is holding up the rest. Every candidate below gets a clickable mock-up of that exact screen — invented data, no connection to any server.

The ask, in three lines

  1. Tasks enter with a dependency relation, not just a date.
  2. A Gantt that shows the relation, not only the durations.
  3. A daily landing page: the most pressing blockers first.

The verdicts

Ordered by how close they get to the third line of the ask. All six are free and self-hostable; what separates them is scheduling honesty, weight, and what the first screen shows.

Leantimev3.13.2
AGPL-3.0 · 11.9k stars

PHP project system with a real dashboard: to-dos, milestones and goals on one screen.

Its default screen is already a daily queue. Dependencies are unlimited and the timeline draws connector arrows — but “blocked” is a flag you set, and the queue sorts by date.

closest to the morning page
Kaneov2.48.0
MIT · 9.7k stars

Board, list, calendar and Gantt views over work items, with linked tasks and GitHub sync.

Blockers are first-class relations with a chip on the card and a connector in the Gantt. One container plus Postgres, SSO in the free build. Board-first landing, no scheduling maths.

best modern base
TaskJugglerv3.8.4
GPL-2.0 · 0.8k stars

A text DSL plus a scheduler that resolves dependencies and emits static HTML reports.

Real dependency semantics and a computed critical path — the only tool here that knows what a one-day slip does to the launch date. Input is a text file, not a form.

the only one that computes
Vikunjav2.7.1
AGPL-3.0 · 5.9k stars

Personal-scale task manager: list, table, kanban and Gantt views in one Go binary.

Installs without a database server and is fast to capture into. The Gantt draws bars only — relations are stored but never rendered, and dates never propagate.

lightest to run
OpenProject CEv17.9.6
GPL-3.0 · 16.9k stars

Classical PMO suite: work packages, Gantt with predecessor/successor, boards, budgets.

Predecessor/successor with lag is free, and automatic scheduling mode pushes successors when a bar moves. No critical path (their FAQ says so), and My page ranks by priority, not by what a task unblocks.

most depth, most weight
Plane CEv1.4.3
AGPL-3.0 · 61.8k stars

Linear-style work items, cycles and docs with a Gantt layout and blocking links.

Beautiful and popular, but the Gantt plots dates you typed: blocking links exist and nothing is scheduled from them. Heaviest stack of the six to keep alive.

prettiest, least maths

What they were graded against

Written down first, so every cell below can be checked against a rule rather than an impression. C3 and C4 are what separate these tools from each other.

ConstraintLeantimeKaneoTaskJugglerVikunjaOpenProject CEPlane CE
C1Enter a dependencyA task can be linked to another as blocker/blocked-by, finish-to-start, without a plugin or a paid tier.✓unlimited deps✓blocking + relates✓depends / precedes~blocking relations✓FS + lag, free✓blocking links
C2See it on the GanttThe chart draws an arrow from the blocking task's bar to the task it holds up.✓arrows✓arrows~static report✗bars only✓arrows, live~bars, links in panel
C3Dates that moveSlide a blocker and its successors follow. Without this the Gantt is a drawing of assumptions.✗no propagation~links kept, dates typed✓scheduler resolves✗no propagation~auto mode pushes successors✗no propagation
C4A blocker-first landing pageOne screen, opened daily, that orders work by what it unblocks — not by due date, priority or assignment.~dashboard by date~blocked-only filter✓critical path report~saved filter~My page by priority~saved views
C5Runs on this boxFits in 8 GB of RAM beside three existing apps, no seat fees, no third-party account.~php + mysql~docker + postgres✓a ruby gem✓one binary, sqlite~Rails + pg + memcached~4 containers + redis
C6Cheap to keep currentAdding or re-dating one task takes seconds, from the phone too, or the plan decays.✓fast capture✓fast capture✗edit text, rerun✓fast capture~forms, many fields~forms + cycles

✓ met · ~ partially · ✗ not available in the free, self-hosted build. Versions and licences read from each project's releases on 31 Oct 2026.

The six, one by one

Each mock-up is the screen that tool would put in front of you on day one, redrawn from its public documentation — same project, same invented dates, so the models can be compared rather than the paint.

Leantime

v3.13.2 · AGPL-3.0 · 11.9k stars
Running cost here

PHP + MySQL, official Docker image. Around 500 MB RAM with a small database — comfortable here.

Mock-up

leantime.html

What it does for this job
  • Default screen is a dashboard of open to-dos, milestones and goals — the closest thing to the morning page out of the box.
  • Unlimited dependencies on the free edition, and a timeline that draws connecting arrows.
  • Purpose-built for people who lose track of executive function: the UI assumes you need the next action surfaced, not the whole plan.
Where it falls short
  • “Blocked” is a status you maintain by hand; nothing derives it from the relations.
  • No date propagation, so a slip is a manual re-plan.
  • The dashboard sorts by due date and priority — the “what must finish first” ordering is still yours.

Those two gaps are exactly what a 150-line generator fixes: read the API, sort open tasks by how many downstream tasks they hold, write one page.

Kaneo

v2.48.0 · MIT · 9.7k stars
Running cost here

App + Postgres via Docker Compose. Around 700 MB RAM.

Mock-up

kaneo.html

What it does for this job
  • MIT licence with SSO included in the free build — no feature held back behind an upgrade.
  • Blockers are proper relations, shown as a chip on the card and connected in the Gantt.
  • One compose file with Postgres; the UI is fast and uncluttered.
Where it falls short
  • Board-first: the landing surface is a kanban, not a dependency queue.
  • Dependencies link tasks but do not reschedule them.
  • Youngest codebase of the six — expect churn.

Best pick if you want a modern tool to live in and are willing to generate the morning view.

TaskJuggler

v3.8.4 · GPL-2.0 · 0.8k stars
Running cost here

A Ruby gem and one CLI. Zero daemons; the report is a file.

Mock-up

taskjuggler.html

What it does for this job
  • Resolves the dependency graph and computes slack — the only correct scheduler here.
  • Critical path is a first-class output, so “what pulls the launch date” is answerable.
  • No server: a text file plus one command, output is static HTML you can serve read-only.
Where it falls short
  • Input is a DSL. Adding a task on a phone means editing text.
  • The plan is only as current as the last run; there is no click-to-complete.
  • Report styling is plain unless you write your own templates.

Fits a plain-file habit — and this box already serves static pages. The model can be the source of truth while a nicer tool shows it.

Vikunja

v2.7.1 · AGPL-3.0 · 5.9k stars
Running cost here

One binary, around 150 MB RAM, a SQLite file to back up.

Mock-up

vikunja.html

What it does for this job
  • Single Go binary with SQLite — the cheapest install of the six, nothing to feed.
  • Fast capture from the phone; relations include blocking, blocked-by and precedes/follows.
  • Four views per project (list, table, gantt, kanban) plus saved filters.
Where it falls short
  • The Gantt renders bars only: relations live in the data, never as arrows.
  • Blocked tasks can still be completed; nothing enforces the order (issue #2194 is open).
  • No date propagation and no critical path.

A good capture layer — but you would end up generating the visual dependency view yourself, at which point the built-in Gantt earns little.

OpenProject CE

v17.9.6 · GPL-3.0 · 16.9k stars
Running cost here

Docker Compose: web + worker + Postgres + memcached. 2–4 GB RAM to be comfortable.

Mock-up

openproject.html

What it does for this job
  • The deepest free scheduling model: automatic scheduling mode (since 15.4) places a successor right after its nearest predecessor, pushes it when the predecessor slips, and takes an editable lag.
  • Work packages, versions, budgets, wiki and boards in one install, with no user limit.
  • Mature and thoroughly documented.
Where it falls short
  • No critical path — their FAQ confirms it and suggests hand-encoding the chain.
  • My page is assigned work sorted by priority; a blocker queue is not a view it has.
  • Rails, Postgres and memcached for one user is a lot of surface to keep patched.

The right answer if you later need a real PMO process with other people. Overkill for one operator.

Plane CE

v1.4.3 · AGPL-3.0 · 61.8k stars
Running cost here

Web + space + worker + Postgres + Redis + object storage. Around 4 GB RAM.

Mock-up

plane.html

What it does for this job
  • Polished UX, 61.8k stars, very active; cycles and modules keep a plan organised.
  • Blocking links on every work item, and a Gantt layout in the self-hosted build.
Where it falls short
  • No scheduling engine: the Gantt is dates you typed, and blockers do not move them.
  • Saved views filter — they do not rank by how much work each task unblocks.
  • Heaviest infrastructure of the six, and the free edition holds back governance features.

Choose it for the Linear feel with a team; it buys you nothing on the dependency question.

Also considered, and why not

None of these is bad software; each is wrong for this one job.

Redmine
Has a Gantt and issue relations, but lag and auto-scheduling need plugins and the interface is a decade behind. Fine as a ticket archive, not as a daily planner.
Taiga, Wekan, Focalboard, Planka
Kanban trackers — no Gantt, and no dependencies worth the name.
GanttProject, ProjectLibre
Desktop single-file planners with real dependencies and, in GanttProject, a critical path. If the plan never has to leave your Windows PC, ProjectLibre is the zero-infrastructure option — but there is nothing to open on the phone.
Obsidian + Mermaid / Markwhen
You already sync a vault. A fenced mermaid Gantt renders a chart from text, but it has no notion of a dependency: every date is written by hand.
frappe-gantt, dhtmlx-gantt
JavaScript chart libraries, not tools. Only relevant if you build — they solve the drawing, not the scheduling or the landing page.
Bottom line

No tool ships the morning page. The rest is solved.

All six can store “A blocks B”. Only TaskJuggler computes what that means — slack, critical path, the launch date if you slip a day. The rest store the relation and let you type the dates, which makes their Gantt an illustration of your assumptions rather than a schedule.

The daily blocker page is the piece nobody has. Leantime gets closest by making a dashboard the home screen, and OpenProject's My page is a respectable assigned-work queue — but both order by date and priority. Neither answers “which task, finished today, unblocks the most downstream work?” That ordering is a five-line query over the dependency graph; products skip it because most teams assign work to people instead.

Which is the honest argument for a small build — not a whole system, one page. Capture, relations and the Gantt already exist, free.

If it were mine

  1. Capture + plan: Vikunja — one binary, SQLite file, relations on every task, four views. Nothing to babysit.
  2. Or a nicer board: Kaneo if you want MIT, SSO and a modern board, with Postgres alongside.
  3. The morning page: a cron job that reads the API, counts downstream tasks per open task, and writes one static page — blockers.html — served here next to the others.
  4. If the plan is text anyway: TaskJuggler as the source of truth, its report as the morning page. Correct maths, no service running.