Noureddine RAMDI / Frappe DataTable: a lightweight, high-performance JavaScript datagrid without jQuery

Created Tue, 05 May 2026 13:37:39 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

frappe/datatable

Frappe DataTable tackles a problem every web developer knows well: how to efficiently render and interact with large tabular datasets in the browser without dragging in bulky dependencies or sacrificing essential features like inline editing and keyboard navigation. Originally born to replace the aging SlickGrid in ERPNext, this library rewrites the data grid from scratch in vanilla JavaScript, focusing squarely on performance and modern UX patterns.

What Frappe DataTable does and its architecture

At its core, Frappe DataTable is a lightweight, modern JavaScript library for rendering large, complex tables in web applications. It provides all the expected features of a data grid: inline cell editing, keyboard navigation, column reordering and resizing, mouse selection, and support for hierarchical tree-structured rows.

One key architectural choice is the complete removal of jQuery, which was a dependency in SlickGrid. This streamlines the footprint and improves compatibility with modern frameworks and bundlers. The library is written in vanilla JavaScript, which means no extra runtime dependencies. This is an explicit design decision to keep the codebase lean and performant.

Under the hood, the library optimizes performance for large datasets by dynamically calculating row heights and minimizing DOM updates—critical for smooth scrolling and interaction when dealing with thousands of rows. It also supports custom cell formatters, allowing developers to tailor how cells render beyond simple text values.

The codebase itself is organized conventionally, using yarn as the package manager and commitizen for conventional commit messages, which promotes a clean development workflow. The development setup includes a dev server and linting tools to maintain code quality.

What makes Frappe DataTable technically interesting

The standout aspect of this project is its balance between feature completeness and performance without relying on heavy dependencies. Achieving inline editing and keyboard navigation in a performant way, especially with large datasets, is challenging because these features typically require frequent DOM manipulations and event handling.

The library addresses these challenges with a few notable tradeoffs and strengths:

  • Vanilla JS implementation: By avoiding jQuery or large frameworks, it keeps the runtime lightweight and reduces compatibility issues. However, this means the library has to implement common utilities internally, potentially increasing maintenance burden.

  • Dynamic row heights: Instead of fixed heights, which can be limiting for variable content, the grid calculates and adjusts row sizes on the fly. This adds complexity but improves UX for heterogeneous data.

  • Tree-structured rows: Supporting expandable hierarchical data within the grid is non-trivial, but critical for enterprise use cases like ERP systems where nested data is common.

  • Custom formatters and filters: Flexibility here is key for real-world apps that need to display complex data types and allow inline filtering.

  • Keyboard and mouse navigation: These improve accessibility and user efficiency but require robust event management and focus control.

The code quality appears solid, with linting and commit standards enforced. The use of modern JavaScript idioms and patterns suggests the code is maintainable and understandable for developers familiar with ES6+.

That said, the library’s focus on performance means some edge cases or less common features might not be fully covered out of the box. Also, without jQuery, those used to that ecosystem might find some common helpers missing.

Development setup and quickstart

The project’s README provides a straightforward development setup using yarn:

# Start the development server
$ yarn start

# Open index.html in the root folder to view and develop

# Run linting before committing
$ yarn lint

# Use commitizen to commit with conventional messages
$ yarn commit

This setup facilitates quick iteration and clean commits, which is a good sign for contributors. The presence of an index.html file at the root suggests an easy entry point for seeing the datatable in action or building demos.

Who should consider Frappe DataTable?

This library is well suited for developers building web applications that need to display and interact with large tabular datasets efficiently, especially when:

  • You want a dependency-free, vanilla JS solution without jQuery.
  • Inline editing, keyboard navigation, and tree rows are important UX requirements.
  • You need performance optimizations for large datasets (thousands of rows).
  • You want customization via cell formatters and filters.

However, if you rely heavily on jQuery or need a drop-in replacement for SlickGrid with all of its legacy ecosystem, this might require some adjustment. Also, while the library is performant, the tradeoff is a more manual approach to integration and possibly fewer convenience utilities.

Overall, Frappe DataTable solves a real problem with a pragmatic approach to modern JavaScript and performance. It’s worth exploring if you’re building enterprise-grade data grids and want to avoid bulky dependencies or legacy codebases.


→ GitHub Repo: frappe/datatable ⭐ 1,308 · JavaScript