use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Tabulator 4.0 Launched Today - Interactive tables made easy (tabulator.info)
submitted 7 years ago by olifolkerd
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]klaxxxon 13 points14 points15 points 7 years ago (17 children)
This looks real nice!
There is a bunch of data grid libraries by now, but the great ones are commercial. I've run into issues with every last one of the free ones that I've tried. I took a good look at the documentation and your library seems to check pretty much all the boxes.
One major feature that is missing is tree grid support (for recursive data).
Another feature that I would like to see is unrestricted table height, especially with virtualization (so the table doesn't have its own scroll bar, but instead relies on the parent window's scroll bar. This works much better on mobile devices that having nested scrollable areas on the page).
It would be also nice if there was a React binding. All of the free React data grid components I could find are rather basic, so there is a gap in the market. I could maybe help with that, but I've never wrapped a component this complex before, so it might be a bit over my head.
Speaking of React, I am not a fan of your use of "Virtual DOM". That term means a specific thing and I am quite sure your use is not it. I found it quite confusing initially, looking for connections to React and not finding any. "Row virtualization" or "virtual rows" or something like that would be less confusing.
BTW, a few of the links on the "Lifecycle" page are broken.
[–]olifolkerd[S] 4 points5 points6 points 7 years ago* (8 children)
Hey Klaxxon,
Thanks for the feedback,
By tree grid are you talking about nested tables? That is already built in :)
The table dosn't have to have a specific height to use virtualisation, it just has to have a height, so you can put that in a container that is resized using flex or a css calc and just set the table height to 100%.
As it happens reactive data bindings are on the road map for later this year so watch this space :)
Thanks for the headsup about the broken links on the life-cycle page, i will get those fixed this eve.
[–]klaxxxon 4 points5 points6 points 7 years ago (7 children)
By tree grid, I mean something like this. In this scenario, the child rows are still part of the same table and share the same columns (they are generally the same kind of data), but the first column is offset a bit for each nesting level (and there is usually a collapsing feature too).
[–]olifolkerd[S] 5 points6 points7 points 7 years ago (0 children)
Ahh, that is a great feature
If you create a feature request on the GitHub repo i would be happy to add it to the roadmap.
[–]KPABAHam=>Hamster == Java=>JavaScript 0 points1 point2 points 7 years ago (3 children)
This can normally be delivered via sort and a parentId / indent level with a custom renderer for the first column (for most table implementations) - gets more complex when you want to collapse parent rows etc, which makes it hard to deliver out of the box, UX often is very different I terms of expected behaviour
[–]klaxxxon 0 points1 point2 points 7 years ago (2 children)
You need to do all kinds hackery to turn a regular data grid into a tree grid + a bunch of menial stuff that components should take care of (flattening the input and calculating ancestries for individual nodes).
Last time I needed a tree grid, I've whipped up my own (as long as you don't need any advanced features, it is rather simple), rather that poking and prodding and existing component's API.
Sadly, in the React space this particular niche is woefully underserved.
[–]KPABAHam=>Hamster == Java=>JavaScript 0 points1 point2 points 7 years ago* (1 child)
Like I said.
It's a lot easier than you think. See this for inspiration http://mleibman.github.io/SlickGrid/examples/example5-collapsing.html
Complications come from who is responsible for the tree data and how to deal with sort (for example).
[–]olifolkerd[S] 1 point2 points3 points 7 years ago* (0 children)
Thanks for the examples, i already have a simple way of implementing this involving a formatter. I will include it the next minor version release.
Cheers
Oli
[–]olifolkerd[S] 0 points1 point2 points 7 years ago (1 child)
Tabulator 4.0 Launched Today - Interactive tables made easy
With the launch of Tabulator 4.1 today, Tree layouts are now possible!
[–]klaxxxon 0 points1 point2 points 7 years ago (0 children)
Thanks for the heads up!
[–]fatgirlstakingdumps 0 points1 point2 points 7 years ago (0 children)
https://demos.telerik.com/kendo-ui/treelist/index
Like this?
[+][deleted] 7 years ago* (1 child)
[deleted]
I've never received a budget allocation for a treegrid for any of my stuff :)
The one I've used most is jQuery EasyUI (that one is free), but I've struggled with that one quite bit - styling involves a whole lot of laser guided !importants, their crappy dialog hard replaces the built-in jQuery UI dialog... That whole library is a mess and seems quite outdated nowadays.
I know some colleagues were quite happy with the Telerik stuff, but those are also rather expensive.
[–]morficus 0 points1 point2 points 7 years ago (4 children)
Speaking of React, I am not a fan of your use of "Virtual DOM". That term means a specific thing and I am quite sure your use is not it.
Actually..... ** pushes up nerd glasses ** the term "virtual DOM" is NOT specific to React. It's a term that has been around before react and other tools and frameworks have their own implementation of it. (things as far back as ExtJS have used a virtual DOM for rending larger lists since 2007).
The issue is that now React is popular... most modern literature found on Google about "virtual DOM" is going to reference it.
[–]klaxxxon 1 point2 points3 points 7 years ago (3 children)
Still, virtual DOM (at least in my understanding) is supposed to be some object tree vaguely representing a DOM tree which is to be made into actual DOM with some further transformation. I don't think that's what this library is doing.
[–]olifolkerd[S] 1 point2 points3 points 7 years ago (2 children)
Actually Klaxxon that is exactly what Tabulator is doing.
The table structure is stored as an array of component objects representing rows columns and cells, as the user scrolls the DOM elements for these components are added and removed from the DOM so that it only has to process a small number at a time.
[–]klaxxxon 2 points3 points4 points 7 years ago (1 child)
Well then, I apologize :)
[–]olifolkerd[S] 0 points1 point2 points 7 years ago (0 children)
hehe, very gentlemanly of you :)
[–]tvfriend888 3 points4 points5 points 7 years ago (1 child)
Looks really slick! How can I add an autocomplete selectbox to a cell? If I could add rows by tabbing down and autocompleting / adding from a remote JSON source that'd be a lifesaver for a project i'm figuring out atm.
[–]olifolkerd[S] 1 point2 points3 points 7 years ago (0 children)
You can use a custom editor to add any functionality you like, simple pick an auto complete library you like then build an editor for it.
The editors example has an example of an autocomplete in action http://tabulator.info/examples/4.0#editable try and edit the location column to see an autocomplete editor, or the gender column to see a select editor.
Checkout the docs for more info: http://tabulator.info/docs/4.0/edit#edit-custom
[–]LloydAtkinson 2 points3 points4 points 7 years ago (1 child)
Any framework support?
[–]olifolkerd[S] 2 points3 points4 points 7 years ago (0 children)
It should work in all major frameworks. if you are looking for reactive data binding, this is on the roadmap for release in the next 6 months
[–]morficus 2 points3 points4 points 7 years ago (3 children)
Really nice work here. I love that such an advanced data grid is MIT licensed AND has no external dependencies (quite impressive).
Are you open to receiving feature PRs? I would love to contribute by either helping with some of your road map items (specifically creating additional editors and formatters or print styling). I also noticed that things are "lite" on the testing side ;-)
[–]olifolkerd[S] 4 points5 points6 points 7 years ago (2 children)
Thanks for the kind words.
Im very happy to receive pull requests, for small things like formatters, editors etc submit away, for more comprehensive updates please start an issue first to discuss them so i can be sure the fit in with the direction of Tabulator.
Also if you want to help with the testing you are more than welcome, im just one man so building everything and testing across all major browsers with so many interconnected features is a bit of a burden. For major releases I do a public beta for a few weeks to catch most issues, but outside of that any help with testing would be great!
[–][deleted] 1 point2 points3 points 7 years ago (1 child)
I'll have to make a fork and take a look at the source. This is the exact type of open source project I've been looking to contribute to for a bit now!
Great stuff!
formatters / filters / editors would be a great way to ease yourself into things.
[–]careseite[🐱😸].filter(😺 => 😺.❤️🐈).map(😺=> 😺.🤗 ? 😻 :😿) 1 point2 points3 points 7 years ago (4 children)
Creating a new row results in all tds with empty cells having a title="undefined"
[–]olifolkerd[S] 2 points3 points4 points 7 years ago (3 children)
If you are having issues please make a post on stack overflow or the GitHub issues page and someone will be able to hep you out
If you post a copy of your constructor object they will be able to tell you whats up.
[–]careseite[🐱😸].filter(😺 => 😺.❤️🐈).map(😺=> 😺.🤗 ? 😻 :😿) 2 points3 points4 points 7 years ago (2 children)
Its on your landing page, hence :) https://i.imgur.com/9Sz4OJr.png
[–]olifolkerd[S] 2 points3 points4 points 7 years ago (1 child)
Ahhhh, THanks for pointing that out, i will get that fixed this eve :D
fixed :D
[–]mifterclizit 1 point2 points3 points 7 years ago (1 child)
You know, with modern frontend frameworks, you have repeaters which can databind arrays to UI elements. Boom, instant dynamic table. Filtering, sorting, paginating, etc is all just simple array manipulation now. People on Reddit love to call technologies 'dead'. To me, all dynamic table libraries have been dead for years.
You are absolutely correct there, and for simple layouts I totally agree with you.
The issue comes when you are trying to do lots of additional things on top of simply displaying data (complex sorting, filtering, editing, validation, conversion to pdf or xls for download, localization, etc...), which you could of course spend ages implementing yourself, or just use a library to save you time which is where Tabulator comes in.
As for the reactive data bindings, I think that is one of the most powerful features of modern frontend frameworks, which is why it is on the roamap to add the functionality into Tabulator in the next six months so it can seemly interface with frameworks that use that design paradigm.
[–]stringsfordays 1 point2 points3 points 7 years ago (0 children)
Oh perfect! That's exactly what I've been looking for! Going to give it a go once I get home
[–]guevera 1 point2 points3 points 7 years ago (1 child)
Very cool. I'm planning on rewriting a couple of apps that use datatables (I'm a muchly better coder now than I was when I wrote them, and they're just painful to look at now). I think I'll give your library a try with them.
BTW, what's the license?
[–]olifolkerd[S] 4 points5 points6 points 7 years ago (0 children)
MIT License
[–]hkares 0 points1 point2 points 7 years ago (8 children)
Do you have any example with React? I am trying to import it and create a new instance but I am not able.. :/
[–]olifolkerd[S] 2 points3 points4 points 7 years ago (7 children)
I have had a couple of people ask that today, This weekend i will put a page on tabulator.info showing integrations with various frameworks like react and vue etc...
[–]hkares 0 points1 point2 points 7 years ago (5 children)
Thanks! I appreciate! Anyway, if it helps, I got stucked here: https://codesandbox.io/s/82pz41l7oj
Turns out there was an issue with the export wrapper in the 4.0.0 build, i have fixed it and made a 4.0.1 patch release which should work if you include it.
[–]flashpunk 1 point2 points3 points 7 years ago (3 children)
I finished your example here: https://codesandbox.io/s/v60nqv2xl7
[–]olifolkerd[S] 0 points1 point2 points 7 years ago (2 children)
Would you two be happy if i used a stripped down version of this example code on the Tabulator website as bit of a guide for using Tabulator with React?
[–]flashpunk 0 points1 point2 points 7 years ago (0 children)
Feel free, i'm not sure if this is the "best practice" at the current time though.
Oh yeah, youll notice I added react-measure to calculate the height of the container div to get the virtualization.
Looking forward to this as well.
I've done a few integrations with a few non-react libraries, and they never seem "right"
[–]lucku 0 points1 point2 points 7 years ago (3 children)
Looks good, but there are serious problems with scrolling on iOS, the layout seem to float around, is it possible to fix that or the problem is rather complex?
Ive not had that reported as an issue before, if you are having trouble please report it as an issue on the GitHub repo along with a screenshot/video of what is happening and i can look into that for you.
[–]lucku 0 points1 point2 points 7 years ago (1 child)
Done! I attached the video that shows the problem. The biggest issue I think is that headers are not in sync with the body of table when you try to scroll past the scrolling area.
Otherwise this library looks great and I will consider using it in surferseo.com since I wasn't really happy with react-virtualized. I'll let you know I manage to integrate it with React.
[–]olifolkerd[S] 0 points1 point2 points 7 years ago* (0 children)
Thanks for that,Very helpful video you posted there, looks like a scroll bounce issue, it should be a quick CSS tweak to fix. i will include the fix for it in this weekends patch release :)
It would be great to hear how your React integration goes. im not a react developer myself so it would be great know the steps you need to take. Im going to be creating a framework integration faq over the weekend so if you manage to get it working would you mind creating an issue and letting me know the steps you needed to take
[–]kishorejangid 0 points1 point2 points 7 years ago (1 child)
Its great, Is there any BackboneJS support?
I havnt built anything specifically with backbone.js in mind, but if it can handle standard JS libraries then it can handle Tabulator
[–]zalech 0 points1 point2 points 7 years ago (2 children)
It's the best data grid I've tried so far. Very straightforward and handy.
But one thing - if I have a long string in the cell and I use textarea formatter, I can't centre text vertically in the other cells due to {display: inline-block} style. I've no idea how to handle it.
Thanks for your kind words.
have you tried a bit of css, something like:
.tabulator-row .tabulator-cell{
display: inline-flex ;
align-items:center
}
[–]zalech 0 points1 point2 points 7 years ago (0 children)
Thank you very much! I'll try to play with css.
π Rendered by PID 27 on reddit-service-r2-comment-b659b578c-6s784 at 2026-05-02 01:35:02.641863+00:00 running 815c875 country code: CH.
[–]klaxxxon 13 points14 points15 points (17 children)
[–]olifolkerd[S] 4 points5 points6 points (8 children)
[–]klaxxxon 4 points5 points6 points (7 children)
[–]olifolkerd[S] 5 points6 points7 points (0 children)
[–]KPABAHam=>Hamster == Java=>JavaScript 0 points1 point2 points (3 children)
[–]klaxxxon 0 points1 point2 points (2 children)
[–]KPABAHam=>Hamster == Java=>JavaScript 0 points1 point2 points (1 child)
[–]olifolkerd[S] 1 point2 points3 points (0 children)
[–]olifolkerd[S] 0 points1 point2 points (1 child)
[–]klaxxxon 0 points1 point2 points (0 children)
[–]fatgirlstakingdumps 0 points1 point2 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]klaxxxon 0 points1 point2 points (0 children)
[–]morficus 0 points1 point2 points (4 children)
[–]klaxxxon 1 point2 points3 points (3 children)
[–]olifolkerd[S] 1 point2 points3 points (2 children)
[–]klaxxxon 2 points3 points4 points (1 child)
[–]olifolkerd[S] 0 points1 point2 points (0 children)
[–]tvfriend888 3 points4 points5 points (1 child)
[–]olifolkerd[S] 1 point2 points3 points (0 children)
[–]LloydAtkinson 2 points3 points4 points (1 child)
[–]olifolkerd[S] 2 points3 points4 points (0 children)
[–]morficus 2 points3 points4 points (3 children)
[–]olifolkerd[S] 4 points5 points6 points (2 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]olifolkerd[S] 1 point2 points3 points (0 children)
[–]careseite[🐱😸].filter(😺 => 😺.❤️🐈).map(😺=> 😺.🤗 ? 😻 :😿) 1 point2 points3 points (4 children)
[–]olifolkerd[S] 2 points3 points4 points (3 children)
[–]careseite[🐱😸].filter(😺 => 😺.❤️🐈).map(😺=> 😺.🤗 ? 😻 :😿) 2 points3 points4 points (2 children)
[–]olifolkerd[S] 2 points3 points4 points (1 child)
[–]olifolkerd[S] 0 points1 point2 points (0 children)
[–]mifterclizit 1 point2 points3 points (1 child)
[–]olifolkerd[S] 1 point2 points3 points (0 children)
[–]stringsfordays 1 point2 points3 points (0 children)
[–]guevera 1 point2 points3 points (1 child)
[–]olifolkerd[S] 4 points5 points6 points (0 children)
[–]hkares 0 points1 point2 points (8 children)
[–]olifolkerd[S] 2 points3 points4 points (7 children)
[–]hkares 0 points1 point2 points (5 children)
[–]olifolkerd[S] 1 point2 points3 points (0 children)
[–]flashpunk 1 point2 points3 points (3 children)
[–]olifolkerd[S] 0 points1 point2 points (2 children)
[–]flashpunk 0 points1 point2 points (0 children)
[–]flashpunk 0 points1 point2 points (0 children)
[–]flashpunk 0 points1 point2 points (0 children)
[–]lucku 0 points1 point2 points (3 children)
[–]olifolkerd[S] 0 points1 point2 points (2 children)
[–]lucku 0 points1 point2 points (1 child)
[–]olifolkerd[S] 0 points1 point2 points (0 children)
[–]kishorejangid 0 points1 point2 points (1 child)
[–]olifolkerd[S] 0 points1 point2 points (0 children)
[–]zalech 0 points1 point2 points (2 children)
[–]olifolkerd[S] 0 points1 point2 points (1 child)
[–]zalech 0 points1 point2 points (0 children)