apigenie-catalogcatalog
catalog
apigenie-catalog lists the API specifications of a repository, and records their names and
owners in the configuration file. It is installed next to apigenie by every archive and package,
npm and Homebrew; apigenie catalog ... prints the apigenie-catalog command to run instead.
(experimental, outside the 1.0 compatibility promise)
apigenie-catalogis the first part of a catalog kept in git: release tags, pinned consumers and a catalog spanning several repositories will add options and settings.
Usage
apigenie-catalog list [DIR] [--json] [--config FILE | --no-config] [--git PROGRAM]
apigenie-catalog init [DIR] [--prune] [--dry-run] [--config FILE] [--git PROGRAM]
apigenie-catalog --version | --credits | --license [LIBRARY] | --license-list
Description
The repository that holds your specifications is the catalog: nothing is uploaded anywhere.
apigenie-catalog list works in any repository without configuration. apigenie-catalog init
writes a catalog section in apigenie.yaml for
what can’t be derived from the specifications, such as a name that stays when a file moves and an
owner.
What is a specification
apigenie-catalog list looks at the files below DIR (the current directory by default):
- in a git repository, the files git tracks or would track: committed and staged files, and new
files that no ignore rule (
.gitignore,.git/info/exclude, your global excludes file) excludes; - outside git, every file except those in directories whose name starts with a dot, and in
node_modules.
Files matching a pattern of catalog.exclude are left out. Of the others, these are
specifications:
| Format | Files |
|---|---|
| OpenAPI, AsyncAPI, Swagger | JSON and YAML files whose root has the openapi, asyncapi or swagger property |
| Protobuf | every .proto file |
| GraphQL | .graphql, .graphqls and .gql files with type definitions (operation documents are left out) |
The files of a split document that only hold components have no openapi property, so only its
root file is listed. Files that can’t be read are reported on the standard error.
What is listed
| Column | JSON | Value |
|---|---|---|
| NAME | name |
the name given in the catalog section, else derived: info.title (Orders API is orders-api), the Protobuf package (acme.pricing.v1 is acme-pricing-v1), or the file name (GraphQL) |
| FORMAT | format, specVersion |
the format and its version: OpenAPI 3.1.0, Protobuf proto3, GraphQL |
| VERSION | version |
info.version |
| OWNER | owner |
the owner given in the catalog section; the column is shown when any specification has one |
| PATH | path |
the file, relative to the root of the catalog |
| COMMIT | commit |
the last commit changing the file (short id and day); - for a file not committed yet and outside git |
$ apigenie-catalog list
NAME FORMAT VERSION PATH COMMIT
order-events AsyncAPI 3.0.0 2.0.0 apis/events.json 96175d8 2026-10-12
orders-api OpenAPI 3.1.0 1.2.0 apis/orders/openapi.yaml 4d0c2e1 2026-10-14
schema GraphQL - graphql/schema.graphql 96175d8 2026-10-12
acme-pricing-v1 Protobuf proto3 - proto/pricing.proto 96175d8 2026-10-12
Two specifications with the same derived name are reported on the standard error; name them in
the catalog section, which apigenie-catalog init does.
The root of the catalog is the directory of the configuration file (the one given with
--config, else apigenie.yaml found in DIR or a parent up to the root of the repository), else
the root of the git repository, else DIR. Paths are relative to it, in the output and in the
catalog section. DIR only narrows the search and must be inside the root.
apigenie-catalog list
| Option | Description |
|---|---|
DIR |
The directory to look for specifications in. Defaults to the current directory. |
--json |
Prints the catalog as JSON (see below). |
--config FILE |
Uses FILE instead of the configuration file found in the repository. |
--no-config |
Uses no configuration file: no names, owners or exclusions. |
--git PROGRAM |
The git program. Defaults to git. |
With --json, the output follows
apigenie-catalog-report.json:
{
"formatVersion": 1,
"root": "/home/me/specs",
"config": "/home/me/specs/apigenie.yaml",
"git": true,
"specs": [
{
"name": "orders-api",
"title": "Orders API",
"format": "openapi",
"specVersion": "3.1.0",
"version": "1.2.0",
"path": "apis/orders/openapi.yaml",
"owner": "team-commerce",
"listed": true,
"commit": {
"id": "4d0c2e1f…",
"shortId": "4d0c2e1",
"author": "Jane Doe",
"date": "2026-10-14T09:12:00+02:00",
"subject": "Add order cancellation"
}
}
],
"warnings": []
}
listed tells whether the catalog section lists the file.
apigenie-catalog init
Writes the catalog section of the configuration file from what apigenie-catalog list finds:
one entry per specification with its name, its path and owner: null, for you to fill in.
catalog:
specs:
- name: order-events
path: apis/events.json
owner: null
- name: orders-api
path: apis/orders/openapi.yaml
owner: null
- Without a configuration file, it creates
apigenie.yamlat the root of the repository (or the file given with--config). - In an existing file, it appends the section, or replaces the lines of the section, and leaves
the rest of the file as it is. A section written in flow style (
catalog: {...}) and JSON files are rewritten whole; comments are kept. - Run it again after adding specifications: new ones are added, the entries you edited stay as
they are, and entries whose files are gone are reported as “not found”.
--pruneremoves them. - Names that two specifications would share get a number:
orders-api-2.
| Option | Description |
|---|---|
DIR |
The directory to look for specifications in. Defaults to the current directory. |
--prune |
Removes the entries whose files are gone. |
--dry-run |
Prints the configuration file instead of writing it. |
--config FILE |
Writes FILE instead of the configuration file found in the repository; it is created if missing. |
--git PROGRAM |
The git program. Defaults to git. |
$ apigenie-catalog init
Updated /home/me/specs/apigenie.yaml: 2 added, 4 kept, 1 not found
added apis/billing.yaml
added apis/orders-v2.yaml
not found legacy/swagger.yaml
Remove the entries of the files that are gone with --prune.
The file is checked against the configuration schema before it
is written, and apigenie config check accepts it.
Exit status
| Status | Meaning |
|---|---|
| 0 | Success, also when files can’t be read or names are shared (reported on the standard error). |
| 2 | The directory doesn’t exist or is outside the root of the catalog, the configuration file is invalid, git fails, an unknown --license library, or a usage error. |
These are the statuses of every command (exit status).
See also
- Configuration: the
catalogsection. - changelog: the history of a specification from git.