RuneBook is a reactive, canvas-native computing environment that merges terminals, notebooks, and web components. Built on Svelte 5, PluresDB, Tauri, and Sudolang, RuneBook lets users wire terminals, inputs, and UI components on a visual canvas to create programmable, AI-enhanced workflows that behave like reactive web apps.
Clone the repository:
git clone https://github.com/plures/runebook.git
cd runebook
Install dependencies:
npm install
Run in development mode:
npm run tauri dev
Build for production:
npm run tauri build
Use the toolbar on the left to add nodes to the canvas:
Terminal nodes execute shell commands and expose their stdout as reactive outputs:
Input nodes provide interactive controls:
Display nodes visualize data from connected nodes:
To connect nodes:
Click "š Load Example" in the toolbar to load pre-built canvas examples:
hello-world.yaml: Simple echo command and input demonstrationdate-time-example.yaml: Multiple terminals showing date, time, and file listingsClick "š¾ Save" to export your canvas as a YAML file. The file contains:
Canvas definitions use YAML for human-readable configuration:
id: my-canvas
name: My Canvas
description: A sample canvas
version: 1.0.0
nodes:
- id: terminal-1
type: terminal
position: { x: 100, y: 100 }
label: Echo Command
command: echo
args: ["Hello, World!"]
autoStart: true
inputs: []
outputs:
- id: stdout
name: stdout
type: output
- id: display-1
type: display
position: { x: 500, y: 100 }
label: Output Display
displayType: text
inputs:
- id: input
name: input
type: input
outputs: []
connections:
- from: terminal-1
to: display-1
fromPort: stdout
toPort: input
RuneBook is built with:
runebook/
āāā src/
ā āāā lib/
ā ā āāā components/ # Svelte components
ā ā āāā stores/ # State management
ā ā āāā types/ # TypeScript types
ā ā āāā utils/ # Utility functions
ā āāā routes/ # SvelteKit routes
āāā src-tauri/
ā āāā src/ # Rust backend
ā āāā Cargo.toml # Rust dependencies
āāā static/
ā āāā examples/ # Example canvas files
āāā package.json # Node dependencies
RuneBook executes terminal commands with the following security measures:
std::process::Command, not through a shell. This prevents shell injection attacks.ls | grep won't work as shell pipelines. Each command must be a single executable.Contributions are welcome! Please read our contributing guidelines before submitting PRs.
MIT License - see LICENSE file for details
VS Code + Svelte + Tauri + rust-analyzer.