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 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.
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
foreignObjectcontent. - 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 2.0 overview
- Getting started
- Compliance and coverage
- Configuration
- Artifact and bundle formats
- Security and limitations
- Final release and maintenance status
- Python API
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.