Skip to main content

ResearchPlot 2.0

Maintenance ended on 2026-10-01. Version 2.0.1 is the final release. No further feature, venue-profile, dependency, or security updates are planned. The package and source remain available under MIT; forks are welcome. Review the maintenance and handoff guide and current official venue instructions before using historical profiles.

A local, source-backed preflight workspace for research figures.

PyPI Python CI Documentation License: MIT

PyPI package · documentation website · releases

ResearchPlot checks the files that researchers actually submit. It resolves an immutable venue profile, plans which evidence is needed, inspects live Matplotlib figures and saved artifacts, and reports both violations and gaps it could not establish. The project model also carries captions, descriptions, source data, deliverables, manuscript metadata, and profile locks.

ResearchPlot is a compliance assistant, not an acceptance guarantee. Its sources, caveats, coverage gaps, and skipped checks remain visible in every report.

ResearchPlot 2.0 compliance architecture

flowchart LR
    P["Schema-v3 project"] --> C["Compliance plan"]
    V["Locked, source-backed profile"] --> C
    C --> L["Live figure evidence"]
    C --> F["Saved-file evidence"]
    C --> B["Bundle metadata"]
    C --> M["Compiled-PDF structure"]
    L --> R["Coverage-aware report"]
    F --> R
    B --> R
    M --> R
    R --> O["HTML / JSON / SARIF / bundle"]

Install

ResearchPlot 2.0 requires Python 3.11 or newer. The distribution is named researchplot-venues; the import package and command are both researchplot.

python -m pip install researchplot-venues==2.0.1
researchplot --version

Optional capabilities are installed only when needed:

python -m pip install "researchplot-venues[web]==2.0.1"       # local browser workspace
python -m pip install "researchplot-venues[registry]==2.0.1"  # signed profile sync
python -m pip install "researchplot-venues[plots]==2.0.1"     # deprecated plotting helpers

The base package works offline and requires neither LaTeX nor downloaded fonts. Checking, exporting, bundling, and the browser workspace do not contact the network. Pinning the package does not pin its dependencies. See the maintenance guide for capturing a tested environment and an offline wheelhouse.

Audit an existing figure first

Use a pinned profile coordinate for repeatable work:

researchplot audit figures/figure1.pdf \
  --profile nature@2026.08.0 \
  --role main \
  --width single \
  --content line-art

The same operation is available in Python:

import researchplot as rp

target = rp.target(
    "nature@2026.08.0",
    role="main",
    width="single",
    content="line-art",
)
report = target.audit("figures/figure1.pdf")

print(report.verdict)
for finding in report.failures:
    print(finding.rule_id, finding.message)

A saved file cannot prove every property of the figure that produced it. Required live-figure or bundle evidence that is unavailable makes a coverage-aware project result INDETERMINATE; it is never silently counted as a pass.

Create a strict v2 project

researchplot.toml uses schema version 3. Unknown keys, duplicate IDs, unpinned profiles, invalid formats, unsafe/out-of-root paths, and empty projects are errors.

schema_version = 3
profile = "nature@2026.08.0"
policy = "complete"
lock = "researchplot.lock.json"

[[figures]]
id = "figure-1"
number = 1
role = "main"
width = "single"
content = "line-art"
caption = "Response increases across the four measured inputs."
alt_text = "Line chart with a monotonic increase from input zero to three."
source_data = ["data/figure1.csv"]

[[figures.deliverables]]
id = "main"
format = "pdf"
path = "figures/figure1.pdf"
required = true
preferred = true

Resolve and write the profile lock, then check in frozen mode:

researchplot profile lock nature@2026.08.0 --output researchplot.lock.json
researchplot check --config researchplot.toml --frozen

The Python workflow exposes the same plan and coverage model:

import researchplot as rp

project = rp.Project.load("researchplot.toml")
plan = project.plan(frozen=True)
report = plan.check()

if report.verdict is rp.Verdict.COMPLIANT:
    bundle = project.bundle("dist/submission")

Project.bundle() currently writes a verified submission directory. Build a deterministic ZIP from that directory with create_deterministic_archive() after its manifest verifies. JATS and RO-Crate metadata converters are available for the emitted submission manifest; they do not invent missing captions or descriptions. With the complete project policy, version 2.0.1 checks aggregate project coverage against the staged outputs before committing the submission directory: required failures or missing required evidence block the bundle.

Make a Matplotlib figure at the venue width

import matplotlib.pyplot as plt
import researchplot as rp

project = rp.Project.load("researchplot.toml")
figure = project.figure("figure-1")

with figure.style(deliverable="main") as style:
    fig, ax = style.subplots(aspect=0.62)
    ax.plot([0, 1, 2, 3], [0, 1, 4, 9], marker="o")
    ax.set(xlabel="Input", ylabel="Response")

    report = figure.check(fig=fig)
    result = figure.export(fig, policy="violations")

print(report.verdict, result.paths)
plt.close(fig)

The style uses matplotlib.rc_context; global rcParams are restored even after an exception. ResearchPlot does not replace Matplotlib, Seaborn, SciencePlots, TUEPlots, R, Julia, or design software. Any tool may create the saved artifact; only live styling and live-artist inspection are Matplotlib-specific.

Understand the verdict

Verdict Meaning
COMPLIANT Every applicable encoded required rule has sufficient evidence and passes.
NON_COMPLIANT At least one applicable required rule is known to fail.
INDETERMINATE No required rule is known to fail, but required evidence or capability is missing.

