Skip to main content

Runport

Benchmark any model, prompt or AI workflow.
Know exactly what it cost and what it got right.

Runport is an open-source, local-first benchmarking platform. Point it at an LLM API, a RAG pipeline, an agent, an MCP server or a Dify / n8n workflow, run your own dataset under hard spend caps, and get scores, latency, tokens and dollars you can defend. Nothing is invented, and nothing leaves your machine unless you approve it.

CI status License: Apache 2.0 Python 3.11+ Version: 1.0.1 GitHub stars

Quickstart · Why Runport · Integrations · Use it your way · Docs · Contributing


Runport web dashboard: results explorer for one run, with per-case latency, cost, provenance and a score-kind column

Results explorer in the local web dashboard. A local HTTP agent run on the bundled synthetic dataset: $0 spend, scores labelled Heuristic, missing tokens shown as None.


Why Runport

Most benchmark tools give you a leaderboard. Runport gives you numbers you can put in front of a skeptical reviewer.

  • Nothing is invented. Missing latency, tokens or cost stay None. They are never defaulted to zero.
  • Agreement is not correctness. Accuracy comes only from human-approved ground truth. Heuristic and judge scores are stored and labelled as such.
  • Spend is governed, not hoped for. Hard caps are checked before every live request. A request whose cost cannot be resolved is booked UNRESOLVED and blocks the next live run until you reconcile it.
  • Nothing runs by surprise. A plan is fingerprinted with SHA-256. Live execution needs an approval bound to that fingerprint, and a changed plan invalidates it.
  • Local by default. Results, the spend ledger and approvals live in SQLite on your machine. Exported traces are scrubbed of secrets.
  • One engine, every interface. The CLI, terminal UI, web dashboard, Python SDK and MCP server all go through the same guarded runner.

Quickstart

Requirements: Python 3.11+ and uv. Node.js is only needed to rebuild the dashboard; a prebuilt bundle ships with the package.

git clone https://github.com/Sudharsanselvaraj/Runport.git
cd Runport
uv sync --extra dev --extra report

uv run runport init                 # create a local workspace: config, budget policy, database

Run your first benchmark offline. It replays recorded outputs, needs no API key and books $0.00:

uv run runport benchmark --replay --dataset examples/replay-demo/fixtures.jsonl --split ALL
uv run runport budget status
uv run runport web                  # dashboard at http://127.0.0.1:8000

Prefer the terminal? uv run runport ui opens the terminal dashboard and uv run runport opens the interactive launcher.

What the offline replay prints
╭───────────────────────────────────────────────────────────────╮
│ Runport Offline Replay Benchmark                              │
│ Target Model:  google/gemini-3.5-flash-lite                   │
│ Dataset:       fixtures.jsonl                                 │
│ Mode:          REPLAY RUN (Provenance: REPLAYED, $0.00 spend) │
╰───────────────────────────────────────────────────────────────╯
 Recorded Outputs     3 / 3        Fixtures: fixtures.jsonl · Split: ALL
 Mean Latency         151.9 ms     From recorded latencies
 Mean Accuracy        —            Word overlap with the expected answer (labelled cases only)
 Run Spend (USD)      $0.0000      Provenance: REPLAYED ($0.00 spend)

 Case ID   Query Snippet                          Latency   Accuracy   Provenance   Cost
 rep-001   What is the capital of France?         120 ms    —          REPLAYED     $0.0000
 rep-002   Convert 100 EUR to USD                 145 ms    —          REPLAYED     $0.0000
 rep-003   Explain quantum entanglement brief...  190 ms    —          REPLAYED     $0.0000

The fixtures carry no expected answers, so no score is shown. Runport prints — rather than inventing one. More runnable examples live in examples/: Python callable, HTTP workflow, Dify workflow, classification and RAG.


How it works

Runport architecture: an approved plan feeds the benchmark engine, which runs models, workflows and local targets, then books spend to the ledger, writes traces and produces a scorecard

