{"id":49053,"date":"2025-08-27T08:36:50","date_gmt":"2025-08-27T12:36:50","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=49053"},"modified":"2025-12-02T15:33:56","modified_gmt":"2025-12-02T20:33:56","slug":"javascript-runtimes-of-the-last-decade","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2025\/08\/27\/javascript-runtimes-of-the-last-decade\/","title":{"rendered":"JavaScript Runtimes of the Last Decade"},"content":{"rendered":"<p><a href=\"https:\/\/buttondown.com\/whatever_jamie\/archive\/the-many-many-many-javascript-runtimes-of-the-last-decade\/\">Whatever, Jamie<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=44701574\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/buttondown.com\/whatever_jamie\/archive\/the-many-many-many-javascript-runtimes-of-the-last-decade\/\"><p>This last decade has seen an inundation of new JavaScript runtimes (and engines in equal measure), enabling us to run JavaScript in all manner of contexts with precise fitness for task. Through these, we&rsquo;ve seen the language spread to the Cloud, the edge, Smart TVs, mobile devices, and even microcontrollers.<\/p><p>In this article, we&rsquo;ll explore what&rsquo;s driving this diversity, and why no one runtime or engine suffices for all purposes.<\/p><p>[&#8230;]<\/p><p>The earliest polyglot engine was <a href=\"https:\/\/github.com\/mozilla\/rhino\">Rhino<\/a>, which was made in 1997 as an effort to write Netscape Navigator &#x2013; JavaScript engine and all &#x2013; fully in Java. Rhino supports two-way interop between Java and JavaScript, based on the JVM. That is to say, it allows JavaScript to implement Java interfaces and call Java class methods, while allowing Java to define JavaScript classes, run scripts, and more. By 2006, it was included in JDK 6, and by 2008, it was the basis of the Helma runtime, nowadays known as <a href=\"https:\/\/github.com\/ringo\/ringojs\">RingoJS<\/a>.<\/p><p>[&#8230;]<\/p><p>While Deno and CloudFlare Workers (which run on the <a href=\"https:\/\/github.com\/cloudflare\/workerd\/tree\/main\">workerd<\/a> runtime) continue Node.js&rsquo;s tradition of using <a href=\"https:\/\/v8.dev\">V8<\/a>, we see Bun employing <a href=\"https:\/\/docs.webkit.org\/Deep%20Dive\/JSC\/JavaScriptCore.html\">JavaScriptCore<\/a>, WinterJS using <a href=\"https:\/\/spidermonkey.dev\">SpiderMonkey<\/a>, and LLRT on <a href=\"https:\/\/github.com\/quickjs-ng\/quickjs\">QuickJS<\/a>. No longer is the backend solely a stage for Node.js and V8 &#x2013; it&rsquo;s now fashionable to pick a runtime and engine optimised for the task.<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Whatever, Jamie (via Hacker News): This last decade has seen an inundation of new JavaScript runtimes (and engines in equal measure), enabling us to run JavaScript in all manner of contexts with precise fitness for task. Through these, we&rsquo;ve seen the language spread to the Cloud, the edge, Smart TVs, mobile devices, and even microcontrollers.In [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2025-08-27T12:36:53Z","apple_news_api_id":"440e7d13-0643-4c35-82ba-5b52d9118c40","apple_news_api_modified_at":"2025-08-27T12:36:53Z","apple_news_api_revision":"AAAAAAAAAAD\/\/\/\/\/\/\/\/\/\/w==","apple_news_api_share_url":"https:\/\/apple.news\/ARA59EwZDTDWCultS2RGMQA","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[2858,255,1627,295,2817,346,817,854,1136,71,1249,96],"class_list":["post-49053","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-bun","tag-compiler","tag-electron","tag-history","tag-interpreter","tag-javascript","tag-just-in-time-compilation-jit","tag-netscape","tag-node-js","tag-programming","tag-react-native","tag-web"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=49053"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49053\/revisions"}],"predecessor-version":[{"id":49054,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49053\/revisions\/49054"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=49053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=49053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=49053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}