SculeJS (from Minuscule - pronounced skyul) is a JavaScript library emulating the functionality of MongoDB. It's also much more than that; SculeJS includes implementations of many general purpose data structures that can be used by developers in their day-to-day work.
I originally built JSONDB for use in Titanium Appcelerator apps, but over time it became apparent that a similar system could be really useful for other stuff as well. SculeJS can run in your web browser, in a NodeJS process, or even inside iOS and Android applications including a JavaScript runtime environment.
SculeJS provides a high-performance NoSQL database with the following features:
- Document-oriented storage
- Support for sparse B+tree and Hash indexes
- Fast in-place updates
- Rich document based queries
- Support for Map/Reduce operations
- Support for geo-locational queries using the $where and $near operators
Data structures currently included in SculeJS are:
- Hash Map
- Hash Table
- Binary Search Tree
- B+ Tree
- Bloom Filter
- Linked List
- Doubly Linked List
- Caching Linked List
- LRU Cache
- LIFO Stack
- FIFO Stack
- Queue
- Atomic Counter
- Bit Set
I do my best to keep the JSDoc annotation in the source up to date with changes, sometimes I miss things though. To generate a HTML version of the API reference for SculeJS clone a copy of the jsdoc3 repository and follow the instructions in the README.md file there.
You should be able to generate JSDoc for SculeJS using the following commands (assuming the sculejs and jsdoc directories are at the same level):
$ cd jsdoc
$ ./jsdoc ../sculejs/lib/*.js
If you have any specific questions about how to use SculeJS then head on over to the project wiki.
I run all core library code through JSHint as part of my (currently manual) build process. Building code for other platforms such as web and Titanium takes a little bit of manual fiddling, so certain portions don't pass. It all runs though, and all test cases are verified by running expresso before any commits to TRUNK.
SculeJS stores collections of JavaScript objects in memory and processes query expressions by compiling them to JavaScript before evaluating them against collection data. Using SculeJS to perform queries is actually pretty similar to using the MongoDB query shell - most operators are supported.
Collections can be persisted to disk (using LocalStorage in the browser), or other storage mediums using custom storage managers. At the time of writing I'm working on support for IndexDB and WebSQL storage engines.
If you want to help out with developing SculeJS please take a look at the contributor wiki guide, I'd be happy to have some help. Donations aren't necessary - if you use SculeJS and love it then tell your friends, just getting the word out would be a huge help.
I have a full time job and maintain SculeJS in my spare time, so if I don't get to your tickets immediately please don't take it personally.