# ADR-0017: Contribution points for extensions

- **Status:** Accepted, not implemented (the general plugin platform is deferred)
- **Date:** 2026-06-24
- **Deciders:** jka
- **Decision:** D17

## Context

Given the plugin model of ADR-0016, rio needs a defined surface of things a
plugin may add, so the core can stay minimal and the extension story is not an
afterthought.

## Decision

A plugin may register:

- **commands** (for a command palette and key bindings);
- **key bindings**;
- **event subscriptions** (buffer, save, git and similar events);
- **providers**: formatter, linter or diagnostics, syntax highlighter, LLM
  provider, version-control backend;
- **UI contributions**, declaratively (ADR-0018).

Buffer and text manipulation reuse the existing `buffer.*` operations. rio ships
some first-party plugins on the same API to keep it proven in use; even syntax
highlighting or an LSP bridge may be plugins rather than core.

## Consequences

- The core stays small and the plugin API is the extensibility story.
- Until the platform is built, individual contribution kinds ship on dedicated,
  simpler seams: highlighters (ADR-0032), editing modes (ADR-0038), themes
  (ADR-0024), providers (ADR-0066). These are designed so a later general platform
  can absorb them.
