Context Builder (Headless)
Demonstrates headless Risor script execution using the core package without GUI dependencies.
Features
- Headless execution - Run Risor scripts without GUI
- Static compilation - No OpenGL/X11 dependencies required
- Module support - Access HTTP, SQL, OS, and other modules
- Import system - Load reusable code from files
- CLI tools - Perfect for command-line utilities and batch processing
Code
package main
import (
"fmt"
"log"
"os"
"github.com/uidbz/fynerisor/core"
)
func main() {
// Example 1: Simple eval without imports
ctx := core.NewContext(
core.WithHTTP(),
core.WithOS(),
)
script1 := `
require(["v0.2", "@http", "@os"])
let platform = os.goos()
print("Running on:", platform)
// Simple calculation
let numbers = [1, 2, 3, 4, 5].map(x => x * 2)
let sum = 0
numbers.each(n => { sum = sum + n })
print("Sum of doubled numbers:", sum)
sum
`
fmt.Println("=== Example 1: Simple eval ===")
result, err := ctx.Eval(script1)
if err != nil {
log.Fatal(err)
}
fmt.Println("Result:", result)
// Example 2: Eval with imports
fmt.Println("\n=== Example 2: With imports ===")
// Create a simple utils.risor file
utilsScript := `
let double = (x) => x * 2
let triple = (x) => x * 3
let greet = (name) => "Hello, " + name + "!"
`
err = os.WriteFile("/tmp/test-utils.risor", []byte(utilsScript), 0644)
if err != nil {
log.Fatal(err)
}
mainScript := `
import("/tmp/test-utils.risor")
require("v0.2")
let result1 = double(5)
let result2 = triple(4)
let greeting = greet("World")
print("double(5) =", result1)
print("triple(4) =", result2)
print(greeting)
[result1, result2, greeting]
`
fetchFunc := func(path string) (string, error) {
data, err := os.ReadFile(path)
return string(data), err
}
result, err = ctx.EvalWithImports(mainScript, fetchFunc)
if err != nil {
log.Fatal(err)
}
fmt.Println("Result:", result)
fmt.Println("\n=== All examples completed successfully ===")
}Use Cases
- CLI tools - Build command-line utilities with scripting support
- Batch processing - Process data without GUI overhead
- Server-side scripts - Run Risor scripts in server environments
- Static binaries - Compile standalone executables without GUI dependencies
Running
cd examples/16-context-builder
go run main.go