JSPM

@grafana/grafana-foundation-sdk

11.0.0-cogv0.0.x.1745704528
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 9735
  • Score
    100M100P100Q148522F
  • License Apache-2.0

A set of tools, types and libraries for building and manipulating Grafana objects.

Package Exports

  • @grafana/grafana-foundation-sdk/accesspolicy
  • @grafana/grafana-foundation-sdk/alerting
  • @grafana/grafana-foundation-sdk/annotationslist
  • @grafana/grafana-foundation-sdk/athena
  • @grafana/grafana-foundation-sdk/azuremonitor
  • @grafana/grafana-foundation-sdk/barchart
  • @grafana/grafana-foundation-sdk/bargauge
  • @grafana/grafana-foundation-sdk/bigquery
  • @grafana/grafana-foundation-sdk/candlestick
  • @grafana/grafana-foundation-sdk/canvas
  • @grafana/grafana-foundation-sdk/cloudwatch
  • @grafana/grafana-foundation-sdk/cog
  • @grafana/grafana-foundation-sdk/common
  • @grafana/grafana-foundation-sdk/dashboard
  • @grafana/grafana-foundation-sdk/dashboardlist
  • @grafana/grafana-foundation-sdk/datagrid
  • @grafana/grafana-foundation-sdk/datasource
  • @grafana/grafana-foundation-sdk/debug
  • @grafana/grafana-foundation-sdk/elasticsearch
  • @grafana/grafana-foundation-sdk/expr
  • @grafana/grafana-foundation-sdk/gauge
  • @grafana/grafana-foundation-sdk/geomap
  • @grafana/grafana-foundation-sdk/googlecloudmonitoring
  • @grafana/grafana-foundation-sdk/grafanapyroscope
  • @grafana/grafana-foundation-sdk/heatmap
  • @grafana/grafana-foundation-sdk/histogram
  • @grafana/grafana-foundation-sdk/librarypanel
  • @grafana/grafana-foundation-sdk/logs
  • @grafana/grafana-foundation-sdk/loki
  • @grafana/grafana-foundation-sdk/news
  • @grafana/grafana-foundation-sdk/nodegraph
  • @grafana/grafana-foundation-sdk/parca
  • @grafana/grafana-foundation-sdk/piechart
  • @grafana/grafana-foundation-sdk/preferences
  • @grafana/grafana-foundation-sdk/prometheus
  • @grafana/grafana-foundation-sdk/publicdashboard
  • @grafana/grafana-foundation-sdk/resource
  • @grafana/grafana-foundation-sdk/role
  • @grafana/grafana-foundation-sdk/rolebinding
  • @grafana/grafana-foundation-sdk/stat
  • @grafana/grafana-foundation-sdk/statetimeline
  • @grafana/grafana-foundation-sdk/statushistory
  • @grafana/grafana-foundation-sdk/table
  • @grafana/grafana-foundation-sdk/team
  • @grafana/grafana-foundation-sdk/tempo
  • @grafana/grafana-foundation-sdk/testdata
  • @grafana/grafana-foundation-sdk/text
  • @grafana/grafana-foundation-sdk/timeseries
  • @grafana/grafana-foundation-sdk/trend
  • @grafana/grafana-foundation-sdk/units
  • @grafana/grafana-foundation-sdk/xychart

Readme

Grafana Foundation SDK – TypeScript

A set of tools, types and builder libraries for building and manipulating Grafana objects in TypeScript.

[!NOTE] This branch contains types and builders generated for Grafana v11.0.x. Other supported versions of Grafana can be found at this repository's root.

Installing

yarn add '@grafana/grafana-foundation-sdk@~11.0.0-cogv0.0.x.1745704528'

Example usage

More examples can be found at the repository root.

Building a dashboard

import { DashboardBuilder, RowBuilder } from '@grafana/grafana-foundation-sdk/dashboard';
import { DataqueryBuilder } from '@grafana/grafana-foundation-sdk/prometheus';
import { PanelBuilder } from '@grafana/grafana-foundation-sdk/timeseries';

