# marksalmon/laravel-datatables architecture

> Architecture diagram of the GitHub repository marksalmon/laravel-datatables, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/marksalmon/laravel-datatables
- Repository: https://github.com/marksalmon/laravel-datatables

## Overview

Laravel DataTables adapts collection, query-builder, and Eloquent data sources to the jQuery DataTables server-side AJAX protocol. The main workflow accepts table parameters, selects an engine, filters/orders/pages data, processes rows, and returns a JSON response; the package also builds client-side table markup and supports print and file exports. The core wiring is supported by the README and sampled engines/services; some unsampled factory and response details are represented only at the subsystem level.

Main entry points: [`src/Services/DataTable.php`](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Services/DataTable.php) (Table Service), [`src/Datatables.php`](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Datatables.php) (Engine Factory), [`src/Html/Builder.php`](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Builder.php) (HTML Builder), [`src/Engines/BaseEngine.php`](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/BaseEngine.php) (Engine Base)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Laravel Entry"]
  node_datatable_facade["Facade<br/>[Datatables.php]"]
  node_datatable_factory["Engine Factory<br/>[Datatables.php]"]
  node_datatable_service["Table Service<br/>[DataTable.php]"]
  node_request["DataTables Request<br/>[Request.php]"]
  node_provider["Service Provider"]
end

subgraph group_query["Data Query"]
  node_collection_engine["Collection Engine"]
  node_eloquent_engine["Eloquent Engine<br/>[EloquentEngine.php]"]
  node_query_engine["Query Builder Engine"]
  node_base_engine["Engine Base<br/>[BaseEngine.php]"]
end

subgraph group_response["Response Processing"]
  node_processor["Data Processor<br/>[DataProcessor.php]"]
  node_row_processor["Row Processor<br/>[RowProcessor.php]"]
  node_transformer["Data Transformer"]
end

subgraph group_presentation["Table Presentation"]
  node_html_builder["HTML Builder<br/>[Builder.php]"]
  node_html_column["Column Definition<br/>[Column.php]"]
  node_html_parameters["Table Parameters<br/>[Parameters.php]"]
  node_script_view["Script Template<br/>[script.blade.php]"]
  node_print_view["Print Template<br/>[print.blade.php]"]
  node_server_buttons["Server Buttons"]
  node_config["Package Config<br/>[config.php]"]
end

node_user(("Application"))
node_source_data[("Data Source")]
node_datatable_client(("DataTables Client"))
node_export_service["Export Providers"]

node_user -->|"invokes"| node_datatable_facade
node_datatable_facade -->|"forwards calls"| node_datatable_factory
node_datatable_factory -->|"selects engine"| node_collection_engine
node_datatable_factory -->|"selects engine"| node_eloquent_engine
node_datatable_factory -->|"selects engine"| node_query_engine
node_datatable_service -->|"creates tables"| node_datatable_factory
node_datatable_service -->|"reads parameters"| node_request
node_datatable_client -->|"sends AJAX"| node_request
node_request -->|"supplies options"| node_base_engine
node_collection_engine -->|"inherits behavior"| node_base_engine
node_eloquent_engine -->|"wraps query"| node_query_engine
node_query_engine -->|"inherits behavior"| node_base_engine
node_collection_engine -->|"reads collection"| node_source_data
node_query_engine -->|"queries records"| node_source_data
node_base_engine -->|"processes results"| node_processor
node_processor -->|"builds row metadata"| node_row_processor
node_base_engine -->|"returns JSON"| node_datatable_client
node_datatable_service -->|"maps export rows"| node_transformer
node_datatable_service -->|"requests exports"| node_export_service
node_datatable_service -->|"renders preview"| node_print_view
node_datatable_service -->|"builds table"| node_html_builder
node_html_builder -->|"defines columns"| node_html_column
node_html_builder -->|"encodes options"| node_html_parameters
node_html_builder -->|"renders script"| node_script_view
node_datatable_client -.->|"uses buttons"| node_server_buttons
node_html_builder -->|"reads defaults"| node_config
node_provider -->|"registers service"| node_datatable_factory
node_provider -->|"loads views"| node_script_view
node_provider -->|"publishes asset"| node_server_buttons
node_export_service -.->|"provides export"| node_datatable_service

