# Extension points — semantic-release/semantic-release

> Canonical page: https://codevetter.com/unpack/semantic-release/extension-points

# Extension points — semantic-release/semantic-release

Scanned commit e8c2436e5704a6d1fa5b4aa69238f50edbe586bf (2026-09-21). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The lifecycle definition table is the core extension registry. Users extend behavior through package plugins, inline hook functions, and shareable configuration modules. Branch policy and typed API contracts provide separate extension surfaces, with explicit validation and result transformation rules.
- PLUGINS_DEFINITIONS registers verifyConditions, analyzeCommits, verifyRelease, generateNotes, prepare, publish, addChannel, success, and fail, with per-stage required/dryRun/validation/pipeline rules. — [lib/definitions/plugins.js#L9-L108](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/definitions/plugins.js#L9-L108)
- A configured plugin object contributes only exports matching registered lifecycle names; each contributed function receives immutable pluginName metadata and retains list order. — [lib/plugins/index.js#L13-L30](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/index.js#L13-L30)
- Plugin configuration accepts names, name/config tuples, and path-bearing objects; API callers can supply inline plugin objects, while individual stages accept functions. — [lib/plugins/utils.js#L8-L38](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/utils.js#L8-L38) [lib/plugins/utils.js#L69-L80](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/utils.js#L69-L80) [lib/plugins/index.js#L17-L28](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/index.js#L17-L28)
- loadPlugin resolves relative to a shareable configuration when recorded, otherwise from core or cwd, and supports function inputs, default exports, and ESM named exports. — [lib/plugins/utils.js#L50-L66](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/utils.js#L50-L66) [lib/get-config.js#L38-L54](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/get-config.js#L38-L54)
- Stage-specific options override collected plugin hooks; a plain options object without path is merged into existing stage plugin configurations before normalization. — [lib/plugins/index.js#L46-L72](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/index.js#L46-L72)
- pipeline exposes settleAll, getNextInput, and transform; definitions use these for aggregated verification errors, accumulated notes, prepare HEAD refresh, and enriched publication results. — [lib/plugins/pipeline.js#L28-L58](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/pipeline.js#L28-L58) [lib/definitions/plugins.js#L10-L13](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/definitions/plugins.js#L10-L13) [lib/definitions/plugins.js#L37-L81](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/definitions/plugins.js#L37-L81)
- Shareable configuration modules merge in sequence and record plugin origins; branch patterns can interpolate name into properties, while branch definitions provide classification and validation hooks. — [lib/get-config.js#L31-L59](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/get-config.js#L31-L59) [lib/branches/expand.js#L8-L18](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/branches/expand.js#L8-L18) [lib/definitions/branches.js#L5-L21](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/definitions/branches.js#L5-L21)
- index.d.ts exposes stage-specific contexts, branch/release types, configuration, and the asynchronous API signature; extensions changing runtime shapes should also inspect these public declarations. — [index.d.ts#L54-L135](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.d.ts#L54-L135) [index.d.ts#L441-L447](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.d.ts#L441-L447) [index.d.ts#L525-L565](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.d.ts#L525-L565) [index.d.ts#L694-L723](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.d.ts#L694-L723)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
