Demo Github

Populate tables with data from the server using JavaScript; includes sorting, and pagination.

Tabular demo on Lugo Labs


From source

Clone the git repo.

Install dependencies with node:

Run the default Grunt tasks:

Use the tabular.js or tabular.min.js in the build folder.

From built files

Download the tabular.js or tabular.min.js in the build folder.


Tabular provides a minimal layout of the table, trying to be as flexible as possible, without specific styles in mind. Most of the HTML elements generated have CSS classes in them, so that you may add your own styles, or using styles provided by CSS frameworks like Bootstrap or Foundation.

Tabular comes with a minimal tabular.css you may download from the css folder.

Start tabular

Start tabular by passing options:

tabular.start('#tabular', {
  columns: [
    { title: 'Id',          name: 'id' },
    { title: 'Title',       name: 'title' },
    { title: 'First name',  name: 'first_name' },
    { title: '',            name: 'edit_link', sort: false }
  source: '/users.json',
  plugins: [
      Search: {
        formClass:  'form-horizontal col-md-3 pull-xs-right',
        inputClass: 'form-control form-control-sm'
      Pagination: {
        containerClass: 'col-md-6',
        buttonClass:    'btn btn-sm btn-secondary'
  tableClass:  'table table-striped m-t-2',
  headerClass: 'row'

The first argument is the selector of the table container, also called the main element. This will be used to append all the generated markup, also to listen and trigger events that the plugins use to communicate.


Tabular comes with several plugins:


It renders the markup of the table, as well as the header and footer.

It triggers the following event on the main element:

  • view:header - after the header of the element is rendered. The default view plugins bind to this event to render their markup.
  • view:footer - after the footer of the element is rendered.
  • view:tableHead - after the table thead is rendered. A reference to the thead is passed to the event handler.
  • view:afterRender - after the server response is rendered on the table, a copy of the response is passed to the event handler.

It binds to the following events:

  • model:success - to render the new data on the table.


A simple jQuery Ajax wrapper used to fetch data from the server. It uses events to specify when the fetching data from server starts and completes.

The model listens to the following events on the main element:

  • model:fetch - it starts fetching data from server using GET. It sends to the server any data passed. Trigger it with an instance of the main element thus:
element.trigger('model:fetch', [{ q: 'apple' }, true]);

The first element of the data passed to the event:

{ q: 'apple' }

is the request data, whereas the second element resets the model's metadata. Unless specified, the model saves the metadata between fetches.

The model triggers the following events:

  • model:startFetch - just before the request starts
  • model:stopFetch - after the response is back, it sends the response unchanged to the event listener.
  • model:success - after the response is back, it sends the response unchanged to the event listener.


It adds pagination, passing the page number and size on each request. Accepts the following options:

  • pageSizes: Array of integers, if not provided it defaults to [10, 25, 50]
  • containerClass: String to be applied to the paginator container
  • selectClass: String to be added to the select elements
  • buttonClass: String to be added to the button elements


It turns table headings into links for sorting. Sort makes use of the sort flag on columns option to decide which column to apply sorting to.


It uses a search form to send the term to the server. Accepts the following options:

  • formClass: String to be applied to the search form
  • inputClass: String to be applied to the search box


A simple loader showing and hiding before and after each server request respectively


With npm:

npm test

With grunt:

grunt mocha

Or just run:

grunt watch

which watches for changes to the source files and rebuilds the build files.


  • jQuery

Happy tabulating!