mini_racer VS Duktape

Compare mini_racer vs Duktape and see what are their differences.

Duktape

Duktape - embeddable Javascript engine with a focus on portability and compact footprint (by svaarala)
SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
surveyjs.io
featured
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
mini_racer Duktape
4 10
583 5,835
0.7% -
7.2 6.4
23 days ago about 2 months ago
JavaScript JavaScript
MIT License MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

mini_racer

Posts with mentions or reviews of mini_racer. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-12-03.
  • Ask HN: What side projects landed you a job?
    62 projects | news.ycombinator.com | 3 Dec 2023
    Some years ago I was on a shitty job - not technically, but the company turned out to be inhumane - at a Ruby shop, and on the side I was toying with mini_racer and I just upgraded to some macOS beta where it failed to build. A shitty +1-1 hack† for a compiler flag later and it was back flying.

    A month later I received a cold email from a CTO to chat a bit about that PR, turns out they were using mini_racer heavily and forked it for their own purpose, and also created PyMiniRacer for the Python side of things. Next thing I know I got hired. Two years later the company got acquired.

    Of course conditionally adding a compiler flag wasn't what got me hired per se, it only got my profile noticed. Probably side projects such as porting go by example to Ruby by implementing a ~1:1 CSP channel API[1], an Electron desktop client for Mattermost basically on a dare[2], ex mode for the Atom editor so that I could have that frackin' `:w`[3], leveraging Blocks to bolt on object-oriented-ness onto C because "closures are a poor man's object"[4], or reverse-engineering the Xbox One USB gamepad and writing a kext to turn it into a HID device on macOS from scratch on a lonely 7+h train ride with passengers judgementally staring at me sideways[4] probably contributed to it a bit.

    My takeaway: luck is when preparation meets opportunity; but don't to side projects to get hired, because if you don't get hired then that time is lost. Rather, of all things, scratch your itch, have fun, embrace whatever quirkiness you fancy; no one can take that away from you.

    [0]: https://github.com/rubyjs/mini_racer/commit/2086db1bbf2b5de4...

    [1]: https://github.com/lloeki/normandy

    [2]: https://github.com/lloeki/matterfront

    [3]: https://github.com/lloeki/ex-mode

    [4]: https://github.com/lloeki/cblocks-clobj/blob/master/main.c

    [5]: https://github.com/lloeki/xbox_one_controller

  • YouTube-dl has a JavaScript interpreter written in 870 lines of Python
    19 projects | news.ycombinator.com | 10 Sep 2022
    Cue libv8-node+mini_racer from which PyMiniRacer was born. It is non-trivial but not as hard as one might think.

    The most painful part is the libv8 build system and Google tooling, which makes it an absolute PITA for libv8 consumers that are not Chrome.

    This is why the libv8 gem was atrocious to keep up to date and to build for several platforms, and why libv8-node was born, because the node build system and source distribution are actually sane.

    Disclaimer: worked at Sqreen, now maintainer of libv8-node and collaborator of mini_racer

    https://github.com/sqreen/PyMiniRacer

    https://github.com/rubyjs/mini_racer

    https://github.com/rubyjs/libv8-node

  • Rendering markdown with Markdoc in Rails
    7 projects | dev.to | 13 Jul 2022
    Eventually, we’ll want to call this JavaScript from a Rails controller using ExecJS or MiniRacer or some similar tool. None of the Ruby-to-JavaScript gems I found were sophisticated enough to know how to load npm modules with common.js or ES module syntax, so my solution is to just build the JavaScript with a watcher and have that run as part of bin/dev.
  • Anyone having issues with M1Pro?
    1 project | /r/rails | 11 Nov 2021
    https://github.com/rubyjs/mini_racer/issues/190 has some info an then this PR: https://github.com/rubyjs/mini_racer/pull/210 that has been merged. Hope that all helps!

Duktape

