DataTables 3.0.0-beta.1
DataTables CDN files for DataTables 3.0.0-beta.1. This software was originally released on 6th April, 2026.
Release notes
A major update for DataTables - zero dependencies! There aren't a large number of big new features in this release, instead the focus has been on updating DataTables core and its extensions - they are now TypeScript based with ESM internals and more use of CSS variables.
These release notes are part of a number of related documents detailing the release process for DataTables 3:
New
Domandutillibraries that DataTables uses internally are now available and treeshakable.- In an ESM context DataTables now provides
Api,DataTable,Domandutilproperties that can be directly imported and used as values and / or types (when using TypeScript). columns().search()will now apply a search across the selected columns. This allows grouping of columns to give searching across a sub-set of the columns.search.columns- The search feature can be given a column selector to define which columns it should apply to. This allows a subset of columns, while other columns can still be searched using the API (or another instance of thesearchfeature).- Fixed search methods now accept a SearchOptions object, thus providing the same abilities as the regular search (e.g.
extract,boundary, etc options can be specified). language.ajaxoption. Basically the same aslanguage.url, but provides the ability to be used as an object or as a function, matchingajaxfor its extended capabilities. It can therefore be used to add HTTP headers (csrf for example), or to send data as part of the language Ajax request. The function can be used to get data from alternative locations such as websockets or local storage.DataTable.ajax()static method which can be used to make Ajax requests.DataTable.stripHtml()now accepts a second parameter, the replacement character:eq()selector for rows based on their position in the current data set- Expanded CSS variable support. In the default styling, pagination, inputs and cells can now all have styling defined with CSS variables. Naming convention is also now consistent.
- SCSS variables for ordering indicators
- DataTables is entirely Typescript based now and builds with tsc and rollup.
Removed
- API cache methods (
row().cache(),cell().cache()andcolumn().cache()- plus their plurals). These were deprecated in v2 and scheduled for removal in v3 which is now done. They were limited and error prone, with the data they access not always guaranteed to be present. The.render()method should be used instead if you were using these methods. - SCSS variables for styling - replaced with CSS variables.
scrollXInneroption. It was used to limit the scrolling width of the table in its container. Simply make the container smaller!DataTable.camelToHungarian()method that was used for compatibility
Breaking changes
- The DataTables internal properties have been entirely renamed (mostly a simple change to camelCase). If you used any of the internal settings for custom plugins or similar you will need to update them to use the new properties.
columns().search()used to apply the given search term to each column. It will now apply a single search to the selected columns.columns().search()when used as a getter will return the search value for the selected columns (or an empty string if there is no search value applied). Previously it would return an API instance.- Callback function scope has changed. It used to be a jQuery instance containing the table, and have an
api()function to access the API. Theapi()method stays exactly the same, but the scope is now aDomobject, since jQuery is not required by DataTables. This will only be an issue if you usethis.{jqueryMethod}()in the callback functions, which is very rarely done. formatNumberis not longer executed in the scope of the settings object. Rather it is passed in as the second parameter.trigger()now returnsdefaultPreventedin the result set, rather than the return values, which were error prone. Only if you usedtrigger()and its return value will this impact you.- If you happen to have your own header or footer renderer (
DataTable.ext.renderer.header), the second parameter passed in is no longer a jQuery object, but rather aDominstance. You are very unlikely to have a custom renderer here!
Updated
- Ordering icons are now generated by CSS (creating triangles with borders). This provides much more consistency between browsers, fonts and platforms. CSS variables are available to control the size, colour and opacity of the icons.
- Improved paging button styling for consistency with Buttons
- Tweaked the padding for the input controls for better visual consistency
- Make order indicator icons a little smaller
cells()will only get the cell nodes when needed for the selector. When used withcells().every()this massively improves performance.- Changing the column title
spanto be adivto allow block level elements to be nested in it. - ES6 target
Fixes
- Multi-line html elements could cause issues for column sizing
- When page length is set to -1 (all) the paging buttons should not show any numbers when there are no records (which now matches the behaviour when page length is >=1).
- Accessability - remove the
tfootelement if it is empty - Don't include
<template>tags in the sizing table - Element that contains the ordering icons should have height as it is focusable and the focus ring needs to be clearly visible
Deprecated
- With the new
language.ajaxoption,language.urlis now deprecated. However, it is fully supported and not scheduled for removal. It can continue to safely be used, but new projects should uselanguage.ajaxas it provides the same features plus more.
Examples
- Update chart example to use Charts.js
- Add new jQuery specific examples showing how to use DataTables with jQuery
- Remove jQuery version of each example and the option to switch between Vanilla JS and jQuery initialisation
- Remove JSONP example. JSONP is not available when using
DataTable.ajax(). Ideally you should switch to CORS, but if JSONP is required, useajaxas a function, to then calljQuery.ajaxif you have it on your page, or make use of some other JSONP library. - Update to not require jQuery
Docs
- Change name of
DataTables.SettingstoDataTable.Contextfor consistency. - Consistent naming for the types documentation, allowing an easier interchange with TypeScript.
- Updating related to preferred style
- Tidy up the auto links to preferred style
- Correction for
info.textexample code
Types
rows().nodes()return has the nodes at the top level of the API result set- Improve
each()signature - Fix
registerto allow arrays of names for aliases - Allow selector modifiers to be modified
- Allow the Language interface to be extended
- Improved types for
DataTable.extobject - Correct return type for the info
callbackfunction. - Corrections to generic data type for returned values from methods such as
orderable(),nodes()andindexes(). - Correction to scope for the callback function in
cells().every(). - Better type return from
flatten()andtoArray() - Add context to the iterator callbacks
- Expose the Defaults object
row().id()wasn't correctly types (used a plural instead)DataTable.version()only requires a single parameter
Files
css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bootstrap.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bootstrap.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bootstrap4.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bootstrap4.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bootstrap5.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bootstrap5.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bulma.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.bulma.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.dataTables.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.dataTables.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.foundation.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.foundation.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.jqueryui.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.jqueryui.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.material.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.material.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.semanticui.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.semanticui.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.tailwindcss.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.tailwindcss.min.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.uikit.css
- //cdn.datatables.net/3.0.0-beta.1/css/dataTables.uikit.min.css
js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap4.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap4.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap4.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap4.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap5.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap5.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap5.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bootstrap5.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bulma.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bulma.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bulma.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.bulma.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.dataTables.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.dataTables.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.dataTables.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.dataTables.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.foundation.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.foundation.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.foundation.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.foundation.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.jqueryui.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.jqueryui.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.jqueryui.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.jqueryui.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.material.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.material.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.material.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.material.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.semanticui.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.semanticui.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.semanticui.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.semanticui.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.tailwindcss.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.tailwindcss.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.tailwindcss.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.tailwindcss.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.uikit.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.uikit.min.js
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.uikit.min.mjs
- //cdn.datatables.net/3.0.0-beta.1/js/dataTables.uikit.mjs