Microkernel / Plugin

A microkernel keeps stable behavior in a small core and adds optional capabilities through plugins. Use it when extensions have independent lifecycles and communicate through a deliberately small core contract.

src/app/
├── core/
├── plugins/
│   ├── payments/
│   └── reporting/
└── interface/

Complete Configuration

deply:
  paths: ["."]
  exclude_files:
    - '.*/\.venv/.*'
    - '.*/tests?/.*'
  layers:
    - name: core
      collectors:
        - type: directory
          directories: ["src/app/core"]
    - name: payments_plugin
      collectors:
        - type: directory
          directories: ["src/app/plugins/payments"]
    - name: reporting_plugin
      collectors:
        - type: directory
          directories: ["src/app/plugins/reporting"]
    - name: interface
      collectors:
        - type: directory
          directories: ["src/app/interface"]
  ruleset:
    core:
      disallow_layer_dependencies: [payments_plugin, reporting_plugin, interface]
    payments_plugin:
      disallow_layer_dependencies: [reporting_plugin, interface]
    reporting_plugin:
      disallow_layer_dependencies: [payments_plugin, interface]

Add one layer per plugin whose isolation matters. Deply can reject source imports between plugins; it cannot verify discovery, version compatibility, sandboxing, or plugin lifecycle behavior.

Validate

deply validate --config=deply.yaml
deply analyze --parallel --config=deply.yaml

Reference: Fowler’s Plugin pattern.


This site uses Just the Docs, a documentation theme for Jekyll.