On this page
Compatibility¶
Stable Inklet 4.10.0 uses the environments and rendering paths below. Experimental capabilities are identified separately. The matrix distinguishes installed-package checks from full integration tests.
Test coverage¶
| Area | Automated coverage | Limits |
|---|---|---|
Core and render wheels |
Ubuntu 24.04 / Python 3.11, 3.12, 3.13; Windows 2022 and macOS 14 / Python 3.12 | Installed-package smoke checks on Windows/macOS; full suite on Linux |
| Complete figures | Linux, pinned Python dependencies, DejaVu/Noto fonts, resvg, Chromium and Poppler | Pixel baselines depend on those fonts and renderers |
| Complete Blender scenes | Linux CPU, Blender 4.2.23 and 4.5.13 LTS | Other Blender builds/platforms are not covered by scene CI |
| Cycles GPU | Local Blender 4.5.13 CUDA check on an RTX 5090 Laptop GPU | GPU CI is unavailable; OptiX, HIP, oneAPI and Metal are not verified on hardware |
| Vector line-art baking | Blender 4.2 LTS, locally tested on Linux | Newer Grease Pencil APIs are incompatible with this legacy backend |
| Native vector 3D | Core package and full figure tests | No Blender or GPU required |
The release workflow is the current source of automated coverage. Python 3.11 is the minimum; later versions outside the matrix are not yet verified. A successful smoke test checks installation and representative exports, not every OS-specific behavior or font substitution.
Blender CI downloads fixed builds from the official release archive and verifies pinned SHA-256 hashes. It requires the requested version before running tests, so a failed installation cannot turn the scene tests into a green skipped run. Each version also creates and renders all three templates from an installed wheel in an isolated environment.
API and saved-file policy¶
4.0.0 released the supported scope below, frozen during RC1; 4.1.0 and 4.2.0 add
plot types within it, and 4.3 moves four packages out of inklet.experimental.
The same acceptance, distribution and performance gates apply to later releases.
- The documented top-level
inkletauthoring/export API remains supported. Internal modules, names beginning with_and generated output bytes are not compatibility interfaces. Existing 3.1 recipes do not require a new API. - From 4.3, the stable packages below are covered by the same policy as
top-level
inklet. Their public names are those in each package's__all__, listed in the API reference.import inkletdoes not import them; import each package you use.
| Package | Contents | Earlier path |
|---|---|---|
inklet.volume |
Calibrated volumes, sections, slabs, regions, channels, label contours and measurements, TIFF import | inklet.experimental.volume, .sections, .slabs, .regions, .channels, .contours, .measurements, .tiff |
inklet.selection |
KeyedTable, SelectionState, RebasedSelection |
inklet.experimental.selection |
inklet.project |
FigureProject, Asset, AssetManifest, EntityMap, ExportDriftWarning |
inklet.experimental.project (and .assets, .identity) |
inklet.editor |
LayoutEditor and its saved layout overrides |
inklet.experimental.layout_editor |
- The earlier
inklet.experimentalpaths stay as aliases through 4.x and return the same objects. From 4.4, importing one raisesinklet._compat.InkletDeprecationWarning, aDeprecationWarningsubclass that names the new path. They are removed in 5.0. The compiled scene viewer runtime moved to the privateinklet.render._viewer; useRenderScene.to_html(). The layout editor's HTTP/JSON protocol andsnapshot()payload are private; the class and saved overrides are the contract. - Deprecations (4.4). 4.4 adds American-spelling names and one keyword per
idea on
Panel:color=,name=andsize=. The old names keep working and warn once per call. See the rename table. A deprecated name keeps its released call shape until 5.0, and the compatibility checker still verifies it. Giving an old and a new spelling together is aTypeError. Inklet's own code and tests use only the new names; the test suite turnsInkletDeprecationWarninginto an error. - The rest of
inklet.experimentalremains opt-in: browser documents (browser), mesh and grid fields (fields,grid), engineering drawings (engineering, deprecated in 4.4 and removed in 5.0), image measurement (measurement) and the figure planner (figure_planner,planner_geometry).BrowserScatteris deprecated in favour ofBrowserFigure. Their signatures, report schemas and saved formats may change; keep an exact package pin and source recipe for archived work. See experimental features. tools/check_compatibility.pycompares public call shapes with inventories captured from the released 3.1.0 and 4.2.0 wheels. The 4.2 baseline includes every publicinklet.experimentalmodule, so the aliases above are checked too. It checks names, parameter kinds, positional order and required arguments, not defaults or rendering.- Moving a package does not change its saved formats: schema identifiers such as
inklet.selection/0.1andinklet.figure-project/0.1are unchanged in 4.3. - Readers validate schema identifiers and reject unsupported versions. A future incompatible format needs a new schema identifier and migration guidance; changing the identifier by hand is not a migration.
- A readable schema does not guarantee identical rendering. Fonts, external assets, renderers and trusted recipes remain part of a reproducible project. Export caches are disposable; source data and saved decisions are not.
| Saved content | Current writer | Accepted input |
|---|---|---|
| Composition edits | inklet.composition-layout/0.5 |
0.1–0.5, with controls restricted by schema version; 0.1–0.4 warn from 4.4, so re-save them |
| Keyed selection | inklet.selection/0.1 |
0.1, with table identity and data digest validation |
| Linked browser view | inklet.browser-view/0.1 |
0.1, subject to view/source validation |
| Asset inventory | inklet.assets/0.1 |
0.1, with contained paths, size and SHA-256 checks |
| Entity correspondence | inklet.entities/0.1 |
0.1, explicit source-local IDs mapped to canonical entities |
| Figure project | inklet.figure-project/0.1 |
0.1, verified inputs and an explicitly supplied trusted factory |
The supported composition inspector edits placement, dimensions, labels, registered styles and native-camera parameters. Linked cross-content views use explicit keyed tables and the documented drawing, labelled-image, mesh-field and grid-field adapters. Each adapter retains its own picking and geometry limits.
Individual axis-label editing, direct camera dragging, depth-aware browser 3D picking, interactive volumes, additional projections and broader GPU primitives are deferred beyond 4.0. Arbitrary Python object serialization and general geometry constraints are outside the project-bundle contract.
See migration for existing recipes and saved files.
Optional dependencies¶
| Capability | Requirement |
|---|---|
| Plots, diagrams, SVG/PDF, native 3D | Core package and a usable installed font |
| PNG, explicit masks and rasterization | render extra |
| Raster images in PDF | Pillow, included in render and images |
Pass access with value() |
Core package; no NumPy |
Pass arrays and .npy export |
NumPy, included in images and three |
inklet.volume: microscopy, TIFF and label tables |
volume extra (NumPy, SciPy, scikit-image, Pillow, tifffile) |
| Additional mesh formats/repair | three extra |
.blend authoring/rendering |
Separate Blender installation; render extra for figure exports |
| Independent PDF preview | Poppler; optional with compare_pdf=False |
| Chromium preview | Separate Chrome/Chromium; explicitly selected |
Importing Inklet and reading scene_templates() does not discover or start
Blender. Scene creation and rendering run Blender in a separate process.
Known boundaries¶
Table adapters¶
The pandas and Polars adapters (KeyedTable.from_pandas,
from_polars) arrived in the 4.0 release and are
part of the stable inklet.selection from 4.3; they were not part of 3.1.0. Their pandas and polars extras are separate
from core dependencies. The adapter CI jobs use Linux/Python 3.12 with pandas
2.2.0 / Polars 1.0.0 and the versions pinned in requirements-tables.txt.
Both paths check scalar/identity contracts and saved-state SVG reconstruction.
The core wheel checks that neither integration is required or imported.
Browser workflows and local editor¶
Inklet 4.0 includes standalone linked HTML and a Python-backed composition editor. The supported browser target is Chrome/Chromium on Linux; release evidence uses pinned Chrome 145.0.7632.45. Keyboard controls and data-table selection are automated acceptance checks, not a claim of a complete accessibility audit. Firefox, Safari, mobile browsers and browser interaction on Windows/macOS are not covered by that integration matrix. Windows/macOS wheel checks verify installed editor assets and representative static exports; they are not browser certification.
The composition editor requires a running local Python session and binds to loopback. Its saved choices are JSON overrides for an existing Python recipe, not a standalone project. Linked HTML has a separate saved-selection format. See the editor and saved layouts.
Rendering¶
The legacy vector line-art backend uses Blender's pre-4.3 Grease Pencil API.
Blender documents that incompatible transition in its
migration guide.
Inklet reports the required 4.2 version before starting a new line-art bake.
This is separate from complete .blend scene rendering and the raster sketch
style, both tested with 4.5.
Cycles GPU selection depends on the installed Blender build and drivers.
AUTO falls back when no usable GPU is discovered; it does not conceal a render
failure by retrying on CPU. EEVEE needs a working graphics context and has no
headless CI guarantee. See device behavior.
Depth-tested overlays sample the saved depth image. Glass, thin geometry, silhouettes and object-index masks have documented precision limits. Scene masks are not Cryptomatte. User compositors, embedded Python execution, animation/video export and arbitrary simulation bindings are outside the 3.1 feature set.
Template creation preserves existing files on failure. Its default atomic
no-overwrite commit requires filesystem hard-link support; explicit
overwrite=True uses atomic replacement. See template creation.
Release acceptance¶
Before a stable tag:
- Require green figure, wheel and Blender jobs on the exact release commit.
- Build the wheel and source archive, check metadata with Twine, and run isolated wheel checks against those files. Build the wheel from the source archive too.
- Review the rendered examples and verify
latestdocs point to the release commit. Follow the 4.0 migration guidance. - Freeze the release files with
SHA256SUMS, then attach those exact files to the release. The publishing workflow is a separate manual step.
Package publication is separate from validation. These checks do not upload anything to PyPI.