{
  "code": null,
  "collection": "architecture",
  "href": "https://banes-lab.com/ontology#architecture-runtime-extensibility",
  "id": "runtime-extensibility",
  "kind": "quality-attribute",
  "layer": {
    "href": "https://banes-lab.com/ontology/schema#layer-extensibility-core",
    "json": "https://banes-lab.com/json/records/layer/extensibility-core",
    "label": "Extensibility Core",
    "markdown": "https://banes-lab.com/records/layer/extensibility-core.md",
    "ref": "layer:extensibility-core"
  },
  "name": "Runtime Extensibility",
  "ref": "architecture:runtime-extensibility",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-extension-points",
          "json": "https://banes-lab.com/json/records/architecture/extension-points",
          "label": "Extension Points",
          "markdown": "https://banes-lab.com/records/architecture/extension-points.md",
          "ref": "architecture:extension-points"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-stable-interfaces",
          "json": "https://banes-lab.com/json/records/architecture/stable-interfaces",
          "label": "Stable Interfaces",
          "markdown": "https://banes-lab.com/records/architecture/stable-interfaces.md",
          "ref": "architecture:stable-interfaces"
        }
      ],
      "relation": "requires"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-plugin-architecture",
          "json": "https://banes-lab.com/json/records/architecture/plugin-architecture",
          "label": "Plugin Architecture",
          "markdown": "https://banes-lab.com/records/architecture/plugin-architecture.md",
          "ref": "architecture:plugin-architecture"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-open-closed",
          "json": "https://banes-lab.com/json/records/architecture/open-closed",
          "label": "Open/Closed Principle (OCP)",
          "markdown": "https://banes-lab.com/records/architecture/open-closed.md",
          "ref": "architecture:open-closed"
        }
      ],
      "relation": "reinforces"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-capability-addition-without-core-modification",
          "json": "https://banes-lab.com/json/records/lexicon/capability-addition-without-core-modification",
          "label": "Capability Addition without Core Modification",
          "markdown": "https://banes-lab.com/records/lexicon/capability-addition-without-core-modification.md",
          "ref": "lexicon:capability-addition-without-core-modification"
        }
      ],
      "relation": "enables"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-closed-static-core",
          "json": "https://banes-lab.com/json/records/lexicon/closed-static-core",
          "label": "Closed Static Core",
          "markdown": "https://banes-lab.com/records/lexicon/closed-static-core.md",
          "ref": "lexicon:closed-static-core"
        }
      ],
      "relation": "conflicts-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-predictability",
          "json": "https://banes-lab.com/json/records/architecture/predictability",
          "label": "Predictability",
          "markdown": "https://banes-lab.com/records/architecture/predictability.md",
          "ref": "architecture:predictability"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-security",
          "json": "https://banes-lab.com/json/records/lexicon/security",
          "label": "Security",
          "markdown": "https://banes-lab.com/records/lexicon/security.md",
          "ref": "lexicon:security"
        }
      ],
      "relation": "tensions-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#tension-predictability-runtime-extensibility",
          "json": "https://banes-lab.com/json/records/tension/predictability-runtime-extensibility",
          "label": "Runtime Extensibility / Predictability",
          "markdown": "https://banes-lab.com/records/tension/predictability-runtime-extensibility.md",
          "ref": "tension:predictability-runtime-extensibility"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#tension-runtime-extensibility-security",
          "json": "https://banes-lab.com/json/records/tension/runtime-extensibility-security",
          "label": "Runtime Extensibility / Security",
          "markdown": "https://banes-lab.com/records/tension/runtime-extensibility-security.md",
          "ref": "tension:runtime-extensibility-security"
        }
      ],
      "relation": "tensions"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/algorithms#algorithms-runtime-extensibility",
          "json": "https://banes-lab.com/json/records/algorithms/runtime-extensibility",
          "label": "Runtime Extensibility",
          "markdown": "https://banes-lab.com/records/algorithms/runtime-extensibility.md",
          "ref": "algorithms:runtime-extensibility"
        }
      ],
      "relation": "contracts"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-closed-core",
          "json": "https://banes-lab.com/json/records/lexicon/closed-core",
          "label": "Closed Core",
          "markdown": "https://banes-lab.com/records/lexicon/closed-core.md",
          "ref": "lexicon:closed-core"
        }
      ],
      "relation": "violated-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-extension-points",
          "json": "https://banes-lab.com/json/records/architecture/extension-points",
          "label": "Extension Points",
          "markdown": "https://banes-lab.com/records/architecture/extension-points.md",
          "ref": "architecture:extension-points"
        }
      ],
      "relation": "refactored-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#vocabulary-severity-contextual",
          "json": "https://banes-lab.com/json/records/vocabulary/severity-contextual",
          "label": "contextual",
          "markdown": "https://banes-lab.com/records/vocabulary/severity-contextual.md",
          "ref": "vocabulary:severity-contextual"
        }
      ],
      "relation": "severity"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-category-runtime-discovery-dynamic-binding",
          "json": "https://banes-lab.com/json/records/architecture-category/runtime-discovery-dynamic-binding",
          "label": "Runtime Discovery / Dynamic Binding",
          "markdown": "https://banes-lab.com/records/architecture-category/runtime-discovery-dynamic-binding.md",
          "ref": "architecture-category:runtime-discovery-dynamic-binding"
        }
      ],
      "relation": "category"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-runtime-discovery",
          "json": "https://banes-lab.com/json/records/architecture/runtime-discovery",
          "label": "Runtime Discovery",
          "markdown": "https://banes-lab.com/records/architecture/runtime-discovery.md",
          "ref": "architecture:runtime-discovery"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-dynamic-binding",
          "json": "https://banes-lab.com/json/records/architecture/dynamic-binding",
          "label": "Dynamic Binding",
          "markdown": "https://banes-lab.com/records/architecture/dynamic-binding.md",
          "ref": "architecture:dynamic-binding"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-runtime-code-generation",
          "json": "https://banes-lab.com/json/records/architecture/runtime-code-generation",
          "label": "Runtime Code Generation",
          "markdown": "https://banes-lab.com/records/architecture/runtime-code-generation.md",
          "ref": "architecture:runtime-code-generation"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-prototype-pattern",
          "json": "https://banes-lab.com/json/records/architecture/prototype-pattern",
          "label": "Prototype Pattern",
          "markdown": "https://banes-lab.com/records/architecture/prototype-pattern.md",
          "ref": "architecture:prototype-pattern"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-feature-toggle",
          "json": "https://banes-lab.com/json/records/architecture/feature-toggle",
          "label": "Feature Toggle",
          "markdown": "https://banes-lab.com/records/architecture/feature-toggle.md",
          "ref": "architecture:feature-toggle"
        }
      ],
      "relation": "reinforced-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-category-runtime-discovery-dynamic-binding",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-runtime-discovery-dynamic-binding",
          "label": "Runtime Discovery / Dynamic Binding",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md",
          "ref": "chapter:/ontology#architecture-category-runtime-discovery-dynamic-binding"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-contracts-interfaces-compatibility",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-contracts-interfaces-compatibility",
          "label": "Contracts / Interfaces / Compatibility",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md",
          "ref": "chapter:/ontology#architecture-category-contracts-interfaces-compatibility"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-correctness-determinism-verification",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-correctness-determinism-verification",
          "label": "Correctness / Determinism / Verification",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md",
          "ref": "chapter:/ontology#architecture-category-correctness-determinism-verification"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-solid-object-oriented-design",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-solid-object-oriented-design",
          "label": "SOLID / Object-Oriented Design",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md",
          "ref": "chapter:/ontology#architecture-category-solid-object-oriented-design"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-metaprogramming-language-oriented-architecture",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture",
          "label": "Metaprogramming / Language-Oriented Architecture",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md",
          "ref": "chapter:/ontology#architecture-category-metaprogramming-language-oriented-architecture"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-creational-patterns",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-creational-patterns",
          "label": "Creational Patterns",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-creational-patterns.md",
          "ref": "chapter:/ontology#architecture-category-creational-patterns"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-plugin-extensibility-ioc",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-plugin-extensibility-ioc",
          "label": "Plugin / Extensibility / IoC",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md",
          "ref": "chapter:/ontology#architecture-category-plugin-extensibility-ioc"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-plugin-extensibility-ioc",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-plugin-extensibility-ioc",
          "label": "Plugin / Extensibility / IoC",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-plugin-extensibility-ioc.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-plugin-extensibility-ioc"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-quality-attributes",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-quality-attributes",
          "label": "Quality Attributes",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-quality-attributes"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-runtime-discovery-dynamic-binding",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-runtime-discovery-dynamic-binding",
          "label": "Runtime Discovery / Dynamic Binding",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-runtime-discovery-dynamic-binding.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-runtime-discovery-dynamic-binding"
        },
        {
          "href": "https://banes-lab.com/ontology/algorithms#algorithms-domain-arch-relationships",
          "json": "https://banes-lab.com/json/ontology/algorithms/algorithms-domain-arch-relationships",
          "label": "Architecture relationships",
          "markdown": "https://banes-lab.com/ontology/algorithms/algorithms-domain-arch-relationships.md",
          "ref": "chapter:/ontology/algorithms#algorithms-domain-arch-relationships"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-vocabulary-severity",
          "json": "https://banes-lab.com/json/ontology/schema/the-vocabulary-severity",
          "label": "Severity levels",
          "markdown": "https://banes-lab.com/ontology/schema/the-vocabulary-severity.md",
          "ref": "chapter:/ontology/schema#the-vocabulary-severity"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-resolutions",
          "json": "https://banes-lab.com/json/ontology/schema/the-resolutions",
          "label": "The resolutions",
          "markdown": "https://banes-lab.com/ontology/schema/the-resolutions.md",
          "ref": "chapter:/ontology/schema#the-resolutions"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "summary": "The degree to which new capability can be added to a running system through extension points, without modifying its core.",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/ontology#architecture-causality",
      "json": "https://banes-lab.com/json/records/architecture/causality",
      "label": "Causality",
      "markdown": "https://banes-lab.com/records/architecture/causality.md",
      "ref": "architecture:causality"
    },
    "previous": {
      "href": "https://banes-lab.com/ontology#architecture-dynamic-dispatch",
      "json": "https://banes-lab.com/json/records/architecture/dynamic-dispatch",
      "label": "Dynamic Dispatch",
      "markdown": "https://banes-lab.com/records/architecture/dynamic-dispatch.md",
      "ref": "architecture:dynamic-dispatch"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/records/architecture",
    "label": "Architecture principles",
    "markdown": "https://banes-lab.com/api/records/architecture.md",
    "ref": "api:records/architecture"
  },
  "aliases": [],
  "exemplar": {
    "after": "export function registerPlugin(name: string, create: () => Plugin) {\n  pluginRegistry.set(name, create);\n}\nconst plugin = pluginRegistry.get(pluginName)?.();",
    "before": "switch (pluginName) {\n  case \"foo\": return new FooPlugin();\n  case \"bar\": return new BarPlugin();\n}",
    "lang": "ts",
    "medium": "code"
  },
  "formedBy": null,
  "scope": [
    "runtime",
    "plugin",
    "system"
  ],
  "severity": "contextual"
}
