# OxJS — A JavaScript Library for Web Applications

TL;DR: OxJS is awesome — see it in action!

OxJS (pronounced oh-ex-jay-ess) is a comprehensive JavaScript library, originally developed for the media archive platform pan.do/ra. While it still has bugs, holes, design errors and lots of cruft, some parts of it may already be of interest to a wider audience.

The core of OxJS is `Ox.js`, a general-purpose utility library. It embraces functional programming, supports modules, provides lots of tools to deal with dates, has all the missing math methods (plus some more for geographic coordinates) and helper functions for strings and regular expressions, fixes type detection and equality testing, includes utilities to handle HTML, the DOM and remote requests, can tokenize and minify JavaScript, comes with its own documentation format, including inline tests, and does many other cool things.

Then there are modules, most notably `Ox.UI`, which makes it super simple to write complex, desktop-class web applications for HTML5-compliant browsers. `Ox.UI` has tons of highly customizable and fully themable widgets: all the form elements you ever wanted, menus that actually work, resizable panels and dialogs, lists and tables that can hold millions of items, maps and calendars done right, a feature-rich video player, and lots more. These widgets allow you to focus on your application and argue less with the DOM. And if you need to, each of them provides the exact same API as a jQuery DOM object. But `Ox.UI` also provides the logic to bring these elements together, including custom events, keyboard focus, remote API discovery and client-side URL handling. As long as your backend speaks JSON, it doesn't have to speak any HTML whatsoever.

Among the other modules, `Ox.Unicode` helps with converting or sorting unicode strings, `Ox.Image` can do basic image manipulation, including steganography, and `Ox.Geo` comes into play if you're dealing with geographical data, or want to use a really nice set of flag icons.

Finally, there is a small but growing number of articles and tutorials, and extensive (albeit still incomplete) documentation. If you want to get involved, file bugs or submit patches, please head over to the development section. Your feedback is welcome!