modern-table-js
Version:
Modern, lightweight, vanilla JavaScript table library with zero dependencies. 67% faster than DataTables with mobile-first responsive design.
303 lines (243 loc) ⢠8.84 kB
Markdown
with modern ES6 architecture**
[](https://www.npmjs.com/package/modern-table-js)
[](https://opensource.org/licenses/MIT)
[](https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/)



⨠Features
š Zero Dependencies - Pure vanilla JavaScript
š± Mobile First - Smart responsive design
ā” High Performance - Optimized for large datasets
šØ Modern UI - Beautiful default styling
š Plugin System - Extensible architecture
š Dark Mode - Built-in theme support
āØļø Keyboard Navigation - Full accessibility
š Server-side Processing - Laravel/PHP ready
š Individual Column Search - Search each column independently
šÆ DataTables Compatible - Easy migration
- **`serverSide: true/false`** - Exact same syntax as DataTables
- **`dataSrc` support** - Built-in response transformation
- **Auto mode detection** - Smart client vs server-side processing
- **Easy migration** - Drop-in replacement for DataTables
```html
<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/modern-table.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/responsive.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/themes.css" rel="stylesheet"> <!-- Required for dark mode -->
<!-- JavaScript (Minified) -->
<script src="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/dist/modern-table.min.js"></script>
<!-- OR ES Module -->
<script type="module" src="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/core/ModernTable.js"></script>
```
```html
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/modern-table.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/responsive.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/themes.css" rel="stylesheet"> <!-- For dark mode -->
<script src="https://cdn.jsdelivr.net/npm/modern-table-js@1.0.9/dist/modern-table.min.js"></script>
```
```bash
npm install modern-table-js
```
```javascript
import { ModernTable } from "modern-table-js";
const table = new ModernTable("#myTable", {
api: "/api/users", // Server-side data
columns: [
{ data: "name", title: "Name" },
{ data: "email", title: "Email" },
{ data: "status", title: "Status" },
{ data: "action", title: "Actions", searchable: false }, // Skip search
],
responsive: true,
select: true,
columnSearch: true, // Enable individual column search
buttons: ["copy", "csv", "excel"],
});
```
```javascript
const table = new ModernTable("#myTable", {
api: {
url: "/api/users",
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
"X-CSRF-TOKEN": document.querySelector('meta[name="csrf-token"]').content,
},
},
columns: [
{ data: "name", title: "Name" },
{ data: "email", title: "Email" },
{ data: "status", title: "Status" },
],
});
```
```javascript
const users = [
{ name: "John Doe", email: "john@example.com", status: "active" },
{ name: "Jane Smith", email: "jane@example.com", status: "inactive" },
];
const table = new ModernTable("#myTable", {
data: users, // Client-side data
columns: [
{ data: "name", title: "Name" },
{ data: "email", title: "Email" },
{ data: "status", title: "Status" },
],
responsive: true,
select: true,
buttons: ["copy", "csv", "excel"],
});
```
```javascript
const table = new ModernTable("#table", {
// Data source (simple)
api: "/api/data",
// Data source (with auth and callbacks)
api: {
url: "/api/users",
headers: {
Authorization: "Bearer " + localStorage.getItem("token"),
"X-CSRF-TOKEN": document.querySelector('meta[name="csrf-token"]').content,
},
// Before request is sent (like beforeSend)
beforeSend: function (params) {
console.log("beforeSend");
// Return false to abort request
},
// On successful response (like success)
success: function (data, textStatus, response) {
console.log("Request successful:", data);
},
// On error (like error)
error: function (error, textStatus, errorThrown) {
console.error("Request failed:", error);
alert("Failed to load data");
// Return fallback data to prevent table error
return {
data: [],
recordsTotal: 0,
recordsFiltered: 0,
};
},
// Always runs (like complete)
complete: function () {
console.log("Request completed");
},
// Legacy support
beforeRequest: function (config) {
// Modify request config
return config;
},
},
// Columns configuration
columns: [
{ data: "name", title: "Name", orderable: true },
{ data: "email", title: "Email" },
{
data: "status",
title: "Status",
render: (data) => `<span class="badge">${data}</span>`,
},
],
serverSide: true,
// Features
pageLength: 10,
lengthMenu: [5, 10, 25, 50],
order: [[2, "desc"]], // name column
ordering: true,
searching: true,
columnSearch: true,
paging: true,
select: true,
responsive: true,
// UX
theme: "auto",
keyboard: true,
accessibility: true,
// State
stateSave: true,
stateDuration: 3600,
// Callbacks (DataTables compatible)
initComplete: function(data, meta) {
console.log('Table initialized with', data.length, 'rows');
},
drawCallback: function(data) {
console.log('Table redrawn');
},
rowCallback: function(row, data, index) {
// Customize row appearance
if (data.status === 'inactive') {
row.classList.add('table-warning');
}
},
onRowClick: function(data, index, event) {
console.log('Row clicked:', data);
},
onSelectionChange: function(selectedRows) {
console.log('Selection changed:', selectedRows.length, 'rows selected');
}
});
```
For complete documentation, examples, and advanced features, visit our [Documentation Hub](./docs/).
- [Column Configuration](./docs/columns.md) - Setup columns and rendering
- [Button System](./docs/buttons.md) - Built-in and custom buttons
- [API Integration](./docs/api-integration.md) - Server-side data handling
- [Laravel Integration](./docs/integrations/laravel.md) - PHP backend setup
- [TypeScript Support](./docs/typescript.md) - Type definitions
- [API Parameter Transformation](./docs/api-parameter-transformation.md) - External API integration
Built-in CSS files: `modern-table.css`, `themes.css`, `responsive.css`
```javascript
const table = new ModernTable('#myTable', {
theme: 'auto', // 'light', 'dark', or 'auto'
});
```
- **67% faster** than DataTables
- **Zero dependencies** - Pure vanilla JavaScript
- **Mobile-first** responsive design
- **Browser support**: Chrome 60+, Firefox 55+, Safari 12+, Edge 79+
```javascript
// DataTables ā ModernTable (same syntax!)
const table = new ModernTable('#myTable', {
api: '/api/users',
serverSide: true,
columns: [...]
});
```
MIT License - see [LICENSE](LICENSE) file for details.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## Support
- š§ Email: support@modern-table-js.com
- š Issues: [GitHub Issues](https://github.com/your-repo/modern-table-js/issues)
- š Documentation: [Full Documentation](https://modern-table-js.com/docs)
- š¬ Community: [Discord Server](https://discord.gg/modern-table-js)
```
**Zero-dependency, DataTables-compatible table library