fjs library

FJS - Flutter JavaScript Engine

A comprehensive Flutter library for executing JavaScript code within Flutter applications. Built on top of the QuickJS engine, FJS provides a seamless integration between Dart and JavaScript, enabling developers to run JavaScript code, use Node.js modules, and create hybrid applications.

Features

  • Synchronous and Asynchronous Execution: Support for both sync and async JavaScript operations
  • Module System: Full ES6 module support with dynamic loading capabilities
  • Node.js Compatibility: Built-in support for common Node.js modules
  • Bidirectional Communication: Call JavaScript from Dart and Dart from JavaScript
  • Memory Management: Fine-grained control over memory usage and garbage collection
  • Type Safety: Type-safe conversion between Dart and JavaScript values
  • Error Handling: Comprehensive error reporting and debugging capabilities

Basic Usage

import 'package:fjs/fjs.dart';

// Create an async runtime
final runtime = await JsAsyncRuntime.withOptions(
  builtin: JsBuiltinOptions.all(),
);

// Create a context
final context = await JsAsyncContext.from(runtime);

// Create an engine
final engine = JsEngine(context);

// Initialize the engine
await engine.init();

// Execute JavaScript code
final result = await engine.eval(
  JsCode.code('Math.random() * 100'),
);

print('Random number: ${result.value}');

Module Usage

// Load a module from file
await engine.declareNewModule(
  JsModule.path('utils', '/path/to/utils.js'),
);

// Execute a function from a module
final result = await engine.eval(
  JsCode.code("import { add } from 'utils'; add(2, 3);"),
);

Bridge Communication

await engine.init(
  bridgeCall: (value) async {
    print('JavaScript called: ${value.value}');
    return JsValue.string('Hello from Dart!');
  },
);

Classes

JsAsyncContext
JsAsyncRuntime
JsBuiltinOptions
Options for configuring builtin Node.js modules.
JsCode
JsContext
JsEngine
High-level JavaScript engine for Flutter applications.
JsError
JsEvalOptions
Options for JavaScript code evaluation.
JsModule
Represents a JavaScript module.
JsResult
JsRuntime
JsValue
LibFjs
Main entrypoint of the Rust API
MemoryUsage

Extensions

JsActionPatterns on JsAction
Adds pattern-matching-related methods to JsAction.
JsActionResultPatterns on JsActionResult
Adds pattern-matching-related methods to JsActionResult.
JsBuiltinOptionsPatterns on JsBuiltinOptions
Adds pattern-matching-related methods to JsBuiltinOptions.
JsCallbackPatterns on JsCallback
Adds pattern-matching-related methods to JsCallback.
JsCallbackResultPatterns on JsCallbackResult
Adds pattern-matching-related methods to JsCallbackResult.
JsCodePatterns on JsCode
Adds pattern-matching-related methods to JsCode.
JsErrorPatterns on JsError
Adds pattern-matching-related methods to JsError.
JsEvalOptionsPatterns on JsEvalOptions
Adds pattern-matching-related methods to JsEvalOptions.
JsModulePatterns on JsModule
Adds pattern-matching-related methods to JsModule.
JsResultPatterns on JsResult
Adds pattern-matching-related methods to JsResult.
JsValuePatterns on JsValue
Adds pattern-matching-related methods to JsValue.