Knockout was first released in 2010, and back then Internet Explorer was the browser and a lot of workarounds were needed to make the magic work. Since then, web browsers have come a long way the internals of Knockout have gotten a bit rusty with a lot of antiquated code and design.
So with the blessing of its founders and other maintainers (Steve Sanderson, Ryan Niemeyer, and Michael Best — Thank you!) over the past two years I've been taking time to break Knockout up into self-contained ES6 import/export packages that combine to make a solid foundation for a bright Knockout future. This collection of packages and tools is called tko.
Check out the repository at github.com/knockout/tko!
When tko is ready it'll be the foundation for Knockout 4.0, and bring with it all the greatness that made Knockout.js so popular in the first place ——
- super-low barrier to entry
- easy, intuitive data-binding inline html
- lightning fast two-way binding process of anything
- observables with auto-computed dependencies
- rock-solid battle-hardened cross-browser compatibility
- a bazillion unit tests
- some super-handy books
Plus a whole bunch of new awesome-sauce ——
- O(1) foreach loops
- ES6 class-based components and bindings
- clever lifecycle encapsulation
- typescript support
- server-side rendering
- content-security-policy unsafe-eval compatible
- a rebuildable platform to roll-your-own knockout-derivation
- independent reusable packages (e.g. observables, computeds)
How close is tko to being ready? It's been in alpha for almost a year, with use in high volume, highly complex production applications for a substantial part of that. TKO passes all the unit tests of knockout, and is solid with modern browsers.
How close is knockout 4? Knockout 4.0.0 will be part of the first release of tko (which will, monorepo-style, also be version 4.0.0). With support, hopefully in weeks to months!
What's the difference between tko and knockout? tko is a set of individual packages that combined to form Knockout, a reference implementation (tko.js), or a custom knockout-like binding provider. Knockout is also a combination of the tko packages, but with a more conservative set of choices.
Where's the documentation? With your support, coming ASAP to tko.io!
Is tko / knockout.js backwards compatible? With one exception (anonymous functions inside data-bind), it should be darned close. Backwards compatibility is a priority, so please report incompatibilities!
Who am I supporting with this Patron? You'll be supporting software developers that use open source libraries like Knockout.js to create beautiful, complex, and reliable web applications. Support helps me make a project like tko and Knockout more reliable, better documented, and more functional — so other developers can do more, faster, with greater certainty.
Thank you so much for checking this out. With your support I'll carve out every moment I can for this project.