MCPcopy
hub / github.com/handsontable/handsontable

github.com/handsontable/handsontable @18.0.0 sqlite

repository ↗ · DeepWiki ↗ · release 18.0.0 ↗
11,269 symbols 52,277 edges 4,174 files 3,903 documented · 35%
README
<img width="360" alt="Logo of Handsontable data grid" src="https://github.com/handsontable/handsontable/blob/develop/resources/handsontable-logo-black.svg?raw=true"/>

Handsontable is a JavaScript Data Grid with a spreadsheet-like look and feel.

Use it with JavaScript, TypeScript, or frameworks such as 
<a href="https://github.com/handsontable/handsontable/tree/master/wrappers/react-wrapper" target="_blank">React</a>, 
<a href="https://github.com/handsontable/handsontable/tree/master/wrappers/angular-wrapper" target="_blank">Angular</a>, and 
<a href="https://github.com/handsontable/handsontable/tree/master/wrappers/vue3" target="_blank">Vue</a>. With its spreadsheet-like editing features, it’s perfect for building data-rich internal apps. It allows users to enter, edit, validate, and process data from various sources. Common use cases include resource planning software (ERP), inventory management systems, digital platforms, and data modeling applications.

Website   —   Documentation   —   Themes   —   API   —   Community

NPM version Total downloads Monthly downloads Contributors

CI status Quality gate status FOSSA status

<img width="780" alt="JavaScript data grid preview" src="https://github.com/handsontable/handsontable/blob/develop/resources/handsontable-preview-light-theme.png?raw=true"/>

✨ Key Features

  ✅  Built-in themes

  ✅  Flexible API

  ✅  Virtualization

  ✅  IME support

  ✅  Internationalization

  ✅  RTL support

  ✅  Accessibility

  ✅  Keyboard shortcuts

  ✅  Sorting data

  ✅  Filtering data

  ✅  400 built-in formulas

  ✅  Configurable selection

  ✅  Data validation

  ✅  Conditional formatting

  ✅  Merged cells

  ✅  Frozen rows and columns

  ✅  Hiding rows and columns

  ✅  Right-click context menu

  ✅  Row pagination

  ✅  Server-side data

  ✅  Notifications

  ✅  Export to Excel

🪄 Installation

Below, you'll find the installation guide for the JavaScript component. If you're using a specific framework, refer to its dedicated wrapper for installation instructions:


Install with npm

You can also use Yarn, NuGet or load the package from CDN.

bash npm install handsontable

Provide an HTML container

```html

```

Setup

```js import Handsontable from 'handsontable';

const element = document.getElementById('handsontable-grid');

new Handsontable(element, { data: [ { company: 'Tagcat', country: 'United Kingdom', rating: 4.4 }, { company: 'Zoomzone', country: 'Japan', rating: 4.5 }, { company: 'Meeveo', country: 'United States', rating: 4.6 }, ], columns: [ { data: 'company', title: 'Company', width: 100 }, { data: 'country', title: 'Country', width: 170, type: 'dropdown', source: ['United Kingdom', 'Japan', 'United States'] }, { data: 'rating', title: 'Rating', width: 100, type: 'numeric' }, ], rowHeaders: true, navigableHeaders: true, tabNavigation: true, multiColumnSorting: true, headerClassName: 'htLeft', licenseKey: 'non-commercial-and-evaluation', });

```

Static Badge

CDN-based setup

  Show/Hide code

If your environment does not support imports, you can use the code below to quickly set up and run a data grid with basic configuration options.

```html

Handsontable - JavaScript Data Grid Example

```

🎨 Themes

Handsontable themes control how your data table looks: colors, spacing, typography, borders, and overall visual style.

You get three built-in themes out of the box: - main – modern, clean, default choice - horizon – lighter, spacious feel - classic – traditional spreadsheet look

Each theme supports: - ️Light mode - Dark mode

JavaScript data grid preview

🏗️ Custom Themes

You can style Handsontable to match your product’s visual identity by creating a custom theme. Use the Theme API to extend a built-in theme and apply your own styling while keeping support for light/dark modes and density settings.

To stay aligned with design, you can rely on the:

🚀 Resources

🤔 Is Handsontable a Data Grid or a Spreadsheet?

Handsontable is a data grid component written in JavaScript, not a spreadsheet. However, it brings in many features typically found in spreadsheet software. We designed it this way because spreadsheet-like patterns are often the most user-friendly when it comes to data entry and management.

Spreadsheet-like features in Handsontable:

  • Keyboard shortcuts compliant with either Google Sheets or Excel
  • 400 spreadsheet formulas via native integration with HyperFormula
  • Keyboard navigation across headers that can be disabled, making only cells navigable
  • TAB navigation across cells that can be disabled
  • Built-in undo-redo functionality
  • Powerful clipboard capabilities for copy-paste operations
  • Ability to scroll the grid within the container (div) or window
  • Data binding in the form of an array of objects or arrays of arrays
  • Built-in cell editors like a date picker or dropdown list

