Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@ The format is (loosely) based on [Keep a Changelog](http://keepachangelog.com/)

### Updated

## [v4.4.0] - 2026-05-11

### Added

- support for --recursive option for `fast` command to validate static STAC catalogs. [#294](https://github.com/stac-utils/stac-validator/pull/294)
- support for --api option for `fast` command to validate STAC API endpoints. [#294](https://github.com/stac-utils/stac-validator/pull/294)
- support for --limit option for `fast` command to cap the number of STAC objects validated. [#294](https://github.com/stac-utils/stac-validator/pull/294)
- Added `run_dict` method to `FastValidator` for direct in-memory dictionary validation without file/network loading. [#294](https://github.com/stac-utils/stac-validator/pull/294)


## [v4.3.0] - 2026-05-08

### Added
Expand Down
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,12 @@ Options:
-q, --quiet Suppress individual item logs.
-v, --verbose Show full validation logs for all items. By default, only
invalid items are shown.
-r, --recursive Recursively validate all child catalogs, collections,
and items.
-a, --api Validate a STAC API catalog recursively (follows data,
child, item, and items links).
--limit INTEGER RANGE Limit number of STAC objects to validate.
[x>=1]
--help Show this message and exit.
```

Expand Down Expand Up @@ -513,6 +519,8 @@ The `fast` command provides ultra-high-speed validation using `fastjsonschema` w
- **Multi-tier caching:** RAM → Disk → Network with automatic fallback
- **Local schema storage:** Schemas cached locally under `local_schemas/.schemas` directory for instant reuse
- **Automatic detection:** Detects STAC type (Item, Collection, Catalog, FeatureCollection) automatically
- **Recursive traversal:** Supports `--recursive` for local catalog/collection graphs
- **STAC API traversal:** Supports `--api` to follow STAC API data, child, item, and items links
- **Detailed metrics:** Shows setup time, execution time, and cache hit status for each item
- **Error grouping:** Groups validation errors by type and shows affected items

Expand Down Expand Up @@ -541,8 +549,17 @@ $ stac-validator fast item.json --quiet
# Show detailed output for all items (default shows first 5)
$ stac-validator fast collection.json --verbose

# Validate only first 25 objects in a large FeatureCollection
$ stac-validator fast collection.json --limit 25

# Recursively validate a local catalog graph
$ stac-validator fast catalog.json --recursive

# Recursively validate a STAC API root endpoint
$ stac-validator fast https://api.example.com --api

# Combine options
$ stac-validator fast collection.json --verbose --quiet # Quiet takes precedence
$ stac-validator fast collection.json --verbose --limit 50
```

**Example Output**
Expand Down Expand Up @@ -868,6 +885,10 @@ import json
fv = FastValidator("large_collection.json", quiet=True)
fv.run()

# Optionally cap validation to the first N objects
fv_limited = FastValidator("large_collection.json", quiet=True, limit=100)
fv_limited.run()

# Access validation results via the message attribute
print(json.dumps(fv.message, indent=2))

Expand Down
6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"

[project]
name = "stac_valid"
version = "4.3.0"
version = "4.4.0"
description = "A package to validate STAC files"
authors = [
{name = "James Banting"},
{name = "Jonathan Healy", email = "jon@healy-hyperspatial.dev"}
{name = "Jonathan Healy", email = "jon@healy-hyperspatial.dev"},
{name = "James Banting"}
]
maintainers = [
{name = "Jonathan Healy", email = "jon@healy-hyperspatial.dev"},
Expand Down
Loading