<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developers on Grafana Labs</title><link>https://grafana.com/docs/grafana/v10.4/developers/</link><description>Recent content in Developers on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/grafana/v10.4/developers/index.xml" rel="self" type="application/rss+xml"/><item><title>HTTP API</title><link>https://grafana.com/docs/grafana/v10.4/developers/http_api/</link><pubDate>Fri, 07 Mar 2025 09:39:42 +0000</pubDate><guid>https://grafana.com/docs/grafana/v10.4/developers/http_api/</guid><content><![CDATA[&lt;h1 id=&#34;http-api-reference&#34;&gt;HTTP API reference&lt;/h1&gt;
&lt;p&gt;The Grafana backend exposes an HTTP API, which is the same API that is used by the frontend to do everything from saving
dashboards, creating users, and updating data sources.&lt;/p&gt;
&lt;p&gt;Since version 8.4, HTTP API details are &lt;a href=&#34;https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/public/api-merged.json&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;specified&lt;/a&gt; using OpenAPI v2.&lt;/p&gt;
&lt;p&gt;Starting from version 9.1, there is also a &lt;a href=&#34;https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/public/openapi3.json&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;OpenAPI v3 specification&lt;/a&gt; (generated by the v2 one).&lt;/p&gt;
&lt;p&gt;Users can browser and try out both via the Swagger UI editor (served by the grafana server) by navigating to &lt;code&gt;/swagger-ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;authenticating-api-requests&#34;&gt;Authenticating API requests&lt;/h2&gt;
&lt;p&gt;You can authenticate requests using basic auth, a service account token or a session cookie (acquired using regular login or OAuth).&lt;/p&gt;
&lt;h3 id=&#34;basic-auth&#34;&gt;Basic Auth&lt;/h3&gt;
&lt;p&gt;If basic auth is enabled (it is enabled by default), then you can authenticate your HTTP request via
standard basic auth. Basic auth will also authenticate LDAP users.&lt;/p&gt;
&lt;p&gt;curl example:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;Bash&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;curl http://admin:admin@localhost:3000/api/org
{&amp;#34;id&amp;#34;:1,&amp;#34;name&amp;#34;:&amp;#34;Main Org.&amp;#34;}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;service-account-token&#34;&gt;Service Account Token&lt;/h3&gt;
&lt;p&gt;To create a service account token, click on &lt;strong&gt;Administration&lt;/strong&gt; in the left-side menu, click &lt;strong&gt;Users and access&lt;/strong&gt;, then &lt;strong&gt;Service Accounts&lt;/strong&gt;.
For more information on how to use service account tokens, refer to the &lt;a href=&#34;../../administration/service-accounts/&#34;&gt;Service Accounts&lt;/a&gt; documentation.&lt;/p&gt;
&lt;p&gt;You use the token in all requests in the &lt;code&gt;Authorization&lt;/code&gt; header, like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;http&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-http&#34;&gt;GET http://your.grafana.com/api/dashboards/db/mydash HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;Authorization&lt;/code&gt; header value should be &lt;code&gt;Bearer &amp;lt;your service account token&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;x-grafana-org-id-header&#34;&gt;X-Grafana-Org-Id Header&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;X-Grafana-Org-Id&lt;/strong&gt; is an optional property that specifies the organization to which the action is applied. If it is not set, the created key belongs to the current context org. Use this header in all requests except those regarding admin.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example Request&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;http&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-http&#34;&gt;GET /api/org/ HTTP/1.1
Accept: application/json
Content-Type: application/json
X-Grafana-Org-Id: 2
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;http-apis&#34;&gt;HTTP APIs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;admin/&#34;&gt;Admin API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/pkg/services/ngalert/api/tooling/post.json&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Alerting API (unstable)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;alerting_provisioning/&#34;&gt;Alerting Provisioning API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;annotations/&#34;&gt;Annotations API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;correlations/&#34;&gt;Correlations API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;dashboard/&#34;&gt;Dashboard API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;dashboard_permissions/&#34;&gt;Dashboard Permissions API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;dashboard_versions/&#34;&gt;Dashboard Versions API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;data_source/&#34;&gt;Data source API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;folder/&#34;&gt;Folder API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;folder_permissions/&#34;&gt;Folder Permissions API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;folder_dashboard_search/&#34;&gt;Folder/Dashboard Search API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;library_element/&#34;&gt;Library Element API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;org/&#34;&gt;Organization API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;other/&#34;&gt;Other API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;playlist/&#34;&gt;Playlists API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;preferences/&#34;&gt;Preferences API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;short_url/&#34;&gt;Short URL API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;query_history/&#34;&gt;Query history API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;snapshot/&#34;&gt;Snapshot API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;team/&#34;&gt;Team API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;user/&#34;&gt;User API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;deprecated-http-apis&#34;&gt;Deprecated HTTP APIs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;alerting_notification_channels/&#34;&gt;Alerting Notification Channels API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;alerting/&#34;&gt;Alerting API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;auth/&#34;&gt;Authentication API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;grafana-enterprise-http-apis&#34;&gt;Grafana Enterprise HTTP APIs&lt;/h2&gt;
&lt;p&gt;Grafana Enterprise includes all of the Grafana OSS APIs as well as those that follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;access_control/&#34;&gt;Role-based access control API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;datasource_permissions/&#34;&gt;Data source permissions API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;team_sync/&#34;&gt;Team sync API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;licensing/&#34;&gt;License API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;reporting/&#34;&gt;Reporting API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;query_and_resource_caching/&#34;&gt;Query and resource caching API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="http-api-reference">HTTP API reference&lt;/h1>
&lt;p>The Grafana backend exposes an HTTP API, which is the same API that is used by the frontend to do everything from saving
dashboards, creating users, and updating data sources.&lt;/p></description></item><item><title>Contribute to Grafana</title><link>https://grafana.com/docs/grafana/v10.4/developers/contribute/</link><pubDate>Wed, 06 Mar 2024 15:13:49 +0000</pubDate><guid>https://grafana.com/docs/grafana/v10.4/developers/contribute/</guid><content><![CDATA[&lt;h1 id=&#34;contribute-to-grafana&#34;&gt;Contribute to Grafana&lt;/h1&gt;
&lt;p&gt;This page lists resources for developers who want to contribute to the Grafana software ecosystem or build plugins for Grafana.&lt;/p&gt;
&lt;h2 id=&#34;general-resources&#34;&gt;General resources&lt;/h2&gt;
&lt;p&gt;These resources are useful for all developers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/CONTRIBUTING.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Contributing to Grafana&lt;/a&gt;: Start here to learn how you can contribute your skills to make Grafana even better.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Developer guide&lt;/a&gt;: A guide to help you get started developing Grafana software, includes instructions for how to configure Grafana for development.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/documentation&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Contributing to documentation&lt;/a&gt;: A guide to help you contribute to Grafana documentation, includes links to beginner-friendly issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/tree/main/contribute/architecture&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Architecture guides&lt;/a&gt;: These guides explain Grafana’s background architecture.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/create-pull-request.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Create a pull request&lt;/a&gt;: A guide for new contributors about how to create your first Grafana pull request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;/docs/grafana/next/developers/http_api/&#34;&gt;REST APIs&lt;/a&gt; allow you to interact programmatically with the Grafana backend.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;best-practices-and-style&#34;&gt;Best practices and style&lt;/h2&gt;
&lt;p&gt;Our &lt;a href=&#34;https://github.com/grafana/grafana/tree/main/contribute/style-guides&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;style guides&lt;/a&gt; outline Grafana style for frontend, backend, documentation, and more, including best practices. Please read through them before you start editing or coding!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/backend.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Backend style guide&lt;/a&gt; explains how we want to write Go code in the future.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/documentation-style-guide.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Documentation style guide&lt;/a&gt; applies to all documentation created for Grafana products.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/e2e.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;End to end test framework&lt;/a&gt; provides guidance for Grafana e2e tests.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/frontend.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Frontend style guide&lt;/a&gt; provides rules and guidance on developing in React for Grafana.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/redux.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Redux framework&lt;/a&gt; explains how Grafana handles Redux boilerplate code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/styling.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Styling Grafana&lt;/a&gt; expands on styling React components with Emotion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/grafana/grafana/blob/main/contribute/style-guides/themes.md&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Theming Grafana&lt;/a&gt; explains how to use themes and ThemeContext in Grafana code.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="contribute-to-grafana">Contribute to Grafana&lt;/h1>
&lt;p>This page lists resources for developers who want to contribute to the Grafana software ecosystem or build plugins for Grafana.&lt;/p>
&lt;h2 id="general-resources">General resources&lt;/h2>
&lt;p>These resources are useful for all developers.&lt;/p></description></item><item><title>Contributor License Agreement (CLA)</title><link>https://grafana.com/docs/grafana/v10.4/developers/cla/</link><pubDate>Wed, 06 Mar 2024 15:13:49 +0000</pubDate><guid>https://grafana.com/docs/grafana/v10.4/developers/cla/</guid><content><![CDATA[&lt;h1 id=&#34;grafana-labs-software-grant-and-contributor-license-agreement-agreement&#34;&gt;Grafana Labs Software Grant and Contributor License Agreement (&amp;ldquo;Agreement&amp;rdquo;)&lt;/h1&gt;
&lt;p&gt;This agreement is based on the Apache Software Foundation Contributor License Agreement.
(v r190612)&lt;/p&gt;
&lt;p&gt;Thank you for your interest in software projects stewarded by Raintank, Inc. dba Grafana Labs (“Grafana Labs”). In order to clarify the intellectual property license
granted with Contributions from any person or entity, Grafana Labs
must have a Contributor License Agreement (CLA) on file that has been
agreed to by each Contributor, indicating agreement to the license terms
below. This license is for your protection as a Contributor as well
as the protection of Grafana Labs and its users; it does not change
your rights to use your own Contributions for any other purpose.
This Agreement allows an individual to contribute to Grafana Labs on that individual’s own behalf, or an entity (the &amp;ldquo;Corporation&amp;rdquo;) to
submit Contributions to Grafana Labs, to authorize Contributions
submitted by its designated employees to Grafana Labs, and to grant
copyright and patent licenses thereto.&lt;/p&gt;
&lt;p&gt;You accept and agree to the following terms and conditions for Your
present and future Contributions submitted to Grafana Labs. Except
for the license granted herein to Grafana Labs and recipients of
software distributed by Grafana Labs, You reserve all right, title,
and interest in and to Your Contributions.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Definitions. &amp;ldquo;You&amp;rdquo; (or &amp;ldquo;Your&amp;rdquo;) shall mean the copyright owner or legal entity
authorized by the copyright owner that is making this Agreement
with Grafana Labs. For legal entities, the entity making a
Contribution and all other entities that control, are controlled by,
or are under common control with that entity are considered to be a
single Contributor. For the purposes of this definition, &amp;ldquo;control&amp;rdquo;
means (i) the power, direct or indirect, to cause the direction or
management of such entity, whether by contract or otherwise, or
(ii) ownership of fifty percent (50%) or more of the outstanding
shares, or (iii) beneficial ownership of such entity.
&amp;ldquo;Contribution&amp;rdquo; shall mean any work, as well as
any modifications or additions to an existing work, that is intentionally
submitted by You to Grafana Labs for inclusion in, or
documentation of, any of the products owned or managed by Grafana Labs (the &amp;ldquo;Work&amp;rdquo;). For the purposes of this definition,
&amp;ldquo;submitted&amp;rdquo; means any form of electronic, verbal, or written
communication sent to Grafana Labs or its representatives,
including but not limited to communication on electronic mailing
lists, source code control systems (such as GitHub), and issue tracking systems
that are managed by, or on behalf of, Grafana Labs for the
purpose of discussing and improving the Work, but excluding
communication that is conspicuously marked or otherwise designated
in writing by You as &amp;ldquo;Not a Contribution.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grant of Copyright License. Subject to the terms and conditions of this Agreement, You hereby grant to Grafana Labs and to
recipients of software distributed by Grafana Labs a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare derivative works of,
publicly display, publicly perform, sublicense, and distribute
Your Contributions and such derivative works.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grant of Patent License. Subject to the terms and conditions of this Agreement, You hereby grant to Grafana Labs and to recipients
of software distributed by Grafana Labs a perpetual, worldwide,
non-exclusive, no-charge, royalty-free, irrevocable (except as
stated in this section) patent license to make, have made, use,
offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by You that are necessarily infringed by Your Contribution(s)
alone or by combination of Your Contribution(s) with the Work to
which such Contribution(s) were submitted. If any entity institutes
patent litigation against You or any other entity (including a
cross-claim or counterclaim in a lawsuit) alleging that your
Contribution, or the Work to which you have contributed, constitutes
direct or contributory patent infringement, then any patent licenses
granted to that entity under this Agreement for that Contribution or
Work shall terminate as of the date such litigation is filed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You represent that You are legally entitled to grant the above license. If You are an individual, and if Your employer(s) has rights to intellectual property
that you create that includes Your Contributions, you represent
that You have received permission to make Contributions on behalf
of that employer, or that Your employer has waived such rights for
your Contributions to Grafana Labs. If You are a Corporation, any individual who makes a contribution from an account associated with You will be considered authorized to Contribute on Your behalf.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You represent that each of Your Contributions is Your original creation (see section 7 for submissions on behalf of others).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You are not expected to provide support for Your Contributions,except to the extent You desire to provide support. You may provide
support for free, for a fee, or not at all. Unless required by
applicable law or agreed to in writing, You provide Your
Contributions on an &amp;ldquo;AS IS&amp;rdquo; BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied, including, without
limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Should You wish to submit work that is not Your original creation, You may submit it to Grafana Labs separately from any
Contribution, identifying the complete details of its source and
of any license or other restriction (including, but not limited
to, related patents, trademarks, and license agreements) of which
you are personally aware, and conspicuously marking the work as
&amp;ldquo;Submitted on behalf of a third-party: [named here]&amp;rdquo;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
]]></content><description>&lt;h1 id="grafana-labs-software-grant-and-contributor-license-agreement-agreement">Grafana Labs Software Grant and Contributor License Agreement (&amp;ldquo;Agreement&amp;rdquo;)&lt;/h1>
&lt;p>This agreement is based on the Apache Software Foundation Contributor License Agreement.
(v r190612)&lt;/p>
&lt;p>Thank you for your interest in software projects stewarded by Raintank, Inc. dba Grafana Labs (“Grafana Labs”). In order to clarify the intellectual property license
granted with Contributions from any person or entity, Grafana Labs
must have a Contributor License Agreement (CLA) on file that has been
agreed to by each Contributor, indicating agreement to the license terms
below. This license is for your protection as a Contributor as well
as the protection of Grafana Labs and its users; it does not change
your rights to use your own Contributions for any other purpose.
This Agreement allows an individual to contribute to Grafana Labs on that individual’s own behalf, or an entity (the &amp;ldquo;Corporation&amp;rdquo;) to
submit Contributions to Grafana Labs, to authorize Contributions
submitted by its designated employees to Grafana Labs, and to grant
copyright and patent licenses thereto.&lt;/p></description></item><item><title>Angular support deprecation</title><link>https://grafana.com/docs/grafana/v10.4/developers/angular_deprecation/</link><pubDate>Fri, 07 Mar 2025 09:39:42 +0000</pubDate><guid>https://grafana.com/docs/grafana/v10.4/developers/angular_deprecation/</guid><content><![CDATA[&lt;h1 id=&#34;angular-support-deprecation&#34;&gt;Angular support deprecation&lt;/h1&gt;
&lt;p&gt;Angular plugin support is deprecated and will be removed in a future release.
There are legacy core Grafana visualizations and external plugins that rely on Grafana&amp;rsquo;s Angular plugin support to work. The same is likely true for &lt;a href=&#34;/legal/plugins/&#34;&gt;private plugins&lt;/a&gt; that have been developed by Grafana users for use on their own instances over the years.
From Grafana v9 and onwards, there is a &lt;a href=&#34;https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;server configuration option&lt;/a&gt; that&amp;rsquo;s global to the entire instance and controls whether Angular plugin support is available or not.
In Grafana 11, we will change the default value for the configuration to remove support.&lt;/p&gt;
&lt;p&gt;Warning messages are displayed if a dashboard depends on an a panel visualization or data source which requires AngularJS as shown in the following video:&lt;/p&gt;
&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#39;https://www.youtube.com/embed/XlEVs6g8dC8&#39; title=&#34;YouTube video player&#34; frameborder=&#34;0&#34; allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;To avoid disruption:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensure that you are running the latest version of plugins by following this guide on &lt;a href=&#34;../../administration/plugin-management/#update-a-plugin&#34;&gt;updating&lt;/a&gt;. Many panels and data sources have migrated from AngularJS.&lt;/li&gt;
&lt;li&gt;If you are using legacy Core Grafana visualizations such as Graph or Table-old, migrate to their replacements using the provided &lt;a href=&#34;angular-plugins/#automatic-migration-of-plugins&#34;&gt;automatic migrations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Review the &lt;a href=&#34;angular-plugins/&#34;&gt;list of current Angular plugins&lt;/a&gt; to discover which Core and external plugins are impacted, and whether an update or alternative is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why-are-we-deprecating-angular-support&#34;&gt;Why are we deprecating Angular support?&lt;/h2&gt;
&lt;p&gt;AngularJS is an old frontend framework whose active development stopped many years ago. Therefore, it poses a security risk. As Grafana itself had already started migrating to React in v5, this presented the most logical framework for our plugin platform. AngularJS also requires unsafe-eval in the CSP (Content Security Policy) settings, which also reduces the security of running JavaScript in the browser.&lt;/p&gt;
&lt;h2 id=&#34;when-will-angular-plugins-stop-working&#34;&gt;When will Angular plugins stop working?&lt;/h2&gt;
&lt;p&gt;In Grafana 11, which will be released in preview in April 2024 and generally available in May, we will change the default behavior of the &lt;a href=&#34;https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;angular_support_enabled&lt;/a&gt; configuration parameter to turn off support for AngularJS based plugins. In case you still rely on &lt;a href=&#34;angular-plugins/&#34;&gt;AngularJS-based plugins&lt;/a&gt; developed internally or by the community, you will need to enable this option to continue using them.&lt;/p&gt;
&lt;p&gt;New Grafana Cloud users will be unable to request for support to be added to their instance.&lt;/p&gt;
&lt;h2 id=&#34;when-will-we-remove-angular-support-completely&#34;&gt;When will we remove Angular support completely?&lt;/h2&gt;
&lt;p&gt;Our current plan is to completely remove any remaining support for Angular plugins in version 12. Including the removal of the &lt;a href=&#34;https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;angular_support_enabled&lt;/a&gt; configuration parameter.&lt;/p&gt;
&lt;h2 id=&#34;a-dashboard-i-use-is-displaying-a-warning-what-do-i-need-to-do&#34;&gt;A dashboard I use is displaying a warning, what do I need to do?&lt;/h2&gt;
&lt;p&gt;A dashboard displays warnings when one or more panel visualizations or data sources in the dashboard have a dependency on Angular.
Contact your system administrator to advise them of the issue or follow the preceding guidance on avoiding disruption.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-migrate-an-angular-plugin-to-react&#34;&gt;How do I migrate an Angular plugin to React?&lt;/h2&gt;
&lt;p&gt;Depending on if it’s a data source plugin, panel plugin, or app plugin the process will differ.&lt;/p&gt;
&lt;p&gt;For panels, the rendering logic could in some cases be easily preserved, but all options need to be redone to use the declarative options framework. For data source plugins the query editor and config options will likely need a total rewrite.&lt;/p&gt;
&lt;h2 id=&#34;how-do-i-encourage-a-community-plugin-to-migrate&#34;&gt;How do I encourage a community plugin to migrate?&lt;/h2&gt;
&lt;p&gt;We encourage you to locate the repository of the corresponding plugin and create or upvote an Issue within it if you are using a plugin that is still based on Angular.&lt;/p&gt;
&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/developers/plugin-tools/migration-guides/migrate-angularjs-to-react&#34;&gt;Migrate Angular to React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/tutorials/build-a-panel-plugin/&#34;&gt;Build a panel plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/tutorials/build-a-data-source-plugin/&#34;&gt;Build a data source plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;angular-plugins/&#34;&gt;List of current Angular plugins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h1 id="angular-support-deprecation">Angular support deprecation&lt;/h1>
&lt;p>Angular plugin support is deprecated and will be removed in a future release.
There are legacy core Grafana visualizations and external plugins that rely on Grafana&amp;rsquo;s Angular plugin support to work. The same is likely true for &lt;a href="/legal/plugins/">private plugins&lt;/a> that have been developed by Grafana users for use on their own instances over the years.
From Grafana v9 and onwards, there is a &lt;a href="https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362" target="_blank" rel="noopener noreferrer">server configuration option&lt;/a> that&amp;rsquo;s global to the entire instance and controls whether Angular plugin support is available or not.
In Grafana 11, we will change the default value for the configuration to remove support.&lt;/p></description></item></channel></rss>