Rule strength and check status are independent. Recommendations warn; inferred guidance is informational. A manual attestation can satisfy only a rule classified as manual. A waiver records a workflow decision but does not turn a venue violation into venue compliance.

CLI exit codes are stable: 0 compliant, 1 non-compliant, 2 invalid/unsafe input or an operational capability error, and 3 indeterminate.

What 2.0 can inspect

  • PDF page boxes, physical size, font resources, embedded images, color spaces, transparency, annotations, JavaScript, actions, and embedded files.
  • SVG dimensions, text/font declarations, embedded and external references, scripts, handlers, and foreignObject content.
  • PNG, JPEG, and TIFF dimensions, EXIF orientation, DPI, color mode, ICC data, bit depth, compression, alpha, and frame count where exposed by the format.
  • EPS format integrity and bounding boxes, with unsupported properties reported as unresolved.
  • Deterministic grayscale and color-vision previews plus advisory contrast, entropy, transparency, rendered text/legend clipping, label-overlap, whitespace, final-size font, and colormap-luminance diagnostics.
  • Compiled manuscript PDF structure and conservative figure placement through embedded provenance IDs, exact raster fingerprints, or unique configured hints. It measures bounds, rotation, scale/effective DPI, and crop-box clipping; vector fingerprinting, caption/reference reconciliation, and venue-rule integration remain unresolved.
  • Submission manifests, path safety, hashes, deterministic ZIP archives, JATS figure metadata, and optional RO-Crate metadata.

Parsers are bounded and active content is reported, never executed. Isolated artifact inspection is available for hostile or untrusted inputs, but no parser should be treated as a perfect sandbox.

Profiles and provenance

Profiles are declarative, immutable JSON data with coordinates such as cvpr-2026@2026.08.0, SHA-256 digests, rule applicability, typed probes, official source locators, verification dates, interpretation notes, review status, and caveats. Missing official guidance stays unspecified.

researchplot profile list
researchplot profile search vision
researchplot profile show cvpr-2026@2026.08.0
researchplot explain figure.width.single --profile nature@2026.08.0

ResearchPlot 2.0 ships 22 bundled profiles spanning journals, publisher guidance, and 2026 CS/ML conferences. See the generated profile evidence catalog for every rule and source. Generic publisher profiles are not presented as journal-specific guarantees, and narrow profiles cover only the rules their official sources establish.

Signed registry updates are opt-in. Only an explicit profile-sync operation may use the network; normal resolution consults installed data and project locks prevent silent updates or rollback. Registry clients require an explicitly configured trusted root. The bundled catalog is a historical snapshot. Bare conference aliases continue to resolve to the installed 2026 profiles; they do not resolve a future conference year. Publisher freshness warnings do not establish that old guidance remains valid, and year-pinned profiles remain immutable. No maintained public registry is promised.

Local browser workspace

python -m pip install "researchplot-venues[web]==2.0.1"
researchplot serve

The workspace binds only to 127.0.0.1, uses a per-launch token and origin checks, and deletes uploaded temporary artifacts after inspection. It supports local drag-and-drop artifact audits, installed-profile discovery, JSON export, reproducible CLI commands, and raster grayscale/color-vision previews. It does not upload files, send telemetry, edit scientific data, or update profiles.

Compatibility and migration

The v1 Target, target(), reports, project reader, CLI aliases, and researchplot.plots bridge remain available throughout 2.x with deprecation warnings. Install [plots] only while migrating; new work should compose figures with native Matplotlib. Run researchplot migrate to translate a v1 configuration into a separate schema-v3 file and review every untranslatable field before adoption.

The compatibility bridge is retained in the final release. No further release or compatibility removal is planned.

Documentation

ResearchPlot is MIT licensed. See CONTRIBUTING.md for developing a fork, review the unsupported-release policy in SECURITY.md, and cite the project using CITATION.cff.

Metadata

Release files for researchplot-venues 2.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 researchplot-venues 2.0.1
File Size Uploaded Provenance Actions
researchplot_venues-2.0.1.tar.gz 298.7 kB With provenance Details for researchplot_venues-2.0.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for researchplot-venues 2.0.1
File Interpreter ABI Platform Actions
researchplot_venues-2.0.1-py3-none-any.whl Python 3 none any Details for researchplot_venues-2.0.1-py3-none-any.whl

Total release size: 528.6 kB

Release files / researchplot_venues-2.0.1.tar.gz

Download URL researchplot_venues-2.0.1.tar.gz
Size 298.7 kB
Tags Source
SHA-256 checksum
How to use checksums
12f4a900ee81472c57d15674ccda009b5d7a23ddfc5923e6908fe59b0269ed59
BLAKE2b-256 checksum
How to use checksums
be7bbc3d8f2900dcbc6b24c33d6573026ad27ee56f0a2f0eef8036e845e09b8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 1, 2026.

Transparency log

Release files / researchplot_venues-2.0.1-py3-none-any.whl

Download URL researchplot_venues-2.0.1-py3-none-any.whl
Size 229.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ffe542c2bf24ad0a931df15fbcf8552434b8b8d6e06b36149fe4165226590425
BLAKE2b-256 checksum
How to use checksums
3c6c28a4e68c3b67b7cdabec4debf5aa2bfab797bdcfbc3f25705766426f2c9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 1, 2026.

Transparency log

Security for researchplot-venues 2.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

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for researchplot_venues-2.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 Oct 1, 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