Okay, so I know I said that 5.2.11 would be the last 5.2 release, but the bug fixes were starting to pile up so I decided to put out another patch. Besides bug fixes I also added an explanation of API levels to the documentation as well as showing which level each function requires. Experimental functions are marked as such.

The first beta of miniSphere 5.3 is out, bringing some new APIs and several useful features, including cell init for initializing a new, working project directly from the command-line (no Sphere Studio required!). More will be coming, but this seemed like a good point to push out a beta to hopefully get some field testing in on the new features, especially cell init.

Starting in miniSphere 5.3, from() will be built into the Core API without the need to import the "from" module. Like @Radnen 's Link.js library that came before it, from() queries are often incredibly useful in battle engines, and now I've written some code in the engine to compile these queries directly to JS for super-fast performance.

Sphere from() query and Sphere Query object is us! All timings are for running a chain equivalent to the above query 1,000 times with the respective library over an array of 100,000 random integers between 0 and 1000.

Special thanks to @Radnen for (indirectly) giving me the idea - Link.js was touted as a replacement for writing repetitive for loops, which got me to thinking... what if I just compile the query to an actual for loop...

This is really incredible that I was able to get so close to native loop performance and is a big win for code readability. Query chains remain understandable even with 10+ query operators chained together, but throw together a couple filters and mappings plus a sort (or two!) and the set of for loops you need to write to match it can get pretty gnarly. Lodash is proof people are willing to sacrifice a great deal of performance to get more readable code (see benchmark results above), even in tight loops where it matters most, but it's even better if you don't have to.

What we learn here, is that hand-writing a for loop can be slower... The first for loop doesn't short circuit after 10,000 items, but that's on intention. How many times in writing a for loop you think of doing that? Therefore from.js, link.js and other libraries are going to be faster since they can make those common-sense decisions for you, and just automatically make your code faster.

If you use code to help you code you can use less code to code. Also, I have approximate knowledge of many things.

miniSphere 5.3 release is very close - just a few more API kinks I have to work out but otherwise everything is ready to go.

I even made a last-minute API addition: you'll be able to create custom BlendOps to have better control over the blending stage of the graphics pipeline. This is something that can't be handled in the fragment shader at all--blending is still fixed-function even on modern hardware.

miniSphere 5.3.0 RC1 is now available for download! This is a release candidate, which means the code is essentially frozen; no further changes will be made other than bug fixes for 5.3. If no major issues are reported, this exact build will become the final version of miniSphere 5.3.0.

miniSphere 5.3.0 has just been released and is now available for download. This version brings a ton of new APIs, a brand-new, faster version of from.js rewritten from the ground up, bumps the API level to 2, brings back support for 32-bit versions of Windows in the official release, adjusts script-loading semantics to allow using .js for modules (it's like a long lost friend coming back home ), and so much more.

Be extra sure to check out the Release Notes for this release before getting started, as there are several potentially breaking changes due to modified semantics in a few places (the Core API remains backward compatible, as promised by the mS 5.0.0 API freeze). And for Windows users, as always with milestone releases, uninstall your previous version of miniSphere before installing 5.3.0 to ensure all stale files get removed.