Product Self-Hosted Docs View on GitLab Deploy self-hosted
Apache-2.0 · CPM + Monte Carlo · self-hosted

Most project tools store dates.
This one computes them.

A real Critical Path Method engine with Monte Carlo risk analysis — the math that costs five figures everywhere else, free and open source. Don't take that on faith: the engine is a separate Python package. Verify it in sixty seconds, no signup, no Docker.

pip install trueppm-scheduler
Verify the engine Run the platform
Then: the platform around it — Board card = Gantt bar P80, not a wish No seat count

Now shipping: 0.3 alpha · the first beta (0.4) lands next · a new release every 3–4 weeks — roadmap

artemis-iv-lift / schedule P80 · Aug 21
Vendor procurement
Foundation pour
Structural steel
MEP rough-in
Inspection
Finish-date forecast · 5,000 runs
P50
Aug 14
P80
Aug 21
critical path · 6 tasks · 0d float

The engine

Check the math before you trust the product.

Every project tool claims its scheduling is real. TruePPM's engine is a separate Apache-2.0 Python package — the same code the platform runs on, versioned in lockstep. No server, no database, no account. As far as we know, no other PPM tool, open or commercial, lets you audit its scheduling engine on its own.

# no signup, no Docker, no account pip install trueppm-scheduler from trueppm_scheduler import schedule, Project, Task, Dependency result = schedule(Project( id="p-1", name="Verify me", start_date=date(2026, 1, 5), tasks=[ Task(id="design", duration=timedelta(days=5)), Task(id="build", duration=timedelta(days=10)), Task(id="docs", duration=timedelta(days=3)), ], dependencies=[Dependency("design", "build")], )) result.critical_path # ['design', 'build'] build.early_finish # 2026-01-23 docs.total_float # 12 days
  • Fifteen working days across two weekends, computed on a calendar — not counted in raw days
  • All four dependency types (FS/SS/FF/SF) with calendar-aware lag
  • Multi-calendar composition, cycle detection that names the offending path
  • Monte Carlo with per-task sensitivity — which tasks actually move the date
  • A Rust/WASM twin held in CI conformance against the Python engine

Diff it against MS Project if you like. That is the point of shipping it separately — the claim is falsifiable, which is the only kind worth making about scheduling math.

View on PyPI Engine reference

The bridge

Stop choosing between agile and waterfall.

Most tools force the call. TruePPM keeps one underlying model — tasks, dependencies, dates — and lets each team work the way it works. Plan a board, derive a schedule. Move a bar, the backlog updates. Same truth, two surfaces.

Agile cyclic · iterative · continuous
To do
Wire harness spec
ART-214 · 5pt
Telemetry schema
ART-219 · 3pt
In progress
Foundation pour
critical · 0d float
Done
Site survey
ART-201
Waterfall linear · deterministic · scheduled
Wire harness spec
Foundation pour
Telemetry schema
Inspection
same task · derived dates · two-way sync
01 · ONE MODEL

Cards and bars are the same task. Estimate in points, schedule in days — TruePPM keeps both in step.

02 · TWO-WAY

Close a sprint and the schedule advances. Push a bar and the backlog reorders. No copy-paste status meetings.

03 · PER-TEAM

Software runs the board, hardware runs the Gantt, the PMO reads the rollup. Nobody is forced off their method.

Probabilistic forecasting (Monte Carlo)

Everywhere else, this is a second product.

Single-point dates lie. Monte Carlo simulation samples thousands of possible runs across your estimates, dependencies, and risk ranges and hands you a distribution — so you commit to a date you're 80% likely to hit instead of a hope.

Across the commercial field that capability is licensed separately and operates on a schedule exported out of your scheduling tool: Deltek Acumen Risk, Barbecana Full Monte, Safran Risk, Oracle Primavera Risk Analysis. In open source it is simply absent — we are not aware of another OSS project-management platform that ships it at all.

TruePPM computes it in the same engine that computes the dates. No export step, no second license, no add-on tier.

  • Per-task duration ranges, not fake precision
  • P50 / P80 / P95 — the dates you're 50, 80, and 95% likely to hit
  • Sensitivity: which tasks actually move the date
  • In the Apache-2.0 core — and in the standalone engine package
Finish-date distribution
n = 5,000
P50
Aug 14
P80
Aug 21
P95
Sep 02
Dependency network · critical path computed
start pour steel ship procure fit-out
Critical-path engine

Know exactly what's holding the date.

A real Critical Path Method (CPM) engine computes the longest path, the slack (its formal name is float) on every task, and the knock-on effect of any change — in milliseconds, as you type. Slip a critical task and the whole network recomputes. Tasks with slack stay quiet.

6
tasks on the critical path
0d
float before the date slips
4
dependency types, calendar-aware lag
cross-team dependencies

Resource leveling — automatically resolving an over-allocation — is a different thing, and TruePPM does not do it yet. What it doesn't do →

Coming in the 0.4 beta

Computed, not guessed.

