Extension Architecture
Ultra is built on the Editor Command Protocol (ECP), a JSON-RPC 2.0 based architecture that separates the UI from backend services. This design makes Ultra highly extensible — you can add new capabilities without touching existing code.
Ways to Extend Ultra
Custom Services
Add new backend functionality like database connections, API integrations, or custom tooling.
Commands
Register new commands that appear in the command palette and can be bound to shortcuts.
UI Components
Create custom panels, status bar items, or decorations in the editor.
Language Support
Add syntax highlighting, snippets, or LSP configurations for new languages.
Project Structure
Ultra extensions live in the ~/.ultra/extensions/ directory.
Each extension is a folder with its own package:
~/.ultra/extensions/
└── my-extension/
├── package.json # Extension manifest
├── src/
│ ├── index.ts # Entry point
│ ├── service.ts # Custom service
│ └── commands.ts # Command definitions
└── dist/ # Compiled output