# Plugin Architecture

> A convention of building a small core that discovers and loads plugins through declared extension points.

Record: `architecture:plugin-architecture`
Kind: style
Layer: [Extensibility Core](https://banes-lab.com/records/layer/extensibility-core.md)
Severity: contextual
Scope: component, runtime, system
Canonical: https://banes-lab.com/ontology#architecture-plugin-architecture

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Batch-vs-Stream](https://banes-lab.com/records/architecture/batch-vs-stream.md) and before [Extension Points](https://banes-lab.com/records/architecture/extension-points.md).

## Repair

- Refactored by: Introduce SPI, Add Registry, Extract Extension Point
- Detected by: direct plugin imports, central switch for plugins
- Violated by: core importing plugin implementations
- Measured by: plugin isolation score
- Enforced by: plugin contract tests, dependency rules

## Requires

- [Extension Points](https://banes-lab.com/records/architecture/extension-points.md)
- [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md)
- [Discovery](https://banes-lab.com/records/lexicon/discovery.md)

## Reinforces

- [Open/Closed Principle (OCP)](https://banes-lab.com/records/architecture/open-closed.md)
- [Modularity](https://banes-lab.com/records/architecture/modularity.md)

## Enables

- [Runtime Extensibility](https://banes-lab.com/records/architecture/runtime-extensibility.md)

## Conflicts with

- [Hardcoded Extensions](https://banes-lab.com/records/lexicon/hardcoded-extensions.md)

## In tension with

- [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md)
- [Security](https://banes-lab.com/records/lexicon/security.md)

## Tensions

- [Plugin Architecture / Static Analysis](https://banes-lab.com/records/tension/plugin-architecture-static-analysis.md)
- [Plugin Architecture / Security](https://banes-lab.com/records/tension/plugin-architecture-security.md)

## Severity

- [contextual](https://banes-lab.com/records/vocabulary/severity-contextual.md)

## Category

- [Plugin / Extensibility / IoC](https://banes-lab.com/records/architecture-category/plugin-extensibility-ioc.md)

## Enabled by

- [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)
- [Composability](https://banes-lab.com/records/architecture/composability.md)
- [Replaceability](https://banes-lab.com/records/architecture/replaceability.md)
- [Self-Describing Architecture](https://banes-lab.com/records/architecture/self-describing-architecture.md)

## Linked from

- [The filesystem is the architecture](https://banes-lab.com/disciplined-methodology/build/the-filesystem-is-the-architecture.md)
- [Principles are typed](https://banes-lab.com/software-architecture/principles/principles-are-typed.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/lexicon/lexicon-category-plugin-extensibility-ioc.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)

## Evidence in the code

- [registerPage](https://banes-lab.com/source/tree/domain/registries/page.registry.ts.md)
- [presentation/records](https://banes-lab.com/anatomy/tree/folder-presentation-records.md)
- [presentation/records/records.barrel.ts](https://banes-lab.com/source/tree/presentation/records/records.barrel.ts.md)
