npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@geonovum/ogc-checker

v1.1.0

Published

[![npm](https://img.shields.io/npm/v/@geonovum/ogc-checker)](https://www.npmjs.com/package/@geonovum/ogc-checker)

Readme

Geonovum OGC Checker

npm

Validates JSON-FG documents and OGC API endpoints against OGC specifications.

Built on @geonovum/standards-checker; see its documentation for the validation engine, CLI toolkit, and web UI framework.

Release notes are in CHANGELOG.md; see Versioning & releasing for how it is produced.

Demo: https://geonovum.github.io/ogc-checker/

CLI

Quick start (via npx)

# From a local file
npx @geonovum/ogc-checker@latest validate --standard json-fg --input ./data/spec.json

# From a URL
npx @geonovum/ogc-checker@latest validate --standard json-fg --input https://example.com/spec.json

# From stdin
cat spec.json | npx @geonovum/ogc-checker@latest validate --standard json-fg

Install globally

npm install -g @geonovum/ogc-checker@latest
ogc-checker validate --standard json-fg --input ./data/spec.json

From a local clone

pnpm install
pnpm build:cli
node dist/cli.mjs validate --standard json-fg --input ./data/spec.json

Available standards: json-fg, ogc-api-features, ogc-api-processes, ogc-api-records. Each currently ships a single version, so --version is optional and defaults to it (ogc-api-processes is 2.0, a draft).

The old --ruleset <slug> flag still works as a deprecated alias (it prints a warning on stderr and resolves the old slug to the same standard/version): --ruleset json-fg == --standard json-fg --version 1.0.

CLI flags

| Flag | Description | Default | | ------------------- | ------------------------------------------------- | ------------------ | | --standard <slug> | Standard to validate against | (required) | | --version <id> | Version of the standard | latest final | | --ruleset <slug> | Deprecated alias for --standard/--version | — | | --input <file\|-> | Input file, URL, or - for stdin | - | | --format <fmt> | Output: table, json | table | | --fail-on <level> | Exit code policy: none, warn, error | error |

Exit codes: 0 = pass, 1 = failed per --fail-on policy, >1 = unexpected error.

Specifications

Each specification below maps to a standard in the checker; its requirement table lists the conformance classes of that standard's current version. Pick the standard in the header, then the version:

| Standard (--standard) | Version (--version) | Status | Covers | | ----------------------- | --------------------- | ------ | --------------------------------------------------------- | | json-fg | 1.0.0 | final | JSON-FG | | ogc-api-features | 1.0.1 | final | OGC API - Features Part 1 (Core) and Part 2 (CRS by ref.) | | ogc-api-processes | 2.0.0 | draft | OGC API - Processes Part 1 (Core) | | ogc-api-records | 1.0.0 | final | OGC API - Records Part 1 (Core) |

JSON-FG

Version: 1.0.0 — Specification

| Requirement | Testable | Tested | Remarks | | ------------------------------------------ | :------: | :----: | ----------------------------------- | | /req/core/schema-valid | Yes | Yes | | | /req/core/metadata | Yes | Yes | | | /req/core/instant | Yes | Yes | Covered by /req/core/schema-valid | | /req/core/interval | Yes | Yes | | | /req/core/instant-and-interval | Yes | Yes | | | /req/core/utc | Yes | Yes | Covered by /req/core/schema-valid | | /req/core/coordinate-dimension | Yes | Yes | | | /req/core/geometry-wgs84 | Yes | Yes | | | /req/core/geometry-no-jsonfg-extension | Yes | Yes | Covered by /req/core/schema-valid | | /req/core/valid-geometry | Yes | No | | | /req/core/place-geometries | Yes | Yes | | | /req/core/same-crs | Yes | Yes | Covered by /req/core/schema-valid | | /req/core/fallback | Yes | Yes | | | /req/core/axis-order | No | No | | | /req/polyhedra/metadata | Yes | Yes | | | /req/polyhedra/coordinates | Yes | Yes | | | /req/polyhedra/valid-geometry | Yes | No | | | /req/prisms/metadata | Yes | Yes | | | /req/prisms/coordinates | Yes | Yes | | | /req/circular-arcs/metadata | Yes | Yes | | | /req/circular-arcs/valid-geometry | Yes | No | | | /req/measures/metadata | Yes | Yes | | | /req/measures/coordinates | Yes | Yes | | | /req/measures/sub-geometries | Yes | Yes | Covered by /req/core/schema-valid | | /req/types-schemas/metadata | Yes | Yes | | | /req/types-schemas/feature-type | Yes | Yes | | | /req/types-schemas/geometry-dimension | Yes | Yes | | | /req/types-schemas/feature-schemas | No | No | Referenced schemas not dereferenced | | /req/types-schemas/single-feature-schema | Yes | Yes | | | /req/profiles/rfc7946 | No | No | Profile negotiation (API layer) | | /req/profiles/jsonfg | No | No | Profile negotiation (API layer) | | /req/profiles/jsonfg-plus | No | No | Profile negotiation (API layer) | | /req/api/profile-parameter | No | No | Web API behavior, not a document |

OGC API - Features - Part 1: Core

Version: 1.0.1 — Specification

| Requirement | Testable | Tested | Remarks | | ------------------------------- | :------: | :----: | ------- | | /req/core/root-op | Yes | Yes | | | /req/core/root-success | Yes | Yes | | | /req/core/conformance-op | Yes | Yes | | | /req/core/conformance-success | Yes | Yes | | | /req/core/fc-md-op | Yes | Yes | | | /req/core/fc-md-success | Yes | Yes | | | /req/core/sfc-md-op | Yes | Yes | | | /req/core/sfc-md-success | Yes | Yes | | | /req/core/fc-op | Yes | Yes | | | /req/core/fc-response | Yes | Yes | | | /req/core/fc-limit-definition | Yes | Yes | | | /req/core/fc-bbox-definition | Yes | Yes | | | /req/core/fc-time-definition | Yes | Yes | | | /req/core/f-op | Yes | Yes | | | /req/core/f-response | Yes | Yes | | | /req/oas30/oas-definition-2 | Yes | Yes | |

OGC API - Features - Part 2: Coordinate Reference Systems by Reference

Version: 1.0.1 — Specification

| Requirement | Testable | Tested | Remarks | | ----------------------------------------- | :------: | :----: | --------------------------------------------- | | /req/crs/crs-uri | No | No | | | /req/crs/fc-md-crs-list | Yes | Yes | | | /req/crs/fc-md-storageCrs | No | No | | | /req/crs/fc-md-storageCrs-valid-value | Yes | Yes | | | /req/crs/fc-md-crs-list-global | No | No | | | /req/crs/fc-bbox-crs-definition | Yes | Yes | | | /req/crs/fc-bbox-crs-valid-value | Yes | Yes | Tests the presence of a 400 response. | | /req/crs/fc-bbox-crs-valid-defaultValue | Yes | Yes | Covered by /req/crs/fc-bbox-crs-definition. | | /req/crs/fc-bbox-crs-action | No | No | | | /req/crs/fc-crs-definition | Yes | Yes | | | /req/crs/fc-crs-valid-value | No | No | | | /req/crs/fc-crs-default-value | Yes | Yes | Covered by /req/crs/fc-crs-definition. | | /req/crs/fc-crs-action | No | No | | | /req/crs/geojson | No | No | | | /req/crs/ogc-crs-header | Yes | Yes | | | /req/crs/ogc-crs-header-value | No | No | |

OGC API - Processes - Part 1: Core

Version: 2.0 (Draft) — Specification

| Requirement | Testable | Tested | Remarks | | --------------------------------------------------------------- | :------: | :----: | ------- | | /req/core/landingpage-op | Yes | Yes | | | /req/core/landingpage-success | Yes | Yes | | | /req/core/api-definition-op | No | No | | | /req/core/api-definition-success | No | No | | | /req/core/conformance-op | Yes | Yes | | | /req/core/conformance-success | Yes | Yes | | | /req/core/http | No | No | | | /req/core/process-list-op | Yes | Yes | | | /req/core/pl-limit-definition | Yes | Yes | | | /req/core/pl-limit-response | No | No | | | /req/core/process-list-success | Yes | Yes | | | /req/core/pl-links | No | No | | | /req/core/process-summary-links | No | No | | | /req/core/process-description-op | Yes | Yes | | | /req/core/process-description-success | Yes | Yes | | | /req/core/process-exception-no-such-process | Yes | Yes | | | /req/core/process-execute-op | Yes | Yes | | | /req/core/process-execute-request | Yes | Yes | | | /req/core/process-execute-default-execution-mode | No | No | | | /req/core/process-execute-auto-execution-mode | No | No | | | /req/core/process-execute-input-array | No | No | | | /req/core/process-execute-input-inline-object | No | No | | | /req/core/process-execute-input-multiple-types | No | No | | | /req/core/process-execute-input-inline-binary | No | No | | | /req/core/process-execute-input-inline-bbox | No | No | | | /req/core/process-execute-input-validation | No | No | | | /req/core/process-execute-omitted-outputs | No | No | | | /req/core/process-execute-empty-outputs | No | No | | | /req/core/process-execute-sync-one | Yes | Yes | | | /req/core/process-execute-sync-one-default-content | No | No | | | /req/core/process-execute-sync-one-multi-valued-json | No | No | | | /req/core/process-execute-sync-many-json | Yes | Yes | | | /req/core/process-execute-success-sync-outputs-omitted | No | No | | | /req/core/process-execute-success-sync-empty-outputs | No | No | | | /req/core/job-results-success-sync | No | No | | | /req/core/process-execute-success-async | Yes | Yes | | | /req/core/process-execute-success-async-outputs | No | No | | | /req/core/process-execute-success-async-outputs-Nth | No | No | | | /req/core/process-execute-success-async-outputs-empty | No | No | | | /req/core/process-execute-success-async-outputs-omitted | No | No | | | /req/core/job-op | Yes | Yes | | | /req/core/job-success | Yes | Yes | | | /req/core/job-exception-no-such-job | Yes | Yes | | | /req/core/job-results-op | Yes | Yes | | | /req/core/job-results-param-outputs | Yes | Yes | | | /req/core/job-results-param-outputs-response | No | No | | | /req/core/job-results-profile | No | No | | | /req/core/job-result-op | Yes | Yes | | | /req/core/job-result-op-Nth | Yes | No | | | /req/core/job-result-op-0th | Yes | Yes | | | /req/core/job-results-async-one | Yes | Yes | | | /req/core/job-results-async-one-Nth | No | No | | | /req/core/job-results-async-one-multi-valued | No | No | | | /req/core/job-results-async-many | Yes | Yes | | | /req/core/job-results-exception-invalid-query-parameter-value | Yes | Yes | | | /req/core/job-results-exception-no-such-output | Yes | Yes | | | /req/core/job-results-exception-no-such-job | Yes | Yes | | | /req/core/job-results-exception-results-not-ready | Yes | Yes | | | /req/core/job-results-exception-results-not-available | Yes | Yes | | | /req/core/job-results-failed | Yes | Yes | | | /req/core/test-process | No | No | | | /req/ogc-process-description/json-encoding | Yes | Yes | | | /req/ogc-process-description/links | No | No | | | /req/ogc-process-description/inputs-def | No | No | | | /req/ogc-process-description/data-classes | No | No | | | /req/ogc-process-description/data-access-apis | No | No | | | /req/ogc-process-description/input-def | No | No | | | /req/ogc-process-description/input-multiple-types | No | No | | | /req/ogc-process-description/value-passing | No | No | | | /req/ogc-process-description/execution-unit-requirements | No | No | | | /req/ogc-process-description/outputs-def | No | No | | | /req/ogc-process-description/output-def | No | No | | | /req/ogc-process-description/output-multiple-types | No | No | | | /req/job-list/job-list-op | Yes | Yes | | | /req/job-list/type-definition | Yes | Yes | | | /req/job-list/type-response | No | No | | | /req/job-list/processID-mandatory | Yes | No | | | /req/job-list/processID-definition | Yes | Yes | | | /req/job-list/processid-response | No | No | | | /req/job-list/status-definition | Yes | Yes | | | /req/job-list/status-response | No | No | | | /req/job-list/datetime-definition | Yes | Yes | | | /req/job-list/datetime-response | No | No | | | /req/job-list/duration-definition | Yes | Yes | | | /req/job-list/duration-response | No | No | | | /req/job-list/limit-definition | Yes | Yes | | | /req/job-list/limit-response | No | No | | | /req/job-list/job-list-success | Yes | Yes | | | /req/job-list/links | No | No | | | /req/json/definition | Yes | Yes | |

OGC API - Records - Part 1: Core

Version: 1.0 (Draft) — Specification

| Requirement | Testable | Tested | Remarks | | ---------------------------------- | :------: | :----: | ------- | | /req/json/conformance | No | No | | | /req/json/record-response | Yes | Yes | | | /req/json/record-content | Yes | Yes | | | /req/json/record-content-profile | No | No | | | /req/json/collection-response | Yes | Yes | | | /req/json/catalog-content | Yes | Yes | |

Development

Prerequisites

  • Node.js 24+
  • pnpm 10+

Setup

pnpm install

Commands

| Command | Description | | ---------------- | ------------------------------------------ | | pnpm dev | Vite dev server with hot reload | | pnpm build | Full build: tsc + CLI bundle + vite webapp | | pnpm build:cli | Build only the CLI binary (dist/cli.mjs) | | pnpm test | Vitest in watch mode | | pnpm test run | Vitest single run | | pnpm lint | Check for lint and formatting issues | | pnpm lint:fix | Auto-fix lint and formatting issues |

Run a single test file:

npx vitest run src/standards/json-fg/rulesets/core.test.ts

Versioning & releasing

Versioning, the changelog, and publishing are driven by Changesets. Describing a change is decoupled from cutting a release:

  1. Add a changeset with your change. Run pnpm changeset, pick the bump (major / minor / patch), and write a one-line summary. This creates a .changeset/<name>.md file — commit it with your PR. Omit only for changes that don't affect the published package (CI, internal docs, tests).

  2. Cut the release. Run pnpm version-packages (alias for changeset version). It consumes the pending .changeset/*.md files, bumps package.json, and prepends the summaries to CHANGELOG.md. Review and commit the result. Don't hand-edit the version field — Changesets owns it.

  3. Publish. Tag the released version and push; the CI workflow verifies package.json matches the tag, builds, tests, publishes to npm, and deploys to GitHub Pages:

    git tag v1.1.0
    git push --tags

    pnpm release (pnpm build && changeset publish) publishes to npm locally if you need to bypass the workflow (it does not deploy Pages).

License

EUPL-1.2