# staticjs > staticjs is a small, embeddable and fast JavaScript engine for a pure, total subset of the language, as a freestanding C library and a WebAssembly module. A program it accepts is valid JavaScript and evaluates to the value JavaScript gives, or to a fault: never a different value. Every evaluation ends (it runs on fuel the host pushes), has no side effects, and allocates only through the host. Like JavaScript, the language has arrow functions, destructuring, Map, Set, BigInt, JSON and Temporal. Unlike JavaScript, it has no loops, recursion, classes, exceptions, async or I/O, and every evaluation ends. Programs written for Node usually need rewriting with map, filter and reduce. The Quick reference lists what to write instead. Every page of this site is markdown at its path plus `.md`, and at its path for a request whose `Accept` header prefers `text/markdown`. `llms-full.txt` holds them all in one file. The C API reference is the public header, `staticjs.h`, whose every declaration has a comment. ## Start - [staticjs](https://staticjs.tinyactors.dev/index.md): What staticjs is, the language against JavaScript, its properties, how to install it, how it works, its performance, a comparison with QuickJS, CEL and Starlark, and its limitations. ## Guide - [Guide](https://staticjs.tinyactors.dev/guide/index.md): Every page of the guide, in reading order. - [Getting started](https://staticjs.tinyactors.dev/guide/getting-started.md): From a download to a C program that evaluates JavaScript: prebuilt libraries, the amalgamation, a first program. - [Why staticjs?](https://staticjs.tinyactors.dev/guide/why.md): When staticjs fits and when it does not, and how it compares with a full JavaScript engine and with expression languages. - [Quick reference](https://staticjs.tinyactors.dev/guide/reference.md): The language and the C API on one page: the two kinds of program, what to write instead of what staticjs leaves out, the built-ins, the calls in order. - [Embedding](https://staticjs.tinyactors.dev/guide/embedding.md): The C API: contexts, allocators, limits, fuel, values and who owns them, globals, native functions, modules, the clock and the seed, streaming, inspection. - [The language](https://staticjs.tinyactors.dev/guide/language.md): What a staticjs program can say: syntax, modules, every built-in, BigInt, Map, JSON, Temporal, Date, and changing a value a function owns. - [Faults and refusals](https://staticjs.tinyactors.dev/guide/faults.md): Where staticjs stops instead of following JavaScript, and what it refuses when compiled. - [Performance](https://staticjs.tinyactors.dev/guide/performance.md): Fuel, memory, the callbacks that run in C, and a comparison with Node and QuickJS. - [Browser and Node](https://staticjs.tinyactors.dev/guide/wasm.md): staticjs.wasm from JavaScript, in a browser or in Node. - [Examples](https://staticjs.tinyactors.dev/guide/examples.md): Whole C programs and a browser page, built and checked by the test suite. ## Explore - [Explore](https://staticjs.tinyactors.dev/explore/index.md): Interactive views of how staticjs works. - [The pipeline](https://staticjs.tinyactors.dev/explore/pipeline.md): Follow a program through the parser, the compiler, the evaluator and the writer, step by step, live. ## Optional - [Everything in one file](https://staticjs.tinyactors.dev/llms-full.txt): every page above, in order - [The C header](https://raw.githubusercontent.com/dhamidi/tinyactors/main/staticjs/include/staticjs.h): the API reference, as plain text - [Source](https://github.com/dhamidi/tinyactors/tree/main/staticjs): the library, its tests and design notes