Point any AI client that speaks MCP — Claude Desktop, Cursor, Zed — at your self-hosted instance and ask the live schedule real questions: the critical path, sprint status, or a what-if like "slip this task three days — when do we ship?" Every answer is computed server-side by the same CPM and Monte Carlo engine the UI uses — never a language model's guess, and it never leaves your box. That's one principle with four parts: an agent can compute an answer, cite its derivation, be refused when a change would break the plan, and reproduce any answer later — the same rules for a human and an agent, so the schedule an agent can read and act on is one it can't corrupt.

  • Compute & cite — answers come from the engine, each with the derivation to back it
  • Refuse — a change that breaks the plan's rules is rejected the same for a human or an agent
  • Reproduce — every answer and refusal is recorded in a tamper-evident log you can replay

The read surface and the agent-action audit log land in the 0.4 beta; safe agent writes follow in 0.6. How grounding works →

# any MCP client, pointed at your own instance what's holding the Aug 21 date? critical_path: pour → steel → fit-out float: 0d · p80: 2026-08-21 slip "foundation pour" 3 days — when do we ship? p50: Aug 19 · p80: Aug 26 (what-if · plan untouched) # computed by the scheduling engine — nothing guessed
Project → Program, in the open core

One number rolls all the way up.

Every task feeds its program — health, variance, and forecast aggregate automatically, so the program manager and the team read the same truth at different altitudes. Program rollup is part of the free, open-source core. Roll many programs into a governed portfolio with the Enterprise edition.

Portfolio · Enterprise At risk
Spacecraft Program
7 programs · 41 projects · $214M
Schedule variance−6.2d
Cost performance1.02
Program At risk
Artemis IV
6 projects · 318 tasks
Forecast (P80)Aug 21
Critical tasks6
Project Critical
Pad 39C Refit
47 tasks · 6 critical
On critical pathFoundation pour
Float0d
Open core · self-hostable

No SSO tax. No seat count.

The core is Apache-2.0 and runs anywhere — your private cloud, your cluster, your laptop. Bring your own Postgres, point it at your own identity provider, keep your schedule data inside your perimeter. API-first: if it isn't in the API, it doesn't exist.

Single sign-on ships in the open core, at the 0.4 beta. OpenProject gates OIDC and SAML behind its Enterprise tier; Plane gates SSO behind its Commercial editions. Letting your own team log in with your own identity provider is not an enterprise feature — the enterprise line is identity governance (SAML, SCIM, LDAP sync), not the login screen.

  • One-command deploy with Docker Compose
  • No seat count, no feature flags, no telemetry, no phone-home
  • Offline-first sync — work disconnected, reconcile later
Read the deploy guide API reference
# clone & start the full stack git clone https://gitlab.com/trueppm/trueppm cd trueppm && docker compose up -d # forecast a program from the CLI curl -s api.ppm.internal/v1/programs/artemis/forecast \ -H "authorization: Bearer $TOKEN" | jq "p50": "2026-08-14", "p80": "2026-08-21", "critical_path": ["pour", "steel", "fit-out"]
Integrations

Wired into where work already happens.

Schedules don't live in a vacuum. TruePPM round-trips MS Project files, links commits to tasks, fires webhooks on state changes, and sends the digest your stakeholders actually read.

MS Project & Jira

Import and export MS Project schedules — full round trip, in the UI or over the API. A personal, read-only Jira sync into My Work arrives with the 0.4 beta, so a team can adopt TruePPM without switching first.

Git workflows

Reference a task in a branch or PR and TruePPM moves the card, logs effort, and updates the schedule on merge.

Email digests

Daily and weekly rollups per audience — the contributor sees their tasks, the executive sees variance and the forecast date.

Webhooks & API

Subscribe to any state change. Real-time webhooks (automated callbacks) drive your CI, status pages, and incident tooling.

Straight answers

What it doesn't do.

Most tool sites make you find this out forty minutes into an evaluation. Here it is up front, so you can disqualify us in five. This list is maintained — every gap names the release it's planned for, or says plainly that it isn't.

No resource leveling

The engine computes the schedule; it will not resolve an over-allocation for you. Allocation with over-allocation warnings lands in 0.5. If you need automatic leveling today, use P6 or MS Project. This is the largest gap between TruePPM and the traditional schedulers.

One constraint type

Start-no-earlier-than, and that's it. No must-finish-on, no deadlines. MS Project ships eight constraint types. If your schedules are contractual, TruePPM can't express them yet.

No cost or earned value

No rates, no budgets, no EVM. Resource costs and EV-lite (SPI/CPI) are planned for 0.8. If the first question your PMO asks is "what's the CPI?", we're not ready for you.

A measured ceiling

Roughly 1,000 tasks stays comfortable in the Schedule view — bounded by the browser, not the engine. Measured on documented hardware, published with what we didn't test. P6 handles two orders of magnitude more.

No mobile app

The web UI is responsive, but there's no installable app yet. A PWA with an offline shell lands in 0.5, native Android in 0.6, iOS at 1.0.

We're young

First release May 2026. The current line is alpha; 0.4 is the first beta. OpenProject has fifteen years and a support contract. What we offer against that is a 3–4 week cadence that has held, a public commit history, and this page.

The full maintained gap list →  ·  Named comparisons, with citations →

Get started

Start with sixty seconds.

Verify the engine, then decide whether to run the platform. Apache 2.0, no seat count, no feature flags, no telemetry — on your infrastructure, with your data.

pip install trueppm-scheduler
Deploy self-hosted Read the docs