> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/wazuh/wazuh-dashboard-plugins/llms.txt
> Use this file to discover all available pages before exploring further.

# Main Plugin API

> API reference for the Wazuh main dashboard plugin

The main plugin (`wazuh`) is the primary plugin that provides the Wazuh dashboard application, UI components, and server-side routes.

## Plugin Class

### WazuhPlugin

The main plugin class implementing the OpenSearch Dashboards plugin interface.

**Location:** `plugins/main/public/plugin.ts:51`

```typescript theme={null}
export class WazuhPlugin
  implements Plugin<WazuhSetup, WazuhStart, WazuhSetupPlugins, WazuhStartPlugins>
```

## Lifecycle Methods

### setup()

Initializes the plugin during the setup phase.

**Signature:**

```typescript theme={null}
public async setup(
  core: CoreSetup,
  plugins: WazuhSetupPlugins,
): Promise<WazuhSetup>
```

**core** `CoreSetup` *required*

OpenSearch Dashboards core services setup contract

**plugins** `WazuhSetupPlugins` *required*

Plugin dependencies available during setup

**properties**

**uiActions** `UiActionsSetup`

UI actions framework for registering triggers and actions

**visualizations** `VisualizationsSetup`

Visualizations plugin for chart rendering

**data** `DataPublicPluginSetup`

Data plugin for search and queries

**navigation** `NavigationPublicPluginStart`

Navigation plugin for menu and breadcrumbs

**telemetry** `TelemetryPluginSetup`

Telemetry plugin for usage tracking

**charts** `ChartsPluginStart`

Charts plugin for color palettes and configurations

**Returns:** `Promise<WazuhSetup>` - Empty object (no public APIs exposed during setup)

#### Setup Tasks

During setup, the plugin:

1. **Configures chart color palettes** - Customizes the EUI palette for better visualization
2. **Registers query languages** - Enables WQL, Lucene, and DQL for search bars
3. **Registers applications** - Creates all Wazuh applications (Overview, Agents, etc.)
4. **Registers navigation links** - Adds Wazuh to the OpenSearch Dashboards menu

**Example:**

```typescript theme={null}
// Applications registered during setup
for (const app of Applications) {
  const { category, id, title, redirectTo, order } = app;
  
  core.application.register({
    id,
    title,
    order,
    mount: async (params: AppMountParameters) => {
      // Application mounting logic
    },
    category: Categories.find(
      ({ id: categoryID }) => categoryID === category,
    ),
  });
}
```

### start()

Activates the plugin during the start phase.

**Signature:**

```typescript theme={null}
public start(
  core: CoreStart,
  plugins: WazuhStartPlugins,
): WazuhStart
```

**core** `CoreStart` *required*

OpenSearch Dashboards core services start contract

**plugins** `WazuhStartPlugins` *required*

Plugin dependencies available during start

**properties**

**data** `DataPublicPluginStart`

Data plugin instance for querying

**navigation** `NavigationPublicPluginStart`

Navigation services

**visualizations** `VisualizationsStart`

Visualizations rendering services

**discover** `DiscoverStart`

Discover plugin for event exploration

**wazuhCore** `WazuhCorePluginStart`

Wazuh Core plugin services

**wazuhCheckUpdates** `WazuhCheckUpdatesPluginStart`

Update checking services

**securityOss** `SecurityOssPluginStart`

Security plugin (if available)

**Returns:** `WazuhStart` - Empty object (no public APIs exposed during start)

#### Start Tasks

During start, the plugin:

1. **Sets global services** - Makes core services available throughout the app
2. **Hides security alerts** - Disables OpenSearch security warnings
3. **Initializes telemetry** - Sets up usage tracking if enabled
4. **Configures error handling** - Establishes error orchestration

**Example:**

```typescript theme={null}
// Services set during start (available globally)
setCore(core);
setPlugins(plugins);
setHttp(core.http);
setToasts(core.notifications.toasts);
setDataPlugin(plugins.data);
setWazuhCorePlugin(plugins.wazuhCore);
```

## Type Definitions

### WazuhSetupPlugins

Plugins required during the setup phase.

**Location:** `plugins/main/public/types.ts:43`

```typescript theme={null}
export type WazuhSetupPlugins = {
  uiActions: UiActionsSetup;
  visualizations: VisualizationsSetup;
  data: DataPublicPluginSetup;
  navigation: NavigationPublicPluginStart;
  telemetry: TelemetryPluginSetup;
  charts: ChartsPluginStart;
};
```

### WazuhStartPlugins

Plugins required during the start phase.

**Location:** `plugins/main/public/types.ts:51`

```typescript theme={null}
export type WazuhStartPlugins = {
  navigation: NavigationPublicPluginStart;
  data: DataPublicPluginStart;
  visualizations: VisualizationsStart;
  discover: DiscoverStart;
  charts: ChartsPluginStart;
  securityOss?: SecurityOssPluginStart;
  savedObjects: SavedObjectsStart;
  telemetry?: TelemetryPluginStart;
  wazuhCheckUpdates: WazuhCheckUpdatesPluginStart;
  wazuhCore: WazuhCorePluginStart;
  dashboard: DashboardStart;
};
```

### AppDependencies

Context object passed to application components.

**Location:** `plugins/main/public/types.ts:37`

