docs/docs/en/plugin-development/client/index.md
NocoBase client plugins can do a lot: register new pages, write custom components, call backend APIs, add blocks and fields, and even extend action buttons. All these capabilities are organized through a unified plugin entry point.
If you already have React development experience, getting started is fast -- most scenarios involve writing regular React components and using NocoBase's context capabilities (such as making requests, internationalization) to integrate with NocoBase. You only need to learn about FlowEngine when you want your components to appear in NocoBase's visual configuration interface.
:::warning Note
NocoBase is migrating from client (v1) to client-v2. Currently client-v2 is still under development. The content in this documentation is for early exploration and is not recommended for production use. New plugins should use the src/client-v2/ directory and the @nocobase/client-v2 API.
:::
It is recommended to learn client plugin development in the following order, from simple to complex:
Plugin (entry) -> Router (pages) -> Component (components) -> Context (context) -> FlowEngine (UI extensions)
Specifically:
load().router.add() and plugin settings pages via pluginSettingsManager.this.context; in components, use useFlowContext() to get the context. This gives you access to NocoBase capabilities -- making requests (ctx.api), internationalization (ctx.t), logging (ctx.logger), etc.The first four steps cover most plugin scenarios. You only need step five when deep integration with NocoBase's UI configuration system is required. If you're unsure which approach to use, see Component vs FlowModel.
| I want to... | Where to look |
|---|---|
| Understand client plugin basic structure | Plugin |
| Add a standalone page | Router |
| Add a plugin settings page | Router |
| Write a regular React component | Component |
| Call backend APIs, use NocoBase built-in features | Context - Common Capabilities |
| Customize component styles | Styles & Themes |
| Add a new block | FlowEngine - Block Extension |
| Add a new field component | FlowEngine - Field Extension |
| Add a new action button | FlowEngine - Action Extension |
| Not sure whether to use Component or FlowModel | Component vs FlowModel |
| See a complete plugin example | Plugin Examples |