Comparison with Other PK/PD Software
This page compares OpenPKPD against six widely used population PK/PD and NCA tools: NONMEM 7.5 (ICON plc), WinNonLin/Phoenix 8.4 (Certara), mrgsolve 1.4 (open-source R), Monolix 2024R1 (Lixoft), Pumas.jl 2.5 (PumasAI), and Pharmpy 1.x (Uppsala University).
Note on Pharmpy: Pharmpy is a Python model-manipulation and workflow-automation library. It does not include a native estimation engine; instead it reads, transforms, and writes NONMEM control streams and dispatches estimation runs to NONMEM or nlmixr2/rxode2. Capabilities marked via NM require a NONMEM licence.
Legend:
Y — fully supported and tested
P — implemented but still partial, narrower in scope, or less validated than mature alternatives
— — not supported
via NM — supported by dispatching to an external NONMEM installation
Estimation methods
Method |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
First-Order (FO) |
Y |
Y |
Y |
Y |
— |
Y |
via NM |
FOCE / FOCEI |
Y |
Y |
Y |
Y |
— |
Y |
via NM |
Laplacian approximation |
Y |
Y |
— |
— |
— |
Y |
via NM |
SAEM |
P |
Y |
Y |
— |
— |
Y |
via NM |
Importance sampling (IMP/IMPMAP) |
P |
Y |
— |
— |
— |
Y |
via NM |
Nonparametric (NPML/NPEM) |
P |
Y |
— |
— |
— |
— |
via NM |
Full Bayesian / NUTS |
P |
Y |
— |
— |
— |
Y |
— |
MCMC diagnostics (R-hat, ESS) |
P |
Y |
— |
— |
— |
Y |
— |
OpenPKPD implements the FO, FOCE, and Laplacian methods with the full NONMEM-compatible estimation loop. SAEM uses a single-chain Metropolis-Hastings sampler (multi-chain Rao-Blackwellisation is a known gap). Bayesian estimation dispatches to PyMC when installed, otherwise uses the built-in NUTS backend or falls back to a Laplace approximation.
Read the P entries in this table together with
validation_matrix.md: many of them mean “real but
secondary or selectively benchmarked”, not “placeholder only”.
PK subroutines
Analytical solutions
ADVAN |
Description |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|---|
ADVAN1 |
1-cmt IV bolus |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ADVAN2 |
1-cmt oral |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ADVAN3 |
2-cmt IV |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ADVAN4 |
2-cmt oral |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ADVAN5 |
General linear N-cmt (matrix exponential) |
Y |
Y |
Y |
— |
— |
Y |
via NM |
ADVAN7 |
General linear N-cmt (alternate matrix-exponential backend; mostly overlaps ADVAN5) |
Y |
Y |
— |
— |
— |
Y |
via NM |
ADVAN11 |
3-cmt IV |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ADVAN12 |
3-cmt oral |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
TRANS1–6 |
Parameterisation variants |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ODE-based
ADVAN |
Description |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|---|
ADVAN6 |
Non-stiff ODE ($DES), JIT-accelerated |
Y |
Y |
Y |
— |
Y |
Y |
via NM |
ADVAN8 |
Stiff ODE (LSODA) |
Y |
Y |
Y |
— |
Y |
Y |
via NM |
ADVAN10 |
1-cmt Michaelis-Menten |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
ADVAN13 |
Stiff ODE + forward sensitivity |
P |
Y |
— |
— |
— |
Y |
via NM |
ADVAN16-style DDE |
Delay differential equations |
Y |
Y |
— |
— |
— |
Y |
via NM |
PBPK |
Physiologically-based PK |
P |
— |
— |
— |
Y |
Y |
— |
Transit absorption |
Savic 2007 n-transit model |
P |
via $DES |
Y |
— |
Y |
Y |
via NM |
Parallel absorption |
Multiple absorption pathways |
P |
via $DES |
Y |
— |
Y |
Y |
via NM |
Enterohepatic circulation |
EHC re-absorption loop |
P |
via $DES |
— |
— |
Y |
— |
via NM |
PD and PK/PD models
Model |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
Direct Emax / sigmoidal Hill |
Y |
via $PK |
Y |
Y |
Y |
Y |
via NM |
Indirect response (IDR I–IV) |
Y |
via $DES |
Y |
Y |
Y |
Y |
via NM |
Effect compartment |
Y |
via $PK |
Y |
Y |
Y |
Y |
via NM |
TMDD (full / QSSA / MM) |
Y |
via $DES |
— |
— |
Y |
Y |
via NM |
Tumor growth inhibition (Simeoni) |
Y |
via $DES |
— |
— |
Y |
— |
via NM |
Turnover / transit PD |
Y |
via $DES |
Y |
Y |
Y |
Y |
via NM |
Placebo response |
Y |
via $ERROR |
— |
— |
— |
— |
via NM |
DDI (competitive / TDI / induction) |
Y |
via $DES |
— |
— |
Y |
— |
via NM |
Count data (Poisson / NegBin / ZIP) |
Y |
— |
Y |
— |
— |
Y |
via NM |
Ordered categorical / proportional odds |
Y |
— |
Y |
— |
— |
Y |
via NM |
Markov chain PD |
Y |
— |
Y |
— |
— |
Y |
via NM |
Time-to-event (TTE) / survival |
Y |
via $DES |
Y |
— |
— |
Y |
via NM |
Mixed-effects PD (IIV on PD params) |
P |
Y |
Y |
— |
— |
Y |
via NM |
Data handling
Feature |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
NONMEM CSV format |
Y |
Y |
P |
Y |
Y |
P |
Y |
EVID 0–4 event records |
Y |
Y |
P |
Y |
Y |
Y |
Y |
ADDL / II (additional doses) |
Y |
Y |
P |
Y |
Y |
Y |
Y |
SS (steady-state dosing) |
Y |
Y |
P |
Y |
Y |
Y |
Y |
Infusion (RATE / DURATION) |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
BLQ M1 (exclusion) |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
BLQ M3/M4 (censored likelihood) |
Y |
Y |
Y |
Y |
— |
Y |
via NM |
BLQ M5/M7 (imputation) |
Y |
Y |
Y |
Y |
— |
Y |
via NM |
IOV (inter-occasion variability) |
Y |
Y |
Y |
Y |
— |
Y |
Y |
LLOQ column |
Y |
Y |
Y |
— |
Y |
Y |
Y |
Time-varying covariates |
P |
Y |
Y |
Y |
Y |
Y |
Y |
Missing covariate imputation |
P |
Y |
Y |
Y |
— |
Y |
P |
Output and reporting
Feature |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
.lst run summary |
Y |
Y |
— |
— |
— |
— |
Y |
.ext parameter history |
Y |
Y |
— |
— |
— |
— |
Y |
.phi post-hoc ETAs |
Y |
Y |
— |
— |
— |
— |
Y |
.cov / .cor matrices |
Y |
Y |
— |
— |
— |
— |
Y |
$TABLE CSV export |
Y |
Y |
Y |
— |
— |
— |
Y |
AIC / BIC |
Y |
Y |
Y |
— |
Y |
Y |
Y |
Likelihood ratio test |
Y |
Y |
Y |
— |
Y |
Y |
Y |
Condition number |
Y |
Y |
Y |
— |
Y |
Y |
Y |
ETA shrinkage |
Y |
Y |
Y |
— |
Y |
Y |
Y |
EPS shrinkage |
Y |
Y |
Y |
— |
Y |
Y |
Y |
HTML report |
Y |
— |
Y |
Y |
— |
Y |
P |
Diagnostic plots (GOF, VPC, ETA panels) |
Y |
via Xpose |
Y |
Y |
— |
Y |
Y |
CDISC-formatted output |
P |
— |
— |
Y |
— |
— |
— |
R-hat / ESS for MCMC |
P |
Y |
— |
— |
— |
Y |
— |
Non-compartmental analysis (NCA)
Feature |
OpenPKPD |
NONMEM |
Monolix (PKanalix) |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
AUC (linear-log trapezoidal) |
Y |
— |
Y |
Y |
— |
Y |
Y |
Cmax, Tmax, t½, CLF, Vz |
Y |
— |
Y |
Y |
— |
Y |
Y |
Multiple-dose NCA |
Y |
— |
Y |
Y |
— |
Y |
Y |
Urine NCA (Ae, fe, CLR) |
Y |
— |
Y |
Y |
— |
Y |
P |
Average bioequivalence (ABE) |
Y |
— |
Y |
Y |
— |
Y |
P |
Reference-scaled ABE (RSABE) |
Y |
— |
Y |
Y |
— |
Y |
P |
BE sample size estimation |
Y |
— |
Y |
Y |
— |
Y |
— |
CDISC PP domain output |
P |
— |
Y |
Y |
— |
— |
— |
Sparse sampling NCA |
P |
— |
Y |
Y |
— |
Y |
— |
Simulation and model evaluation
Feature |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
Replicate dataset simulation |
Y |
Y |
Y |
Y |
Y |
Y |
via NM |
New-design simulation |
P |
Y |
Y |
Y |
Y |
Y |
via NM |
Visual Predictive Check (VPC) |
P |
via PsN |
Y |
Y |
— |
Y |
Y |
pcVPC |
P |
via PsN |
Y |
Y |
— |
Y |
Y |
NPC (Numerical Predictive Check) |
Y |
via PsN |
Y |
Y |
— |
Y |
via NM |
NPDE (Normalised Prediction Distribution Errors) |
P |
via PsN |
Y |
Y |
— |
Y |
Y |
Bootstrap CI |
P |
via PsN |
Y |
Y |
— |
Y |
Y |
Stochastic simulation & estimation (SSE) |
P |
via PsN |
— |
— |
— |
Y |
Y |
Covariate modelling
Feature |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
Manual covariate coding |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Linear, power, exponential effects |
Y |
Y |
Y |
— |
Y |
Y |
Y |
Categorical covariate effects |
Y |
Y |
Y |
Y |
— |
Y |
Y |
Stepwise SCM (forward/backward) |
P |
via PsN |
Y (COSSAC) |
— |
— |
Y |
Y |
Parallel SCM candidate evaluation |
P |
— |
Y |
— |
— |
Y |
Y |
FREM (full random effects model) |
P |
— |
— |
— |
— |
— |
Y |
Automated model development (AMD) |
P |
— |
— |
— |
— |
— |
Y |
Parallel computing
Feature |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
Multi-core (ProcessPool) |
Y |
Y |
Y |
— |
Y |
Y |
Y |
Dask distributed cluster |
P |
— |
— |
— |
— |
Y |
— |
Ray cluster |
P |
— |
— |
— |
— |
— |
— |
MPI / HPC grid |
P |
Y |
— |
— |
— |
Y |
via NM |
GPU acceleration |
— |
— |
— |
— |
— |
Y |
— |
Ecosystem and usability
Feature |
OpenPKPD |
NONMEM |
Monolix |
WinNonLin |
mrgsolve |
Pumas.jl |
Pharmpy |
|---|---|---|---|---|---|---|---|
Open source (no licence fee) |
Y |
— |
— |
— |
Y |
partial |
Y |
Native Python API |
Y |
— |
— |
— |
— |
— |
Y |
NONMEM .ctl file parsing + writing |
Y |
— |
— |
— |
— |
— |
Y |
SBML / QSP model import |
Y |
— |
— |
— |
— |
— |
— |
Delay differential equations |
Y |
Y |
— |
— |
— |
Y |
via NM |
R integration |
— |
via PsN |
— |
Y |
Y |
— |
Y |
GUI |
P |
— |
Y |
Y |
— |
partial |
— |
Sphinx documentation |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
GxP regulatory validation |
— |
Y |
Y |
Y |
— |
— |
— |
Summary: when to choose OpenPKPD
Choose OpenPKPD when you want to:
Work entirely in Python without NONMEM or Julia installations
Migrate existing NONMEM
.ctlcontrol streams to an open-source platformImport SBML/QSP models from systems biology databases and fit them to PK data
Use delay differential equations for mechanistic transit or feedback models
Reproduce NONMEM-format
.lst,.ext,.phi,.covoutput for Xpose/PsN interoperabilityIntegrate PK/PD modelling into Python data science workflows (pandas, numpy, scipy, matplotlib)
Use the bundled
openpkpd_guidesktop interface for dataset loading, model running, NCA, and diagnostic plots without writing code
Consider alternatives when you need:
GxP-validated, regulatory-grade software (NONMEM, WinNonLin)
Best-in-class SAEM convergence with Rao-Blackwellisation (Monolix)
Fast compiled ODE simulation for 10,000+ subject VPCs (mrgsolve)
GPU-accelerated estimation and advanced sensitivity workflows (Pumas.jl)
A full GUI-only modelling environment (WinNonLin, Monolix) — OpenPKPD’s GUI covers common workflows but lacks the model-building canvas of those tools
Highly polished NPDE/VPC/automation pipelines for production workflows — OpenPKPD now includes NPDE/NPC/VPC building blocks, but the surrounding workflow polish still lags mature toolchains
NONMEM model manipulation, FREM covariate search, or automated model development workflows built around an existing NONMEM infrastructure (Pharmpy)
Code audit note (2026-03-09): The comparison tables above were reviewed against the current source tree. Key corrections in this pass:
GUI remains
P, not—:openpkpd_guiprovides a working desktop interface for data, model, fit, NCA, results, plots, diagnostics, and SCM, but the Advanced page is still mostly a placeholder.NPDE is now marked
P: the repository contains a dedicatedsimulation/npde.pyimplementation and GUI-facing NPDE services, but this area is still less validated and less polished than mature external stacks.Parser-vs-runner gaps matter: records such as
$SIMULATION,$MIXTURE, and$PRIORare parsed into typed records, but their end-to-end execution support is still more limited than the core FO/FOCE-style workflow.