JavaScript Runtime

From FullJS
Jump to navigation Jump to search

Built on the V8 JavaScript engine, using a single-threaded event loop with non-blocking I/O for main execution, and supporting optional Worker threads for parallel tasks.

Supported operating systems

FullJS is designed to run exclusively on Linux-based systems.

  • Debian 12 or newer
  • Ubuntu (and other Debian-based derivatives)

Supported architectures

  • amd64
  • arm64
  • riscv64
  • arm

Event System

  • Uses epoll as the backend event notification facility for scalable, high-performance I/O.
  • Optimized for large numbers of concurrent I/O operation.

Module System

  • Supports only ES6 import/export syntax.
  • Supports .js modules and native .so modules

Global Scope

Default global scope mimics a Web API-like environment but only relevant server-side features are exposed:

  • Events (Event, EventTarget, CustomEvent)
  • Timers (setTimeout, setInterval, etc.)
  • Console (Console, console.log, console.error)
  • Base64 utilities (atob, btoa)
  • Encoding (TextEncoder, TextDecoder)
  • Storage API (Storage, localStorage, sessionStorage)
  • URL API (URL, URLSearchParams)
  • Fetch API (fetch, Response, Request)
  • Web Crypto API (crypto.getRandomValues, subtle.digest)
  • Streams API (ReadableStream, WritableStream, TransformStream)
  • Web Workers (Worker)
  • Performance (performance.now)
  • AbortController, AbortSignal
  • DOMException

Directory Structure

FullJS follows the Linux Filesystem Hierarchy Standard (FHS) with specific locations for binaries, libraries, modules, and JavaScript files:

  • /usr/bin/ – FullJS JavaScript binary (js), V8 snapshot (snapshot_blob.bin), and ICU data file (icudtl.dat)
  • /usr/lib/fulljs/ – V8 shared libraries (e.g., libv8.so)
  • /usr/lib/fulljs_modules/ – Dynamically loadable native .so C++ modules (e.g., fs, process, v4l2, etc.)
  • /usr/lib/fulljs_scope/ – JavaScript file defining the scope (e.g. globalscope, workerglobalscope)
  • /usr/share/javascript/fulljs/ – Dynamically loadable .js JavaScript modules (e.g., path, Dialog, etc.)