const builder = new DashboardBuilder('[TEST] Node Exporter / Raspberry')
  .uid('test-dashboard-raspberry')
  .tags(['generated', 'raspberrypi-node-integration'])

  .refresh('1m')
  .time({from: 'now-30m', to: 'now'})
  .timezone('browser')

  .withRow(new RowBuilder('Overview'))
  .withPanel(
    new PanelBuilder()
      .title('Network Received')
      .unit('bps')
      .min(0)
      .withTarget(
        new DataqueryBuilder()
          .expr('rate(node_network_receive_bytes_total{job="integrations/raspberrypi-node", device!="lo"}[$__rate_interval]) * 8')
          .legendFormat("{{ device }}")
      )
  )
;

console.log(JSON.stringify(builder.build(), null, 2));

Defining a custom query type

While the SDK ships with support for all core datasources and their query types, it can be extended for private/third-party plugins.

To do so, define a type and a builder for the custom query:

// customQuery.ts
import { Builder, Dataquery } from '@grafana/grafana-foundation-sdk/cog';

export interface CustomQuery {
    // refId and hide are expected on all queries
    refId?: string;
    hide?: boolean;


    // query is specific to the CustomQuery type
    query: string;

    // Let cog know that CustomQuery is a Dataquery variant
    _implementsDataqueryVariant(): void;
}

export const defaultCustomQuery = (): CustomQuery => ({
    query: "",
    _implementsDataqueryVariant() {},
});

export class CustomQueryBuilder implements Builder<Dataquery> {
    private readonly internal: CustomQuery;

    constructor(query: string) {
        this.internal = defaultCustomQuery();
        this.internal.query = query;
    }

    build(): CustomQuery {
        return this.internal;
    }

    refId(refId: string): this {
        this.internal.refId = refId;
        return this;
    }

    hide(hide: boolean): this {
        this.internal.hide = hide;
        return this;
    }
}

The custom query type can now be used as usual to build a dashboard:

import { DashboardBuilder, RowBuilder } from '@grafana/grafana-foundation-sdk/dashboard';
import { PanelBuilder as TimeSeriesBuilder } from "@grafana/grafana-foundation-sdk/timeseries";
import { CustomQueryBuilder } from "./customQuery";

const builder = new DashboardBuilder('Custom query type')
    .uid('test-custom-query-type')

    .refresh('1m')
    .time({ from: 'now-30m', to: 'now' })

    .withRow(new RowBuilder('Overview'))
    .withPanel(
        new TimeSeriesBuilder()
            .title('Sample panel')
            .withTarget(
                new CustomQueryBuilder("query here")
            )
    );

console.log(JSON.stringify(builder.build(), null, 2));

Defining a custom panel type

While the SDK ships with support for all core panels, it can be extended for private/third-party plugins.

To do so, define a type and a builder for the custom panel's options:

// customPanel.ts
import * as dashboard from '@grafana/grafana-foundation-sdk/dashboard';

export interface CustomPanelOptions {
    makeBeautiful?: boolean;
}

export const defaultCustomPanelOptions = (): CustomPanelOptions => ({
});

export class CustomPanelBuilder extends dashboard.PanelBuilder {
    constructor() {
        super();
        this.internal.type = "custom-panel"; // panel plugin ID
    }

    makeBeautiful(): this {
        if (!this.internal.options) {
            this.internal.options = defaultCustomPanelOptions();
        }
        this.internal.options.makeBeautiful = true;
        return this;
    }
}

The custom panel type can now be used as usual to build a dashboard:

import { DashboardBuilder, RowBuilder } from '@grafana/grafana-foundation-sdk/dashboard';
import { CustomPanelBuilder } from "./customPanel";

const builder = new DashboardBuilder('Custom panel type')
    .uid('test-custom-panel-type')

    .refresh('1m')
    .time({ from: 'now-30m', to: 'now' })

    .withRow(new RowBuilder('Overview'))
    .withPanel(
        new CustomPanelBuilder()
            .title('Sample custom panel')
            .makeBeautiful()
    );

console.log(JSON.stringify(builder.build(), null, 2));

Maturity

The code in this repository should be considered as "public preview". While it is used by Grafana Labs in production, it still is under active development.

[!NOTE] Bugs and issues are handled solely by Engineering teams. On-call support or SLAs are not available.

License

Apache 2.0 License