click node_datatable_facade "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Facades/Datatables.php"
click node_datatable_factory "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Datatables.php"
click node_datatable_service "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Services/DataTable.php"
click node_request "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Request.php"
click node_provider "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/DatatablesServiceProvider.php"
click node_collection_engine "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/CollectionEngine.php"
click node_eloquent_engine "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/EloquentEngine.php"
click node_query_engine "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/QueryBuilderEngine.php"
click node_base_engine "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/BaseEngine.php"
click node_processor "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Processors/DataProcessor.php"
click node_row_processor "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Processors/RowProcessor.php"
click node_transformer "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Transformers/DataTransformer.php"
click node_html_builder "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Builder.php"
click node_html_column "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Column.php"
click node_html_parameters "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Parameters.php"
click node_script_view "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/resources/views/script.blade.php"
click node_print_view "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/resources/views/print.blade.php"
click node_server_buttons "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/resources/assets/buttons.server-side.js"
click node_config "https://github.com/marksalmon/laravel-datatables/blob/6.0/src/config/config.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_datatable_facade,node_datatable_factory,node_datatable_service,node_request,node_provider,node_datatable_client toneBlue
class node_collection_engine,node_eloquent_engine,node_query_engine,node_base_engine,node_source_data toneAmber
class node_processor,node_row_processor,node_transformer toneMint
class node_html_builder,node_html_column,node_html_parameters,node_script_view,node_print_view,node_server_buttons,node_config toneRose
class node_user,node_export_service toneIndigo
```

## Components

### Laravel Entry

- [Facade](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Facades/Datatables.php): `src/Facades/Datatables.php`
- [Engine Factory](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Datatables.php): `src/Datatables.php`
- [Table Service](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Services/DataTable.php): `src/Services/DataTable.php`
- [DataTables Request](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Request.php): `src/Request.php`
- [Service Provider](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/DatatablesServiceProvider.php): `src/DatatablesServiceProvider.php`

### Data Query

- [Collection Engine](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/CollectionEngine.php): `src/Engines/CollectionEngine.php`
- [Eloquent Engine](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/EloquentEngine.php): `src/Engines/EloquentEngine.php`
- [Query Builder Engine](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/QueryBuilderEngine.php): `src/Engines/QueryBuilderEngine.php`
- [Engine Base](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Engines/BaseEngine.php): `src/Engines/BaseEngine.php`

### Response Processing

- [Data Processor](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Processors/DataProcessor.php): `src/Processors/DataProcessor.php`
- [Row Processor](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Processors/RowProcessor.php): `src/Processors/RowProcessor.php`
- [Data Transformer](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Transformers/DataTransformer.php): `src/Transformers/DataTransformer.php`

### Table Presentation

- [HTML Builder](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Builder.php): `src/Html/Builder.php`
- [Column Definition](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Column.php): `src/Html/Column.php`
- [Table Parameters](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/Html/Parameters.php): `src/Html/Parameters.php`
- [Script Template](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/resources/views/script.blade.php): `src/resources/views/script.blade.php`
- [Print Template](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/resources/views/print.blade.php): `src/resources/views/print.blade.php`
- [Server Buttons](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/resources/assets/buttons.server-side.js): `src/resources/assets/buttons.server-side.js`
- [Package Config](https://github.com/marksalmon/laravel-datatables/blob/6.0/src/config/config.php): `src/config/config.php`

### Other components

- **Application**
- **Data Source**
- **DataTables Client**
- **Export Providers**

## Connections

- Application → Facade: invokes
- Facade → Engine Factory: forwards calls
- Engine Factory → Collection Engine: selects engine
- Engine Factory → Eloquent Engine: selects engine
- Engine Factory → Query Builder Engine: selects engine
- Table Service → Engine Factory: creates tables
- Table Service → DataTables Request: reads parameters
- DataTables Client → DataTables Request: sends AJAX
- DataTables Request → Engine Base: supplies options
- Collection Engine → Engine Base: inherits behavior
- Eloquent Engine → Query Builder Engine: wraps query
- Query Builder Engine → Engine Base: inherits behavior
- Collection Engine → Data Source: reads collection
- Query Builder Engine → Data Source: queries records
- Engine Base → Data Processor: processes results
- Data Processor → Row Processor: builds row metadata
- Engine Base → DataTables Client: returns JSON
- Table Service → Data Transformer: maps export rows
- Table Service → Export Providers: requests exports
- Table Service → Print Template: renders preview
- Table Service → HTML Builder: builds table
- HTML Builder → Column Definition: defines columns
- HTML Builder → Table Parameters: encodes options
- HTML Builder → Script Template: renders script
- DataTables Client → Server Buttons: uses buttons
- HTML Builder → Package Config: reads defaults
- Service Provider → Engine Factory: registers service
- Service Provider → Script Template: loads views
- Service Provider → Server Buttons: publishes asset
- Export Providers → Table Service: provides export
