{"id":26613,"date":"2025-04-08T14:11:40","date_gmt":"2025-04-08T14:11:40","guid":{"rendered":"https:\/\/www.highcharts.com\/blog\/?p=26613"},"modified":"2026-05-06T12:02:48","modified_gmt":"2026-05-06T12:02:48","slug":"introducing-highcharts-grid-lite","status":"publish","type":"post","link":"https:\/\/www.highcharts.com\/blog\/news\/introducing-highcharts-grid-lite\/","title":{"rendered":"Introducing Highcharts Grid Lite"},"content":{"rendered":"\n<p>We\u2019re happy to announce the release of Highcharts Grid Lite. If you\u2019re looking for a fast way to add interactive, customizable data grids to your web apps without bloating your project with unnecessary dependencies, this tool is for you. It\u2019s free, easy to configure, and built with developers in mind.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Read on to learn more about Grid Lite\u2019s features and how to get started. You can also play around with a live <a href=\"https:\/\/jsfiddle.net\/stitot\/otpu7y4n\/\" target=\"_blank\" rel=\"noreferrer noopener\">JSFiddle demo<\/a> to see all these features in action.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column has-brand-100-background-color has-background is-layout-flow wp-block-column-is-layout-flow\" style=\"border-top-left-radius:8px;border-top-right-radius:8px;border-bottom-left-radius:8px;border-bottom-right-radius:8px;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--30);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--30)\">\n<p><strong>Update (May 2026):<\/strong> Grid Lite remains free and unaffected by licensing changes. For Grid Pro users, please note that starting May 6th, the Highcharts Dashboard license no longer includes Grid Pro usage.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why Grid Lite?<\/strong><\/h2>\n\n\n\n<p>Grid Lite grew out of Highcharts Dashboards\u2019 data grid. We realized many developers loved the grid component but didn\u2019t always need the full dashboard experience. So we extracted essential functionality and created a free version that shares the same core codebase as Dashboards\u2019 \u201cpro\u201d data grid minus the heavier extras.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting Started<\/h2>\n\n\n\n<p>To get started, all you need is a basic HTML file, a JavaScript config, and a data object that maps column keys to values.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Start by including the script and stylesheet in your HTML:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@highcharts\/grid-lite\/grid-lite.js\"&gt;&lt;\/script&gt;\n&lt;link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@highcharts\/grid-lite\/css\/grid.css\" \/&gt;\n<\/code><\/pre>\n\n\n\n<p>Then, define your data using a simple key\/value structure. Each key represents a column, and its value is an array of cell values for that column:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const employeeData = {\n  id: &#091;\n    \"a1B2c3D4e5\",\n    \"F6g7H8i9J0\",\n    \"K1l2M3n4O5\",\n    \"P6q7R8s9T0\",\n    \"U1v2W3x4Y5\"\n    \/\/ ...\n  ],\n  firstName: &#091;\n    \"Alice\",\n    \"Bob\",\n    \"Charlie\",\n    \"Dana\",\n    \"Evan\"\n    \/\/ ...\n  ],\n  lastName: &#091;\n    \"Smith\",\n    \"Johnson\",\n    \"Williams\",\n    \"Brown\",\n    \"Jones\"\n    \/\/ ...\n  ]\n};\n<\/code><\/pre>\n\n\n\n<p>Then, to render a simple grid, pass your data object to your grid configuration like this:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Grid.grid(\"our_grid\", {\n  dataTable: {\n    columns: employeeData\n  }\n});\n<\/code><\/pre>\n\n\n\n<p>This setup gives you a functional grid with minimal code. Check out this clip from our <a href=\"https:\/\/www.youtube.com\/watch?v=MA69igZxxzk\" target=\"_blank\" rel=\"noreferrer noopener\">Grid Lite webinar<\/a> for more info.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-vimeo wp-block-embed-vimeo\" style=\"margin-top:var(--wp--preset--spacing--40);margin-right:0;margin-bottom:var(--wp--preset--spacing--40);margin-left:0\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Highcharts Grid Lite: Getting Started\" src=\"https:\/\/player.vimeo.com\/video\/1073556489?dnt=1&amp;app_id=122963\" width=\"500\" height=\"282\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Formatting Columns and Cell Content<\/strong><\/h2>\n\n\n\n<p>Grid Lite\u2019s <code>columns<\/code> object makes it easy customize header titles:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>columns: &#091;\n    {\n      id: \"jobTitle\",\n      header: {\n        format: \"Title\"\n      }\n    }\n\/\/ ...\n<\/code><\/pre>\n\n\n\n<p>It\u2019s also easy to hide columns that you don\u2019t want to show by setting the <code>enabled<\/code> option to false:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    id: \"lastName\",\n    enabled: false\n}\n<\/code><\/pre>\n\n\n\n<p>Using the <code>cells<\/code> object, you can customize your cell content and control its look and feel by assigning CSS classes. The <code>format<\/code> object makes it easy to inject values from your data into custom HTML and use them with interactive elements such as checkboxes and hyperlinks:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cells: {\n    className: \"hcg-center\",\n    format: \"&lt;input type='checkbox' value='{value}' \/&gt;\"\n}\n<\/code><\/pre>\n\n\n\n<p>Cell formats also support conditional logic via JS-based templating, so you can configure what content to show and how to show it under certain conditions, like an alert icon for data aberrations or a special format for indicating missing data.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cells: {\n    format: \"{#if (ne value '')}&lt;a href='mailto:{value}'&gt;{value}&lt;\/a&gt;{else}N\/A{\/if}\"\n}\n<\/code><\/pre>\n\n\n\n<p>If you require customization that goes beyond CSS and basic templating, you can use a callback function inside the <code>cell.formatter<\/code> object. The example below determines how to style a performance \u201cbadge\u201d based on performance data.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>formatter: function() {\n    const currentValue = this.value;\n    const previousValue = this.row.data.previousPerformance;\n    \/* This could of course be optimized, but just to demo a use case for formatter with multiple calculation *\/\n    const color =\n        currentValue &lt; previousValue ? &#091;\"red\", \"\u2193\"] : currentValue &gt; previousValue ?\n        &#091;\"green\", \"\u2191\"] :\n        &#091;\"\", \"\"];\n    const attention =\n        currentValue - previousValue &lt; -10 ? \"redder\" : currentValue - previousValue &gt; 10 ?\n        \"greener\" : \"\";\n    const badge = `\n      &lt;span class=\"performance ${color&#091;0]} ${attention}\"&gt;\n        &lt;span&gt;${color&#091;1]}&lt;\/span&gt;\n        ${currentValue}\n      &lt;\/span&gt;\n      `;\n    return badge\n}\n<\/code><\/pre>\n\n\n\n<p>Check out this clip from our <a href=\"https:\/\/www.youtube.com\/watch?v=MA69igZxxzk\" target=\"_blank\" rel=\"noreferrer noopener\">Grid Lite webinar<\/a> for more info on column and cell formatting and customization.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Highcharts Grid Lite: Column &amp; Cell Customization\" src=\"https:\/\/player.vimeo.com\/video\/1073556527?dnt=1&amp;app_id=122963\" width=\"500\" height=\"282\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Global Theming with CSS<\/strong><\/h2>\n\n\n\n<p>We\u2019ve streamlined the process of creating custom global themes for grids through the use of CSS variables. Just edit the variable values in your local CSS file to override our defaults.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.our-theme {\n  --hcg-background: #d9ebe4;\n  --hcg-font-size: 14px;\n  --hcg-color: #000000;\n  --hcg-padding: 8px;\n\n  --hcg-border-width: 1px;\n  --hcg-border-color: #6aa68c;\n  --hcg-border-radius: 10px;\n\n  --hcg-header-background: #426b59;\n  --hcg-header-color: #ffffff;\n  --hcg-header-text-align: center;\n\n  --hcg-cell-hovered-background: #b6d1c5;\n  --hcg-cell-hovered-column-background: #c8e1d7;\n  --hcg-cell-hovered-row-background: #c8e1d7;\n  --hcg-cell-hovered-header-color: #b6d1c5;\n\n  --hcg-caption-color: #397b5f;\n  --hcg-caption-font-size: 20px;\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>While you can forgo the use of our variables and write your own custom CSS from scratch, we recommend using our system as it will help future-proof your grid\u2019s appearance as we introduce new features and styles.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>With your theme defined, assign the theme\u2019s CSS class name to the <code>rendering.theme<\/code> object in your configuration like so:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rendering: {\n    theme: \"our-theme\"\n}<\/code><\/pre>\n\n\n\n<p>To learn more about theming, check out this clip from our <a href=\"https:\/\/www.youtube.com\/watch?v=MA69igZxxzk\" target=\"_blank\" rel=\"noreferrer noopener\">Grid Lite webinar<\/a>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Highcharts Grid Lite: CSS &amp; Themeing\" src=\"https:\/\/player.vimeo.com\/video\/1073556438?dnt=1&amp;app_id=122963\" width=\"500\" height=\"282\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Other Helpful Features<\/strong><\/h2>\n\n\n\n<p>In addition to giving you total control over your grid\u2019s content and appearance, Highcharts Grid Lite also includes features to help you optimize your grid\u2019s performance and accessibility.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Grouped Headers<\/strong><\/h3>\n\n\n\n<p>Use the <code>header<\/code> object to control the order of your columns independently from your data and organize them into logical groups. The example below creates a column group called \u201cEmployee Details\u201d that includes\u00a0the <code>jobTitle<\/code>, <code>currentPerformance<\/code> and <code>salary<\/code> columns.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>header: &#091;\n    \"id\",\n    \"firstName\",\n    \"lastName\",\n    \"email\",\n    {\n      format: \"Employee details\",\n      columns: &#091;\n        \"jobTitle\",\n        \"currentPerformance\",\n        {\n          columnId: \"salary\",\n          format: \"Salary\",\n        },\n      ],\n    },\n  ]<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Column grouping is handy for large datasets where you only need to show a few of your data\u2019s columns without having to set each columns\u2019 visibility independently.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Row Virtualization<\/strong><\/h3>\n\n\n\n<p>Grid Lite uses row virtualization to optimize performance with large data sets. Instead of rendering all the rows of data at once, row virtualization shows only the rows currently visible within the user\u2019s viewport. A small buffer zone above and below what\u2019s visible allows off-screen rows to seamlessly appear as the user scrolls through the data grid.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Watch this clip from our <a href=\"https:\/\/www.youtube.com\/watch?v=MA69igZxxzk\" target=\"_blank\" rel=\"noreferrer noopener\">Grid Lite webinar<\/a> for more information on how to configure row virtualization.<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-vimeo wp-block-embed-vimeo\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Highcharts Grid Lite: Row Virtualization\" src=\"https:\/\/player.vimeo.com\/video\/1073556388?dnt=1&amp;app_id=122963\" width=\"500\" height=\"282\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Accessibility<\/strong><\/h3>\n\n\n\n<p>As Grid Lite renders data using semantically-correct HTML tables instead of custom divs, our data grids are automatically accessible to screen readers without the need for additional ARIA markup. Our API also includes configuration options for <a href=\"https:\/\/www.highcharts.com\/demo\/grid\/accessibility\">ARIA announcers<\/a> that are triggered when the composition of the grid changes due to cell sorting and editing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Works with React and other frameworks<\/strong><\/h3>\n\n\n\n<p>Grid Lite is a plain JavaScript library (for now) and plays well with most popular frameworks. <a href=\"https:\/\/www.highcharts.com\/docs\/grid\/wrappers\/grid-with-react\">Check out our documentation<\/a> for step-by-step instructions on how to render your grids in React, Angular and Vue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What\u2019s Next?<\/strong><\/h2>\n\n\n\n<p>This iteration of Highcharts Grid Lite is just the start. We have numerous features in development that we\u2019re hoping to roll out shortly, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Built-in data validation for cell data<\/li>\n\n\n\n<li>Out-of-the-box support for additional input types such as dropdown and checkboxes<\/li>\n\n\n\n<li>Built-in search and filtering<\/li>\n\n\n\n<li>Pagination configuration<\/li>\n\n\n\n<li>Sparklines inside cells<\/li>\n\n\n\n<li>Export options such as CSV, PDF and image formats<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Want to Try It?<\/strong><\/h2>\n\n\n\n<p>Start using Grid Lite today. You can find download\/install instructions <a href=\"https:\/\/www.highcharts.com\/docs\/grid\/installation\">in our docs<\/a>, and be sure to sign up for Grid Lite updates on our <a href=\"https:\/\/www.highcharts.com\/products\/grid\/\">product page<\/a>.&nbsp; And if you have time, check out the recording of our <a href=\"https:\/\/www.youtube.com\/watch?v=MA69igZxxzk\" target=\"_blank\" rel=\"noreferrer noopener\">Grid Lite webinar.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Read on to learn more about Grid Lite\u2019s features and how to get started.<\/p>\n","protected":false},"author":250,"featured_media":26625,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"meta_title":"","meta_description":"","hc_selected_options":[],"footnotes":""},"categories":[211],"tags":[1048],"coauthors":[786],"class_list":["post-26613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-highcharts-grid"],"_links":{"self":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/26613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/users\/250"}],"replies":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/comments?post=26613"}],"version-history":[{"count":2,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/26613\/revisions"}],"predecessor-version":[{"id":30357,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/26613\/revisions\/30357"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/media\/26625"}],"wp:attachment":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/media?parent=26613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/categories?post=26613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/tags?post=26613"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/coauthors?post=26613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}