The runner applies its guards in a fixed order: authorization → privacy gate → budget reservation → transport → validation → persistence → spend booking. Replays never touch the network or the live ledger.

  1. Plan. A dataset (hashed, immutable) and your targets become a fingerprinted execution plan with a worst-case cost projection.
  2. Approve. A human approves the exact plan. Any change invalidates the approval.
  3. Run. Cases execute under hard caps, with bounded retries and resumable checkpoints.
  4. Score. Scoring is separate from inference. Every score carries its kind and its evaluator.
  5. Report. Latency, tokens and cost, each with its provenance, in the CLI, the TUI, the web dashboard or a sanitized export.

More detail: Architecture · Universal execution architecture.


Product tour

Plans page showing a target, dataset, SHA-256 plan fingerprint, preflight status and projected spend

Plan before you spend. A SHA-256 fingerprint over targets, dataset and caps, a preflight verdict and a worst-case cost projection.

Authorize Live Benchmark Execution dialog listing the plan fingerprint, projected cases and maximum spend

Approve explicitly. Live execution needs a human approval bound to that fingerprint.

Budget ledger page in light theme with spend, remaining cap and per-transaction provenance

Account for every dollar. An append-only SQLite ledger books each request as ACTUAL, ESTIMATED, UNRESOLVED or UNAVAILABLE.

Runport terminal launcher menu

Work from the terminal. The same engine drives the CLI, the Rich terminal UI and the web dashboard, in dark and light themes.


What you can benchmark

Evaluate How
Models and prompts Any OpenAI-compatible API, OpenRouter or a local Ollama model, live or as an offline replay of recorded outputs.
RAG pipelines and agents An HTTP endpoint, a Python callable, a subprocess or an MCP server's tools, scored on the same dataset.
Orchestrated workflows Dify, plus experimental adapters for Flowise, Langflow, n8n and LangGraph.
Quality Exact-match ground truth, rubric and overlap heuristics, classification metrics (accuracy, F1, calibration, Wilson and bootstrap intervals), with DEV-calibrated thresholds evaluated unchanged on TEST.
Cost and speed Per-request latency, input and output tokens, and cost with provenance, from provider-reported or catalog-estimated values.

Integrations

The connector registry in src/runport/connectors/registry.py is the source of truth for what is supported.

Status Connectors
Stable OpenAI and OpenAI-compatible APIs · OpenRouter · Dify · Generic HTTP endpoint · Python callable · Subprocess · Ollama
Experimental MCP server (tools) · Flowise · Langflow · n8n · LangGraph
Compatible via OpenAI-compatible vLLM · LM Studio · LocalAI · LiteLLM proxy · Groq · Together · Fireworks · DeepInfra · DeepSeek · Mistral
Compatible via OpenRouter Anthropic · Gemini
Planned LangChain · CrewAI · LlamaIndex
Full capability matrix (streaming, tool calls, usage, cost and more per connector)
Connector Name Status Integration Tested Streaming Tool calls Structured output Per-step trace Usage Cost Errors / timeouts
openai_compat OpenAI / OpenAI-compatible Stable native yes — — partial — yes partial yes
openrouter OpenRouter Stable native yes — — — — yes yes yes
dify Dify Stable native yes yes — — partial yes partial yes
http_workflow Generic HTTP endpoint Stable generic http yes — — — — partial partial yes
python_target Python callable Stable in process yes — — partial — — — yes
subprocess Subprocess (stdin/stdout) Stable in process yes — — — — — — yes
ollama Ollama Stable native yes — — partial — yes — yes
mcp MCP server (tools) Experimental native yes — yes yes — — — yes
flowise Flowise Experimental generic http partial — — — — — — yes
langflow Langflow Experimental generic http partial — — — — — — yes
n8n n8n Experimental generic http partial — — — — — — yes
langgraph LangGraph Experimental generic http partial — — — — — — yes
vllm vLLM Via via openai_compat — — — — — yes partial yes
lm_studio LM Studio Via via openai_compat — — — — — yes partial yes
localai LocalAI Via via openai_compat — — — — — yes partial yes
litellm LiteLLM proxy Via via openai_compat — — — — — yes partial yes
groq Groq Via via openai_compat — — — — — yes partial yes
together Together Via via openai_compat — — — — — yes partial yes
fireworks Fireworks Via via openai_compat — — — — — yes partial yes
deepinfra DeepInfra Via via openai_compat — — — — — yes partial yes
deepseek DeepSeek Via via openai_compat — — — — — yes partial yes
mistral Mistral Via via openai_compat — — — — — yes partial yes
anthropic Anthropic Via via openrouter — — — — — yes yes yes
gemini Gemini Via via openrouter — — — — — yes yes yes
langchain LangChain Planned none — — — — — — — —
crewai CrewAI Planned none — — — — — — — —
llamaindex LlamaIndex Planned none — — — — — — — —

