npm install node-rc
# or
yarn add node-rc
# or
pnpm add node-rcimport { RuntimeController } from 'node-rc';
// Create a runtime controller
const rc = new RuntimeController();
// Execute Python code
const python = rc.PythonInterpreter();
const pyResult = await python.execute(`
import numpy as np
data = np.array([1, 2, 3, 4, 5])
print(f"Mean: {np.mean(data)}")
`);
console.log(pyResult.output); // "Mean: 3.0"
// Execute JavaScript with Porffor AOT compilation
const js = rc.JavaScriptInterpreter({ enableTracing: true });
const jsResult = await js.execute(`
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2);
console.log(doubled);
`);
console.log(jsResult.trace.metrics.executionTime); // ~50μs with predictable performance
// Execute TypeScript
const ts = rc.TypeScriptInterpreter();
const tsResult = await ts.execute(`
interface User {
name: string;
age: number;
}
const user: User = { name: "Alice", age: 30 };
console.log(JSON.stringify(user));
`);
console.log(tsResult.output); // {"name":"Alice","age":30}
// Execute C code
const c = rc.CInterpreter();
const cResult = await c.execute(`
#include <stdio.h>
int main() {
printf("Hello from C\\n");
return 0;
}
`);
console.log(cResult.output); // "Hello from C"
// Execute Java code
const java = rc.JavaInterpreter();
const javaResult = await java.execute(`
public class Main {
public static void main(String[] args) {
System.out.println("Hello from Java");
}
}
`);
console.log(javaResult.output); // "Hello from Java"
// Execute Ruby code
const ruby = rc.RubyInterpreter();
const rubyResult = await ruby.execute(`
puts "Hello from Ruby"
[1, 2, 3].each { |n| puts n * 2 }
`);
console.log(rubyResult.output); // "Hello from Ruby\n2\n4\n6"
// Execute Go code
const go = rc.GoInterpreter();
const goResult = await go.execute(`
fmt.Println("Hello from Go")
`);
console.log(goResult.output); // "Hello from Go"The main controller for managing runtime instances.
const rc = new RuntimeController(config?: RuntimeConfig);interface RuntimeConfig {
maxConcurrency?: number; // Max parallel executions (default: 100)
defaultTimeout?: number; // Default timeout in ms (default: 30000)
defaultMemoryLimit?: number; // Memory limit in bytes (default: 256MB)
enableTracing?: boolean; // Enable execution tracing (default: true)
}Each interpreter provides a consistent interface:
const interpreter = rc.PythonInterpreter(options?: InterpreterOptions);
// Execute code
const result = await interpreter.execute(code: string);
// Execute with input
const result = await interpreter.executeWithIO(code: string, stdin: string);
// Get interpreter info
const info = interpreter.getInfo();
// Clean up
await interpreter.destroy();interface InterpreterOptions {
timeout?: number; // Execution timeout in ms
memoryLimit?: number; // Memory limit in bytes
enableTracing?: boolean; // Enable detailed tracing
env?: Record<string, string>; // Environment variables
workingDirectory?: string; // Working directory
sandboxLevel?: 'strict' | 'moderate' | 'relaxed';
}interface ExecutionResult {
success: boolean; // Execution successful?
output: string; // Standard output
errorOutput?: string; // Standard error
value?: any; // Return value
error?: ExecutionError; // Error details if failed
trace?: ExecutionTrace; // Detailed trace (if enabled)
}
interface ExecutionTrace {
id: string; // Unique execution ID
language: Language; // Language used
sourceCode: string; // Original code
metrics: ExecutionMetrics; // Performance metrics
variables?: Record<string, any>; // Variable state
callStack?: CallFrame[]; // Call stack trace
memorySnapshots?: MemorySnapshot[]; // Memory usage over time
}const rc = new RuntimeController({ maxConcurrency: 200 });
// Run multiple languages in parallel
const results = await Promise.all([
rc.PythonInterpreter().execute('print("Python")'),
rc.JavaScriptInterpreter().execute('console.log("JS")'),
rc.TypeScriptInterpreter().execute('console.log("TS")'),
rc.CInterpreter().execute('#include <stdio.h>\nint main() { printf("C\\n"); return 0; }'),
rc.JavaInterpreter().execute('System.out.println("Java");'),
rc.RubyInterpreter().execute('puts "Ruby"'),
rc.GoInterpreter().execute('fmt.Println("Go")')
]);
// All 7 languages execute concurrently!// Strict sandboxing for untrusted code
const untrusted = rc.PythonInterpreter({
sandboxLevel: 'strict',
timeout: 5000,
memoryLimit: 64 * 1024 * 1024, // 64MB
env: {} // No environment variables
});
// Relaxed for trusted operations
const trusted = rc.PythonInterpreter({
sandboxLevel: 'relaxed',
timeout: 60000,
memoryLimit: 1024 * 1024 * 1024, // 1GB
});// Execute code with full tracing for AI analysis
const js = rc.JavaScriptInterpreter({ enableTracing: true });
const result = await js.execute(`
function processData(items) {
return items.map(x => x * 2).filter(x => x > 10);
}
const data = [1, 5, 8, 12, 3];
const result = processData(data);
console.log(result);
`);
// Access detailed execution trace
console.log('Execution ID:', result.trace.id);
console.log('Total time:', result.trace.metrics.totalTime, 'μs');
console.log('Memory used:', result.trace.metrics.peakMemoryUsage, 'bytes');
console.log('Variables:', result.trace.variables);
// Use trace for AI agent training
const trainingData = {
code: result.trace.sourceCode,
output: result.output,
metrics: result.trace.metrics,
success: result.success
};- Strict: No file system, network, or system access
- Moderate: Limited file system (tmp only), no network
- Relaxed: Read-only file system, controlled network access
const interpreter = rc.PythonInterpreter({
sandboxLevel: 'moderate',
// Explicitly grant capabilities
capabilities: ['filesystem_read', 'system_time']
});# Clone repository
git clone https://github.com/rizome-dev/node-rc.git
cd node-rc
# Install dependencies
npm install
# Build native bindings
npm run build:native
# Build TypeScript
npm run build:ts
# Run tests
npm test- Add distributed execution support
- Integrate TeaVM for better Java → WASM compilation
- Add Rust support
- Add Zig support
Made with ❤️ by Rizome Labs