Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Figurestead

Figurestead is an experimental scientific figure system with Python and framework-free browser surfaces. It shares figure-contract and theme semantics across runtimes while keeping scientific output deterministic and inspectable.

Published versions: Python figurestead==0.9.0a3 and browser @figurestead/web@0.9.0-alpha.4 (alpha.4 release). The counters are independent. npm alpha points to alpha.4; latest intentionally remains alpha.1. The retained release records bind the exact published artifacts.

Unpublished maintenance candidate

This checkout prepares Python 0.9.0a4 / browser 0.9.0-alpha.5 for independent review, not registry publication. It includes the merged SVG typography/subtitle, dense numeric-array, DirectLabels lifecycle, authored matrix-domain and minimum-dependency repairs. See candidate changes and limits. The published identities above and all historical images remain unchanged.

Start here

The commands below review the retained local candidate from this checkout. They do not fetch a new registry release. For the existing public release use the exact published versions listed above.

Python

python -m pip install ./release/python/0.9.0a4/dist/figurestead-0.9.0a4-py3-none-any.whl
from figurestead import line

figure, axes = line([0, 1, 2], [[0, 1, 0]])
figure.savefig("figurestead-first-success.png", dpi=150)

Open the exact Python example.

Browser

npm install ./release/npm/0.9.0-alpha.5/dist/figurestead-web-0.9.0-alpha.5.tgz

The package exports createFigurestead; rendering requires a complete normalized figure contract. The repository includes one with every identifier defined. From a checkout:

python3 -m http.server 4173

Open http://127.0.0.1:4173/examples/browser-first-success/. Inspect the exact browser example and its inline contract.

Python and browser surfaces share normalized figure-contract vocabulary and selected theme definitions. Each surface renders through its own implementation; shared semantics do not imply pixel-identical output.

Series identity and optional direct labels

Default line series combine color with persistent open circle (S1), square (S2), and upright triangle (S3) markers and matching line-and-marker legends. Line rhythm remains an independent semantic channel. Python callers can carry series_slots=[1, 2] when rebuilding filtered S2/S3 rows; browser setData retains established keyed identity through supported filtering/reordering and partial style overrides. setConfig replaces the contract.

Lavender Fog Notebook is the reference light theme; Ultraviolet Laboratory is the reference dark theme for the bounded three-series line profile, not universal accessibility, CVD or print qualification. Default theme selections are unchanged.

Opt in with Python line(..., direct_labels=True) or browser style: { directLabels: true }. Direct labels reuse the actual body marker identity beside the traces. V1 covers ordinary one-panel, 2–3-series line figures with single-line printable ASCII labels. Unsupported or insufficient layouts fall back atomically to the ordinary legend. This treatment does not support Unicode, multiline or math interpretation; printable ASCII math punctuation is literal. Active browser transitions use ordinary treatment until settled, and exports without trustworthy measurement retain the ordinary legend.

See the ordinary/direct-label example and detailed direct-label contract. The explicit rendered-series contrast audit measures caller-specified rendering facts separately from the static palette audit.

Current alpha: a3 / alpha.4

Release notes distinguish these additions from the B2 identities, series_slots, baseline direct labels and bounded reference themes already shipped in a2/alpha.3:

  • Python series_keys + keyed line_styles author rhythm independently of marker/color slots. Non-solid direct-label treatments in both runtimes add truthful line samples, subject to whole-legend fallback.
  • Opt-in Python marker_stride / browser style.markerStride reduce marker density by authored index, preserving every line observation and segment. Default cadence is unchanged.
  • Ordinary static Python lines accept NaN y as explicit breaks, preserving finite-run endpoints and isolated observations; they never reconnect or impute. Shared x stays finite, and gapped direct labels fall back.
  • Python gains measured subtitle containment, sequential heatmap colors and dataset-owned histogram medians. Browser rhythm continuity, newcomer registration and scene integrity are corrected.

See line semantics and limits. These features are available in the published versions above. No new reference-theme or accessibility qualification is implied.

Figurestead at a glance

Eight deterministic synthetic Figurestead specimens spanning line, scatter, distribution, and temporal figure families

This retained montage records earlier rendering, including prior dash-backed overflow. It is historical imagery, not a demonstration of current implicit rhythm. The montage spans temporal response, periodic series, calibration and nonlinear relationships, distributions, grouped distributions, exact temporal coverage, and sparse observations. These are deterministic synthetic design and renderer-evaluation fixtures—not scientific measurements or findings.

Beyond the montage

Populated categorical response matrix with habitat columns, response-band rows, sequential fills, percentages, and exact counts

The populated categorical response matrix preserves ten habitat columns and six response-band rows. Fill encodes bounded within-habitat share while each cell retains its percentage and exact count. The fixture is deterministic and synthetic; its project-defined bands are not ecological or regulatory thresholds. Inspect the source scene, raw observations, and derived matrices.

Python and browser

Figurestead's two surfaces share a normalized contract vocabulary, selected theme definitions, and evidence-oriented conventions. They do not promise identical pixels or identical renderer coverage.

  • Python provides the compact plotting API used by the first-success example and the existing categorical-matrix extension shown above.
  • The framework-free browser package provides its accepted core renderer registry plus the temporal extension at @figurestead/web/extensions/temporal.
  • The populated categorical matrix is currently Python-rendered; this README does not imply a browser categorical-matrix renderer exists.

Evidence and documentation

Status and limits

Figurestead is an experimental public alpha, not a mature universal plotting library.

  • The bounded persistent-identity reference profile covers the first three ordinary line series. Additional series use deterministic color/marker fallback but are not claimed to be independently distinguishable. Unconfigured lines remain solid at every series count; non-solid rhythm is authored semantics. This is published alpha.4 behavior, not a retroactive change to alpha.3.
  • Digital paper evidence records a 6.372 pt minimum label against Figurestead's internal 6 pt project floor; it is not physical-printer certification or an external typographic standard.
  • Color-vision-deficiency plates are simulations with documented model limits, not medical or universal-accessibility certification.
  • Renderer coverage differs between Python and browser runtimes, and all specimens shown here are deterministic synthetic evaluation fixtures.

Figurestead is MIT licensed. See versioning, third-party notices, and trademarks.

Metadata

Release files for figurestead 0.9.0a4

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

Source distribution (sdist)

Source distribution for figurestead 0.9.0a4
File Size Uploaded
figurestead-0.9.0a4.tar.gz 452.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for figurestead 0.9.0a4
File Interpreter ABI Platform
figurestead-0.9.0a4-py3-none-any.whl Python 3 none any Details

Total release size: 548.1 kB

Release files / figurestead-0.9.0a4.tar.gz

Download URL figurestead-0.9.0a4.tar.gz
Size 452.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f77b82db511a0df7511ca46f0f15c29e4e39672a1833b991c35de145e08d0ca5
BLAKE2b-256 checksum
How to use checksums
b486d95d6e2d6c97e94a248689b8549f0d9bb321f85d5cb037c6c8cd4971d1f1
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 4, 2026.

Transparency log

Release files / figurestead-0.9.0a4-py3-none-any.whl

Download URL figurestead-0.9.0a4-py3-none-any.whl
Size 95.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b7f8a04cbb383be2f395fabf174f65a89c83c15638d7d3cb6bdbd96cdd9f1cc8
BLAKE2b-256 checksum
How to use checksums
494e07f4ae31532ea7e626ecbe6a4f682ef73a8639a49b902fa5f6eed784e09f
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 4, 2026.

Transparency log
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