The official React class-based wrapper for Handsontable.
JavaScript Data Grid with a spreadsheet-like look and feel.
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.
## 🪄 Installation
Below is the installation guide for the React class-based component. If you're using React with functional components or another framework, please refer to its dedicated wrapper for specific installation instructions.
- React functional component
- React class component
- Angular
- Vue
---
### Install Handsontable from [npm](https://www.npmjs.com/package/@handsontable/react) or [Yarn](https://yarnpkg.com/package/@handsontable/react).
```bash
npm install handsontable @handsontable/react
```
### Import CSS files
```jsx
// Base CSS rules
import 'handsontable/styles/handsontable.min.css';
// Main theme variables
import 'handsontable/styles/ht-theme-main.min.css';
```
### Register Handsontable's modules
```jsx
import { registerAllModules } from 'handsontable/registry';
registerAllModules();
```
### Use the `HotTable` component
The main Handsontable component is called `HotTable`.
```jsx
import { HotTable } from '@handsontable/react';
```
To set Handsontable's [configuration options](https://handsontable.com/docs/react-data-grid/configuration-options), use `HotTable`'s props. For example:
```jsx
import { HotTable, HotColumn } from '@handsontable/react';
import { registerAllModules } from 'handsontable/registry';
import 'handsontable/styles/handsontable.min.css';
import 'handsontable/styles/ht-theme-main.min.css';
registerAllModules();
const ExampleComponent = () => {
return (
## 🚀 Resources
- [Website](https://handsontable.com)
- [Demo](https://handsontable.com/demo)
- [Documentation](https://handsontable.com/docs/react-data-grid)
- [npm](https://www.npmjs.com/package/@handsontable/react)
- [CDN](https://www.jsdelivr.com/package/npm/@handsontable/react)
- [Forum](https://forum.handsontable.com/)
- [Blog](https://handsontable.com/blog)
- [Contact support team](https://handsontable.com/contact?category=technical_support)
- [Get a quote](https://handsontable.com/get-a-quote)
## 🤔 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](https://github.com/handsontable/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](https://github.com/handsontable/handsontable/discussions) to share ideas, suggest features, or discuss changes.
- Report any bugs you find on our [GitHub Issue Board](https://github.com/handsontable/handsontable/issues).
- Connect with other developers and find answers on our [Developer Forum](https://handsontable.com/forum).
If you have a commercial license, feel free to contact us directly at [support@handsontable.com](mailto:support@handsontable.com) or use our [contact form](https://handsontable.com/contact?category=technical_support).
## 📖 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](https://github.com/handsontable/handsontable/blob/master/handsontable-non-commercial-license.pdf).
### ② 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](https://handsontable.com/resellers). See the [pricing page](https://handsontable.com/pricing) for details.
## 🔑 License Key
For projects covered by the free non-commercial license, simply use the phrase `'non-commercial-and-evaluation'` as your license key.
If you're using Handsontable in a project that supports commercial activities, you'll need to purchase a license key at [handsontable.com/pricing](https://handsontable.com/pricing). You can find more details in [our documentation](https://handsontable.com/docs/license-key/).
## 🙌 Contributing
Contributions are welcome, but before you make them, please read the [Contributing Guide](https://github.com/handsontable/handsontable/blob/develop/CONTRIBUTING.md) and accept the [Contributor License Agreement](https://goo.gl/forms/yuutGuN0RjsikVpM2).