So I did a little bit of digging and I’ve pulled together something fun: I call it “The World of ECMAScript“.
(Released under the GPL v2 [SVG])
It’s a full map detailing everything that exists within the world of ECMAScript (with JavaScript, ActionScript, and JScript being its most-famous implementations). Right now I’m only showing things that can be built on top of (languages, engines, browsers, servers, etc.) – not end user applications (there would probably be too many to list).
This chart started out as a simple diagram showing the relationship between ActionScript, Tamarin, ActionMonkey, and SpiderMonkey. From there I started tacking on additional relationships and it just sort of started to grow out of control. I’m fascinated by the size and breadth of everything in that exists in the ECMAScript ecosystem (and this isn’t even everything, I’m sure I’m missing a ton).
Here’s some links for more information:
Languages:
Engines:
- Spidermonkey
- ActionMonkey
- Presto
- JScript
- .NET Framework
- DMD
- QSA
- iCab
- KJS
- JSCore
- Tamarin
- Narcissus
- Rhino
- ruby-spidermonkey
- python-spidermonkey
- JavaScript::Spidermonkey
Applications:
- Camino
- Firefox
- Opera
- Internet Explorer
- iCab
- Konquerer
- Flash
- Photoshop
- AIR
- WebKit
- Safari
- Android
- HD DVD
- Apache
- Helma
- Phobos
- Tomcat
Hooks/Convertors:
Companies:
Implementation Languages:
Let me know if there’s anything that you feel that I’ve missed. I’ll use my discretion when adding, simply because I don’t want this to include every half-baked ECMAScript implementation under the sun (and I still have to modify it by hand).
Update 3am Nov. 15: Removed WebKit (was redundant), added Silverlight, added IronPython and IronRuby, connected PDF to SpiderMonkey, and fixed spelling of Konqueror. Presto is wrong for Opera, but not sure what their JS Engine is named. Compressed PNGs, added an SVG download.
Update 5pm Nov. 15: Turned JavaScript into a language/cloud. Added ParenScript, YHC/JavaScript, Haxe, and Scheme2JS. Added CouchDB. Silverlight now links to JScript. Opera’s two engines (futhark and linear_b) are listed. Added Flex. Changed QSA to QT Toolkit.
Jonah Stagner (November 15, 2007 at 12:52 am)
The link to KJS doesn’t appear to be what you thought it was :)
Thanks for this, it is very interesting. Now if only I could find a solid implementation for .NET, I would be VERY happy indeed.
John Resig (November 15, 2007 at 12:58 am)
@Jonah: Ha! Nice catch. That’s what I get for writing a Perl script to scrape links off of Google.
Maciej Stachowiak (November 15, 2007 at 1:45 am)
Looks cool! Though I’m a little unclear on why WebKit is listed as an application but Gecko and Trident don’t show up at all, and Presto is considered an engine directly. Also, I think AIR uses all three of JavaScriptCore (for WebKit), Tamarin/ActionScript (for Flash), and SpiderMonkey (for PDF).
John Resig (November 15, 2007 at 1:49 am)
@Maciej: I guess I included WebKit because having a direct link from JavaScriptCore to AIR or Android would be a little strange (since they’re using it indirectly). I agree, on second thought that section may need some re-work – and yes, I agree about the additional connections for AIR and the PDF -> SpiderMonkey connection. Thanks for the feedback!
Andrei (November 15, 2007 at 2:26 am)
I wanted to add Silverlight, but I didn’t have room in the Microsoft cloud. It would be nice to release it using a vector graphics format (SVG or XAML). If I will have the time, I’ll do it in the next days (considering the GPL v2 license)
Vincent Robert (November 15, 2007 at 2:31 am)
Thanks for this *large* view :-)
I agree on releasing a vector graphics format too. You can try “Inkscape”, it can read and write a lot of formats.
I think you misspelled Konqueror…
John Resig (November 15, 2007 at 3:16 am)
@Maciej, Andrei, Vincet: Thank for all your feedback, I’ve adjusted the image appropriately (and have provided an SVG version as well).
lockoom (November 15, 2007 at 4:02 am)
Actually, Presto is Opera’s rendering engine. Opera’s JS engines are called linear_b (pre 9.5) and futhark (9.5+).
Nice summary!
John Resig (November 15, 2007 at 4:16 am)
@lockoom: Awesome – thank you! I was just using Presto as a place holder until someone who knew the actual name stopped by. Thanks – I’ll add it in the morning.
Jökull Sólberg Auðunsson (November 15, 2007 at 4:27 am)
CouchDB uses Spidermonkey.
K. Ralho (November 15, 2007 at 4:32 am)
The svg doesn’t look good: check it on Ubuntu, font issues
jdz (November 15, 2007 at 4:39 am)
Not that anybody cares about dead languages, but there is http://common-lisp.net/project/parenscript/.
Gijs (November 15, 2007 at 4:52 am)
Why is Rhino in the Google company thing? Are they actually actively developing it again? I was under the impression Rhino was dead :-).
mso (November 15, 2007 at 5:36 am)
Actually QSA and Qt Script are two separate implementations of JavaScript; where Qt Script is the latest and most compliant (Qt Script implements all the built-in classes and functions defined in ECMA-262, but also adds extensions, to integrate it better with the Qt toolkit).
James Hofmann (November 15, 2007 at 8:34 am)
haXe would be a worthy inclusion in this, as it is strongly ECMAScript-influenced, but more importantly it compiles down to Javascript and to ActionScript.
Sébastien Mouren (November 15, 2007 at 9:03 am)
Androïd is a platform. Androïd’s Webkit fork is related to JSCore. Symbian (Nokia) S60 Webkit fork is also.
Mark (November 15, 2007 at 11:08 am)
Nice map!
One addition, you got ActionScript associated with Flash but you missed the association of it with Adobe Flex
tzury bar yochay (November 15, 2007 at 1:51 pm)
Sir, the raising star is missing here, sir!
take a look at http://jnext.org/
You will be surprised with the next release.
RichB (November 15, 2007 at 3:24 pm)
Silverlight should be connected to JScript not JScript.Net.
I doubt anyone will ever use JScript.Net to program Silverlight – perhaps when Silverlight 1.1/DLR is released people may use “Managed JScript” – another JScript implementation.
Tony Petruzzi (November 15, 2007 at 3:40 pm)
John,
You forgot to include ColdFusion under Adobe. CF is using all of the Adobe technologies and includes a bunch of Ajax tags.
Alain Roy (November 15, 2007 at 3:58 pm)
I don’t understand what an arrow means in your diagram. Depends on? Includes? Interacts with?
Filipe Campos (November 15, 2007 at 4:51 pm)
I really thinkg that it´s not a good picture…
why ?
too many techonologies… too many languages comming and goiiing, everybody taking a space…
with so many languages web can go in a way that web as aplication will be over…
i don´t like it, the situation of too much technologies( or reverse ).
I think this is a way to choose ms techs like silver
John Resig (November 15, 2007 at 5:29 pm)
I just pushed another update – thanks everyone for your suggestions!
@K. Ralho: Not sure why – I think Firefox is having some issues with its rendering.
@Gijs: Rhino is still very active – Google is one of its largest contributors.
@Tony: Unfortunately, having “Ajax” – or even the ability to host Flash files is not sufficient enough (whereas both Flash and Flex are completely developed using ActionScript – which is an ECMAScript language).
@Alain: It’s a little fuzzy and depends on the situation. For right now you can kind of say that it’s equivalent to “builds upon/converts from”. So, for example: JavaScript is outputted from Scheme2JS which is converted from Scheme – or – Flash uses ActionScript which can be converted from Haxe.
@Filipe: I don’t understand your comment at all – you do realize that Silverlight primarily uses ECMAScript (JScript) as its language of choice, right?
flap (November 15, 2007 at 6:57 pm)
flapjax is another implementation language
http://www.flapjax-lang.org/
skierpage (November 16, 2007 at 12:03 am)
Opening your SVG in a new window made Firefox 3 (Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9b2pre) Gecko/2007111505 Minefield/3.0b2pre ID:2007111505) peg my CPU. Memory usage bounced up and down by 20MB every few seconds, slowly increasing (I had other tabs open). I eventually had to kill FF3 as it was completely unresponsive. Great test case ;-)
The PNG is fascinating.
Adobe’s ColdFusion has included a server-side language named CFScript for years. It’s very much like JavaScript, but from Adobe’s livedocs, “Although CFScript and JavaScript are similar, they have several key differences…” Recent ColdFusion versions compile CFScript into Java bytecode, so internally it’s like Rhino.
Mark (November 16, 2007 at 12:25 am)
Wow. I mean, um, wow.
So, is this what you see when you close your eyes at night?
Filipe Campos (November 16, 2007 at 4:12 pm)
What i mean is that there are too many ways to develop a web application…
Too many ways make developers to me more cautious and they follow big companies products, like Silverlight
Lawrence Oluyede (November 17, 2007 at 9:46 am)
What about PyPy’s JS? See: http://play1.pypy.org/ and http://codespeak.net/pypy/dist/pypy/doc/translation.html#genjs
zwetan (November 19, 2007 at 1:10 am)
is there a filter for the comments when you put too much URL ?
zwetan (November 19, 2007 at 1:12 am)
wow very nice map :)
thanks a lot John for that work!
from the top of my head (and ok some verification on the side)
here some things missing:
– ScreamingMonkey
– Windows Script Host (engine, that reuse the JScript engine)
– JSDB (application, reuse SpiderMonkey engine) – http://www.jsdb.org
– AIR use JSCore engine (to run HTML/JS-based app) but also use Flash player engine (to run SWF-based app)
– mono got an implementation of JScript
– related to KJS, kjscmd
– JavaScript OSA
– about SilverLight, it can uses 2 different JScript engine,
SilverLight v1.0 use the “classic” JScript engine, but SilverLight v1.1 use a CLR:DLR based engine which is much different
(without the references link sadly)
Jonathan (November 20, 2007 at 10:29 am)
Other Adobe apps that support ecmascript:
Indesign, Fireworks, Illustrator
Also there’s a third part ecmascript environment for Illustrator called Scriptographer:
http://www.scriptographer.com
it runs on Rhino
Peter Wilson (November 21, 2007 at 6:19 pm)
There aren’t many server-side JavaScript environments and most of them are fairly incomplete and immature.
How about adding Whitebeam to your list. This one is a mature web development environment started in 2000 using SpiderMonkey as the core to provide server side JavaScript. It could have been called ‘mod_js’ – except it’s a lot more than that. Just about anything you could do in PHP you can do using server-side JavaScript in Whitebeam.
Take a look at some of the *real* applications written using Whitebeam:
http://www.whitebeam.org/community/users.rhtm
Or for a concrete example :
http://www.gadgetspeak.com
The latest release was on the 18th October 2007. The next release will include the latest SpiderMonkey 1.7 release.
I’ll admit right now it has a handful of companies using it – that’s because we’re primarily engineers rather than marketeers and sales people :-)
Steve Majewski (November 27, 2007 at 5:57 pm)
Apache Cocoon uses flowscript which is server side ECMAScript implemented via Rhino
with added support for continuations, as well as hooks for accessing cocoon objects.
Michael Geary (November 28, 2007 at 2:40 pm)
Adding to Jonathan’s comment, those other Adobe apps use ExtendScript. Acrobat is the lone holdout at Adobe using SpiderMonkey. (And I would probably list it as “Acrobat” instead of “PDF” – there’s nothing about the PDF format itself that says it has to use SpiderMonkey.)
Andy Dent (November 28, 2007 at 4:19 pm)
Apple’s Dashboard is programmed using JavaScript using the WebKit engine. It’s a fairly important JavaScript use, being an OS layer right in front of the user.
Martin Lemke (December 2, 2007 at 1:59 am)
The link under the AIR application totally made my day. Excellent diagram, I’ll pin it on the wall!
Adam (December 4, 2007 at 4:02 pm)
John,
Nice job with the concept map. If you don’t mind sharing, what software did you use to create it?
Julien W (December 5, 2007 at 4:27 am)
And what about OpenLazslo ? :-)
raja (December 19, 2007 at 5:45 pm)
You missed the arrow from haXe to Apache. haXe programs can also be run in the Apache Web Server using mod_neko. The haXe compiler currently supports compiling haXe code to JavaScript, Flash and server-side code for the mod_neko Apache module which seems to be a fast and lightweight virtual machine.
Sohbet (April 27, 2008 at 2:54 pm)
Apache Cocoon uses flowscript which is server side ECMAScript implemented via Rhino
with added support for continuations, as well as hooks for accessing cocoon objects.
Frederik (April 28, 2008 at 3:46 pm)
Very good, thanks !
Do you have by any chance a table showing which Javascript versions have been implemented in which engine version ?
I am mainly looking for browser versions…
Thanks !
Dean (April 28, 2008 at 4:18 pm)
Dear John, many thanks for this great article an map. Your map has something of art. I printed it and it’s hung now next to my desk to always have a look on it. Also many thanks for the useful links. I see, I have to learn a lot more.