Posts with mentions or reviews of Duktape. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-05-04.
  • Roll your own JavaScript runtime, pt. 3
    3 projects | news.ycombinator.com | 4 May 2023
  • How to Create a Modern C Project with CMake and Conan
    2 projects | /r/C_Programming | 26 Apr 2023
    Im my projects I search for single file libs.(like https://github.com/svaarala/duktape etc...)
  • Is there anyway to bypass the limit of rand()?
    1 project | /r/C_Programming | 20 Nov 2022
    Use lrand48(), or better, implement a high-quality RNG like PCG or splitmix64.
  • Libgrapheme: A simple freestanding C99 library for Unicode
    6 projects | news.ycombinator.com | 15 Nov 2022
    You can also refer to the Unicode routines of other small JS engines[1,2], those don’t use ICU either, although the implementations are mercilessly size-optimized (to put it politely) and restricted to what the target JS version requires (e.g. casemapping but no normalization).

    [1] https://github.com/bellard/quickjs/blob/master/libunicode.c

    [2] https://github.com/svaarala/duktape/blob/master/src-input/du...

  • Duktape
    1 project | news.ycombinator.com | 8 Oct 2022
  • Nan Boxing
    3 projects | news.ycombinator.com | 16 Sep 2022
    > memcpy from bytes to a NaN should work fine

    Signaling NaNs are explicitly undefined in C11 F.2.1.: "This specification does not define the behavior of signaling NaNs." - and in practice may be "quieted" by conversion to Quiet NaNs, changing their bit patterns. Fast math optimization flags will also break the hell out of your code by assuming NaNs are impossible. I want to say there are more circumstances where optimizers and compiler generated code can butcher your NaN payloads, but I'd be working off recollected hearsay and I can't find a source, so don't quote me on that.

    NaN boxing is common enough that, if you take the right precautions, a modern compiler should probably support it, maybe. NaN boxing is uncommon enough that, if your codebase needs to be sufficiently portable, you need an opt out for when it breaks. Let's review duktape's scars:

    https://github.com/svaarala/duktape/blob/123d9426d5e5b36d5da...

    https://github.com/svaarala/duktape/blob/5252b7a50611a3cb8bf...

    https://github.com/svaarala/duktape/blob/224a0b89ca08a36e37e...

    Note that "the right precautions" involve unions and proper integer types to avoid optimizer-invoked rewrites of the value and debugging when things go wrong, not simply YOLOing bytes into a double via memcpy. Note that debugging when it all goes terribly wrong can be quite painful. I've personally had the misfortune of being forced to debug duktape being built with fast math optimizatoins enabled on one "rare" platform + build configuration that wasn't caught by duktape's #if defined(__FAST_MATH__) checks linked above (wasn't Clang nor GCC, so go figure it didn't make the same #define)

  • YouTube-dl has a JavaScript interpreter written in 870 lines of Python
    19 projects | news.ycombinator.com | 10 Sep 2022
    I was expecting this to be about Duktape <https://github.com/svaarala/duktape>, but heh, for sure no. I'd bet $1 there's no way youtube-dl would switch, but I wonder if yt-dlp would?
  • Optimizations Enabled by -ffast-Math
    1 project | news.ycombinator.com | 20 Oct 2021
    Fast math optimizations can break code like this by breaking isNaN.

    I was porting a C++ project to a certain platform - and that platform enabled a -ffast-math equivalent by default in Release (but not Debug) builds! This broke duktape, a JS engine said project embedded, in some nasty and subtle ways. Instead of storing a number/pointer/??? (8 bytes) + type tag (4? bytes) for each dynamically typed JS value, duktape can bit-pack values into a single 8 byte "double" value by storing object/string handles as NaN values - this isn't an uncommon trick for dynamically typed scripting stuff:

    https://github.com/svaarala/duktape/blob/c3722054ea4a4e50f48...

    Naturally, the -ffast-math equivalent broke isNaN checks, which caused random object/string handles to be mistakenly reinterpreted as "numbers" - but only in Release builds, for this one particular platform, in one rarely taken branch, so neither QA nor CI caught it, leading to hours of manufacturing a repro case, stepping through an absurd amount of code, and then finally looking at the default build rules and facepalming.

    Cursing the platform vendor under my breath, I overrode the defaults to align with the defaults of every other config x platform combination we already had: no fast math. If you want those optimizations, use SSE-friendly NaN-avoiding intrinsics - or, if you must use the compiler flags, ensure you do so consistently across build configs and platforms, perhaps limited to a few TUs or modules if possible. This allows you to have a chance at using your Debug builds to debug the resulting "optimizations".

  • Can C++ and JS be used together?
    1 project | /r/learnprogramming | 27 Apr 2021
    Sure. For example, DukTape is an implementation of Javascript designed to be embedded in other projects. Google's V8 Javascript engine (used in Chrome), can also be embedded, see Node.Js for example.
  • [AskJS] Do you use JavaScript on Microcontrollers? Which engine / interpreter?
    5 projects | /r/javascript | 30 Mar 2021
    - Duktape (4.8k stars)

What are some alternatives?

When comparing mini_racer and Duktape you can also consider the following projects:

execjs - Run JavaScript code from Ruby

V8 - The official mirror of the V8 Git repository

libv8-node - Package libv8 from Node

quickjs - Public repository of the QuickJS Javascript Engine.

quickjs - Thin Python wrapper of https://bellard.org/quickjs/

Lua - Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

PyMiniRacer - PyMiniRacer is a V8 bridge in Python.

jerryscript - Ultra-lightweight JavaScript engine for the Internet of Things.

pyduktape - Embed the Duktape JS interpreter in Python

ChaiScript - Embedded Scripting Language Designed for C++

markdoc-rails - Example of rendering markdown using Markdoc with Ruby on Rails

SWIG - SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.