// OPENBOX DOCS

Plugin catalog reference

Bundled catalog entries and local installation behavior.

The plugin catalog is the curated list of community plugins OpenBoxGL knows about. It is bundled with the application and refreshed from a commit-pinned repository URL when the network is available.

Catalog sources

SourcePath / URLTimeout / capFallback
RemoteThe pinned plugins/catalog.json commit on the OpenBoxGL repository20 s, 4 MiB, plus a pinned SHA-256 check on the responseBundled local catalog
Localplugins/catalog.json next to the applicationnone[]

GET /api/plugins/catalog tries the remote catalog first and falls back to the bundled file on any network, checksum, or parse failure, so the catalog always returns something valid. GET /api/v2/plugins/catalog (1.14.0+) additionally enriches every entry with installed, installed_version, and update_available, and reports the current sandbox status as a top-level response field.

The newer GET /api/v2/plugins/catalog returns the same entries enriched with installed, installed_version, and update_available for each entry, plus a top-level sandbox field describing the host sandbox status (the enrichment is per-entry, not attached to sandbox).

Bundled entries

The current bundled catalog (plugins/catalog.json) contains two documentation examples, both local_only:

idnamehooksurlnotes
openbox.library-statsLibrary Stats Hookafter_session(empty)local_only: true example
openbox.hello-paletteHello Palettecommand(empty)local_only: true example declaring one palette command

Entry fields

FieldMeaning
idPlugin id, must match the manifest pattern (^[a-z0-9][a-z0-9._-]{1,63}$)
nameDisplay name
versionVersion string
descriptionWhat the plugin does
urlDownload URL for the plugin package (ZIP)
hooksDeclared hooks
sha256Optional SHA-256 of the package; verified during download when present
local_onlyWhen true, the entry is documentation-only: installing it raises 400 "This catalog entry is documentation-only. Install local plugin packages manually."

Installing from the catalog

POST /api/plugins/catalog/install with {"id": "<catalog id>"}:

  1. Fetches the current catalog.
  2. Looks up the id; unknown ids raise 400 "Unknown catalog plugin."
  3. Downloads the package into a temporary directory with a 128 MiB cap, 120-second timeout, and SHA-256 verification when the entry provides sha256.
  4. Installs it with the normal plugin installer (safe extraction, staging, rollback).

The plugin is then listed by GET /api/plugins and runs its declared hooks.

Security notes

  • Catalog entries are still third-party code. The catalog URL and sha256 only ensure the bytes you download match what the catalog advertises; they do not make the plugin trustworthy. Review plugin.py after install (it lives in plugins/<id>/).
  • The remote catalog is fetched over HTTPS from the OpenBoxGL repository, so the trust chain is the repository's.
  • If the network is unavailable or the remote catalog is unreachable, installs fall back to the bundled catalog (which has no downloadable entries today), and manual ZIP/directory installs remain the reliable path.