```typescript theme={null}
export interface AppDependencies {
  core: CoreStart;
  plugins: AppPluginStartDependencies;
  params: AppMountParameters;
}
```

## Server Plugin

The server-side plugin provides REST API routes and background jobs.

### WazuhPlugin (Server)

**Location:** `plugins/main/server/plugin.ts:177`

```typescript theme={null}
export class WazuhPlugin implements Plugin<WazuhPluginSetup, WazuhPluginStart>
```

### setup() (Server)

**Signature:**

```typescript theme={null}
public async setup(core: CoreSetup, plugins: PluginSetup)
```

Server setup tasks:

1. **Registers route handler context** - Adds `wazuh` context to request handlers
2. **Adds security headers** - Configures X-Frame-Options
3. **Creates router** - Sets up HTTP route handling
4. **Registers health checks** - Initializes index pattern and API checks
5. **Configures notifications** - Sets up notification channels if available

**Example:**

```typescript theme={null}
// Route handler context
core.http.registerRouteHandlerContext('wazuh', (context, request) => ({
  logger: this.logger.get(
    `${request.route.method.toUpperCase()} ${request.route.path}`,
  ),
  server: {
    info: serverInfo,
  },
  plugins,
  security: plugins.wazuhCore.dashboardSecurity,
  api: context.wazuh_core.api,
}));
```

### start() (Server)

**Signature:**

```typescript theme={null}
public async start(core: CoreStart, plugins: any)
```

Server start tasks:

1. **Initializes background jobs** - Starts API initialization checks
2. **Starts queue processing** - Begins queue job runner
3. **Loads global configuration** - Retrieves server settings

## Server Routes

The main plugin exposes several REST API route groups.

### Wazuh API Routes

**Location:** `plugins/main/server/routes/wazuh-api.ts`

#### POST /api/check-stored-api

Validates a stored API configuration.

**id** `string` *required*

API host ID to check

**idChanged** `string`

Previous ID if changed

**Response:**

```typescript theme={null}
{
  statusCode: 200,
  data: {
    status: 'connected' | 'disconnected',
    version: string,
    cluster: {
      enabled: boolean,
      name?: string
    }
  }
}
```

#### POST /api/check-api

Validates API credentials without storing them.

**url** `string` *required*

Wazuh API URL

**port** `number` *required*

API port number

**username** `string` *required*

API username

**password** `string` *required*

API password

#### POST /api/login

Authenticates with a configured API host.

**idHost** `string` *required*

API host ID

**force** `boolean` (default: false)

Force token refresh

**Response:**

```typescript theme={null}
{
  token: string,
  idHost: string
}
```

#### POST /api/request

Proxies a request to the Wazuh API.

**id** `string` *required*

API host ID

**method** `string` *required*

HTTP method (GET, POST, PUT, DELETE)

**path** `string` *required*

API endpoint path

**body** `object`

Request payload

**Example:**

```typescript theme={null}
// Client request
const response = await fetch('/api/request', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    id: 'default',
    method: 'GET',
    path: '/agents',
    body: {}
  })
});
```

#### POST /api/csv

Exports API response data as CSV.

**id** `string` *required*

API host ID

**path** `string` *required*

API endpoint path

**filters** `object`

Query filters

#### GET /api/routes

Returns available Wazuh API routes for the Dev Tools console.

**Response:**

```typescript theme={null}
{
  routes: Array<{
    method: string,
    path: string,
    description: string
  }>
}
```

### Host Management Routes

**Location:** `plugins/main/server/routes/wazuh-hosts.ts`

#### GET /hosts/apis

Retrieve all configured API hosts.

#### POST /hosts/apis

Add a new API host configuration.

#### PUT /hosts/apis/:id

Update an existing API host.

#### DELETE /hosts/apis/:id

Remove an API host configuration.

### Elasticsearch Routes

**Location:** `plugins/main/server/routes/wazuh-elastic.ts`

#### GET /elastic/known-fields/:pattern

Get known fields for an index pattern.

#### GET /elastic/visualizations

Retrieve visualization saved objects.

#### POST /elastic/index-patterns

Create or update index patterns.

### Utility Routes

**Location:** `plugins/main/server/routes/wazuh-utils/ui-logs.ts`

#### POST /utils/logs/ui

Log client-side errors to the server.

**level** `string` *required*

Log level (info, error, warning)

**message** `string` *required*

Log message

**location** `string`

Source location in UI

## Global Services

The plugin exposes global services through the kibana-services module.

**Location:** `plugins/main/public/kibana-services.ts`

```typescript theme={null}
import {
  getCore,
  getHttp,
  getToasts,
  getDataPlugin,
  getUiSettings,
  getChrome,
  getSavedObjects,
  getWazuhCorePlugin,
} from './kibana-services';

// Example usage
const http = getHttp();
const response = await http.post('/api/request', {
  body: JSON.stringify({ method: 'GET', path: '/agents' })
});
```

## Related Resources

> **[Wazuh Core API](/api/wazuh-core)**
>
> Shared services and configuration

> **[Components](/api/components/agents)**
>
> Reusable UI components

> **[API Console](/api/console)**
>
> Interactive API testing

> **[Server Architecture](/concepts/architecture)**
>
> Server-side architecture guide


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.