MuJS

MuJS is a lightweight implementation of the Javascript language in a library.

Its primary purpose and design is for embedding in other software to add scripting capability to those programs, but it can also be used as an extensible scripting language.

In contrast to other programs that are large and complex, MuJS was designed with a focus on small size, correctness, and simplicity. MuJS is written in portable C and implements ECMAScript as specified by ECMA-262.

The interface for binding with native code is designed to be as simple as possible to use and is similar to Lua. There is no need for interacting with C++ template mechanisms, worrying about marking and unmarking garbage collection roots or wrestling with obscure build systems.

Why Choose MuJS
There are several reasons to select and use MuJS.

  • Javascript – Javascript, one of the most popular programming languages in the world, is a powerful extension language, used everywhere on the web both as a way to add interactivity to web pages in the browser and on the server side with platforms like node.js. MuJS allows you to bring this power to your application as well!
  • Standards compliant – MuJS implements ES5. There are no non-standard extensions, so you can remain confident that Javascript code that runs on MuJS will also run on any other standards compliant Javascript implementation.
  • Portable – MuJS is written in portable C and can be built by compiling a single C file using any standard C compiler. There is no need for configuration or fancy build systems. MuJS runs on a variety of systems and platforms, including all flavors of Unix and Windows, on mobile devices (such as Android and iOS), and embedded microprocessors (such as the Beagle board and Raspberry Pi).
  • Embeddable – MuJS is a simple language engine with a small footprint that you can easily embed into your application. The API is simple and well documented and allows strong integration with code written in other languages. You don’t need to work with byzantine C++ templating mechanisms, or manually manage garbage collection roots. It is easy to extend MuJS with libraries written in other languages. It is also easy to extend programs written in other languages with MuJS.
  • Small – Adding MuJS to an application does not bloat it. The source contains around 10’000 lines of C. Under Linux, the compiled library takes 180kB if optimized for size, and 260kB if optimized for speed. Compare this with V8, SpiderMonkey or JavaScriptCore, which are all several hundred thousand lines of code, take several megabytes of space and require the C++ runtime.
  • Fast and secure – MuJS is a bytecode interpreter with a very fast mechanism to call-out to C. The default build is sandboxed with very restricted access to resources.

MuJS is developed and maintained by Artifex Software. It was originally developed for use with the MuPDF viewer, but is designed to be useful as an independent component.

The primary meeting place for the MuJS community is the #mupdf channel on irc.freenode.net.

MuJS is Copyright © 2013-2017 Artifex Software, Inc.