Configuration for each connector: Connector catalogue · Connector reference.


Use it your way

Interface Start with
CLI uv run runport --help · CLI reference
Terminal UI uv run runport ui
Web dashboard uv run runport web · Web dashboard guide
Python SDK (in process) SDK contract
MCP server (local stdio, for agents) MCP architecture

Documentation

Getting started Quickstart · Concepts · FAQ
Usage CLI reference · Web dashboard · Configuration reference
Integrations Connector catalogue · Dify · MCP architecture · Python SDK contract
Evaluation and metrics Metrics
Safety and governance Safety guide · Invariant tests · Security policy
Design and roadmap Architecture · Canonical trace schema (design) · Multi-user security model (design) · Product readiness audit · Roadmap audit

Status

Runport is alpha. No version has been tagged or published yet, and interfaces may change.

Available today: the guarded execution path behind every interface, fingerprinted plans and persisted approvals, the atomic budget ledger, score provenance, the stable connectors above, an MCP client connector and a local stdio MCP server, an in-process Python SDK, the CLI, the terminal UI and the web dashboard.

Not yet built (designs and plans live in docs/):

  • canonical trace and span storage, and agent trajectory evaluation
  • per-step instrumentation for LangGraph and other workflow frameworks
  • OpenTelemetry / OpenInference ingestion and Langfuse export
  • a TypeScript SDK and a mature remote Python SDK
  • authenticated remote MCP and production multi-user hosting

See the roadmap audit for what is verified and what is open.


Contributing and community

Contributions are welcome. Tests run fully offline with sockets blocked: uv run pytest. Start with the contributing guide, then:

License

Runport is licensed under the Apache License 2.0. See NOTICE for attributions.


Runport: benchmark results you can defend, spend you can account for, on your own machine.
If it saves you time or money, a star helps others find it.

Metadata

Release files for runport 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for runport 1.0.1
File Size Uploaded Provenance Actions
runport-1.0.1.tar.gz 16.1 MB With provenance Details for runport-1.0.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for runport 1.0.1
File Interpreter ABI Platform Actions
runport-1.0.1-py3-none-any.whl Python 3 none any Details for runport-1.0.1-py3-none-any.whl

Total release size: 17.7 MB

Release files / runport-1.0.1.tar.gz

Download URL runport-1.0.1.tar.gz
Size 16.1 MB
Tags Source
SHA-256 checksum
How to use checksums
5407471307cd6181044bb3b3d2472abfc79c4c313dc52544c32fe3f78c7fb5e6
BLAKE2b-256 checksum
How to use checksums
03977081cbe7c7ed4958bbd9834c35baa53e5618f59295e5ddb92f3438a6d2aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Release files / runport-1.0.1-py3-none-any.whl

Download URL runport-1.0.1-py3-none-any.whl
Size 1.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
29edd4c473c83ab192d859ef5d7e8735e9956a0e1e4f84844fc70fc77e11f222
BLAKE2b-256 checksum
How to use checksums
47fe7d50d617a2239877d5151320b994e4d74de7ce9c1ce7ede98d72bdbdbd16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Security for runport 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for runport-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page