At first glance, it might seem that a data table, spreadsheet, and data grid are just different names for the same thing - an interactive table displaying data. In reality, these tools serve different purposes and offer distinct functionalities, designed to meet specific needs. Handsontable sits comfortably in the data grid category while incorporating many of the best aspects of spreadsheet software.

🛟 Support

We're here to help!

If you're using Handsontable with a free, non-commercial license, you can: - Join the conversation on GitHub Discussions to share ideas, suggest features, or discuss changes. - Report any bugs you find on our GitHub Issue Board. - Connect with other developers and find answers on our Developer Forum.

If you have a commercial license, feel free to contact us directly at support@handsontable.com or use our contact form.

📖 Licenses

Handsontable is available under two licensing options, allowing you to choose the one that best fits your needs. Each license comes with its own terms and conditions, as outlined below:

① Free license for non-commercial use, and evaluation purposes

This license is available for non-commercial purposes such as teaching, academic research, or evaluation. It allows you to use Handsontable free of charge under the terms specified in the non-commercial license agreement.
Learn more here.

② Commercial license

For commercial use, a paid license is required. This license includes support and maintenance to ensure you get the most out of Handsontable. The commercial license can be purchased directly from Handsoncode or through an authorized reseller. See the pricing page for details.

🔑 License Key

For projects covered by the free non-commercial license, simply use the phrase `'non

Extension points exported contracts — how you extend this code

CalculationTypeLike (Interface)
(no doc) [6 implementers]
handsontable/src/3rdparty/walkontable/src/calculator/viewportBase.ts
BaseRendererParametersObject (Interface)
* An object representing the parameters passed to a Handsontable renderer.
wrappers/angular-wrapper/projects/hot-table/src/lib/renderer/hot-dynamic-renderer-component.service.ts
ProductRepository (Interface)
Spring Data repository for Product entities. Extending JpaSpecificationExecutor enables the `findAll(Specification, Pag
docs/content/recipes/data-management/server-side-spring/server/ProductRepository.java
Spec (Interface)
(no doc)
wrappers/react-wrapper/test/_helpers.tsx
HotTableProps (Interface)
(no doc)
wrappers/vue3/src/types.ts
VersionEntry (Interface)
(no doc)
docs/src/components/VersionComparison/types.ts
ToggleableOptions (Interface)
(no doc)
examples/next/docs/react-wrapper/accessibility/src/App.tsx
ColumnVisibility (Interface)
(no doc) [8 implementers]
handsontable/src/plugins/nestedHeaders/stateManager/columnVisibility.ts

Core symbols most depended-on inside this repo

handsontable
called by 8779
handsontable/test/helpers/common.js
$
called by 4884
handsontable/test/helpers/asciiTable.js
createSpreadsheetData
called by 4459
handsontable/src/helpers/data.ts
spec
called by 3327
handsontable/src/3rdparty/walkontable/test/helpers/common.js
getPlugin
called by 3271
handsontable/src/plugins/registry.ts
selectCell
called by 2757
visual-tests/src/page-helpers.ts
setValueAtIndex
called by 1348
handsontable/src/translations/maps/indexMap.ts
registerAllModules
called by 1345
handsontable/src/registry.ts

Shape

Function 5,436
Method 4,136
Class 1,339
Interface 349
Enum 6
Route 3

Languages

TypeScript99%
Java1%
Python1%

Modules by API surface

handsontable/src/core/types.ts158 symbols
handsontable/test/helpers/common.js110 symbols
handsontable/src/tableView.ts82 symbols
handsontable/test/lib/jquery.min.js75 symbols
handsontable/src/helpers/dom/element.ts71 symbols
handsontable/src/3rdparty/walkontable/test/lib/jquery.min.js63 symbols
handsontable/src/3rdparty/walkontable/src/cell/range.ts61 symbols
handsontable/src/plugins/notification/notification.ts58 symbols
visual-tests/src/page-helpers.ts57 symbols
handsontable/src/3rdparty/walkontable/src/core/_base.ts57 symbols
handsontable/src/selection/selection.ts55 symbols
handsontable/src/3rdparty/walkontable/test/helpers/common.js51 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

Dependencies from manifests, versioned

@actions/core1.11.1 · 1×
@actions/github6.0.0 · 1×
@angular-devkit/build-angular19.2.23 · 1×
@angular-eslint/builder19.8.1 · 1×
@angular-eslint/eslint-plugin19.8.1 · 1×
@angular-eslint/eslint-plugin-template19.8.1 · 1×
@angular-eslint/schematics19.8.1 · 1×
@angular-eslint/template-parser19.8.1 · 1×
@angular/animationslatest · 1×
@angular/cli19.2.23 · 1×
@angular/common19.2.20 · 1×
@angular/compiler19.2.16 · 1×

For agents

$ claude mcp add handsontable \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact