ShapeWitness
Small JSONL fixtures that show the shapes your code needs to handle.
head -n 20 often gives you twenty happy-path rows. ShapeWitness keeps the records
with missing fields, nulls, empty collections, and mixed types, then explains why
each row was selected.
- Real records: original bytes, numeric precision, whitespace, and line endings
- Explainable coverage: observed structural features, uncovered gaps, source hashes
- Reproducible and local: deterministic selection, bounded disk spooling, no network calls
Install
Python 3.10+ with SQLite support. Available on PyPI:
python -m pip install shapewitness
# Isolated CLI alternatives:
uvx shapewitness --help
pipx install shapewitness
For a source checkout, use python -m pip install .. Pin a version or reviewed
commit for reproducibility. See release guidance.
Ten-second demo
From a checkout:
shapewitness examples/events.jsonl -n 4 --report coverage.json > fixture.jsonl
# shapewitness: 4/6 rows; 19/19 observed features; complete
Lines 1, 3, 4, and 5 survive. See the input,
selected fixture, and explanation.
Use --require-complete to fail CI when the selected rows leave observed features uncovered.
Read next
| I want to… | Start here |
|---|---|
| Use the CLI, pipes, or Python API | Usage |
| Build pytest fixtures, test ETL, or reproduce an importer bug | Recipes |
| Inspect a reproducible head/random comparison | Synthetic benchmark |
| Build a wheel or prepare a release | Release readiness |
| Understand null, missing, arrays, and tie-breaking | Feature model |
| Verify selected bytes and coverage explanations | Provenance |
| Check strict input rules, resource limits, and privacy | Limits & privacy |
| Understand the implementation or contribute | Architecture · Development |
| Work on this repository with an agent | Agent guide |
| Compare the scope with JSONLKit and jselect | Related tools |
Know the boundaries: this is greedy structural coverage, not a statistically representative sample, an optimal minimum set, or a schema guarantee. Selected rows retain private data; reports can expose property names. Details.
Documentation index · Contributing · Security · Changelog · MIT license
Metadata
Release files for shapewitness 0.1.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 | |
|---|---|---|---|
| shapewitness-0.1.1.tar.gz | 65.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shapewitness-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.8 kB
Release files / shapewitness-0.1.1.tar.gz
| Download URL | shapewitness-0.1.1.tar.gz |
|---|---|
| Size | 65.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
062fed705089eb6916288424c4fd909afb32150a7b87489976ebf15e69b5a180
|
|
BLAKE2b-256 checksum How to use checksums |
ca2a8d96e35470f4007b6fdfc86cb5fc58e8e4b32ad1fc407eea26bd3cd9a1a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / shapewitness-0.1.1-py3-none-any.whl
| Download URL | shapewitness-0.1.1-py3-none-any.whl |
|---|---|
| Size | 13.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
12111bb3d5d00ad4d8b3458d22d7280adec1d1b7d1bf1741294adca7c0cace6c
|
|
BLAKE2b-256 checksum How to use checksums |
7df4fdbc0cdaeb990db00b7e767031d5db8ab40c35d566080f979fb73cfe5a11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|