Steel is an evolution of the traditional note-taking and coding workspace. It provides an infinite zooming canvas where you can freely organize notes, code snippets, local media, web pages, and even deep-scan your local OS directories to visualize dependencies.
Built on Tauri v2, Steel runs entirely offline, leveraging native OS capabilities to securely manipulate your files directly from the canvas.
- Infinite Zoomable Canvas: Pan and zoom freely using a deeply optimized WebGL-grade Transform system.
- Notes View: A second, document-style way to browse the same graph (
/view) — a page-tree sidebar, per-node pages, and a collaborative block editor (rich text, headings, lists, tables, images, video, audio,@nodementions synced as graph edges). - MCP Server: Expose the open canvas as a local MCP server (
/mcp) so an external AI agent (Claude Code, Claude Desktop) can create/read/update nodes, folders, edges and notes — through the same store as the UI, so undo/autosave/P2P sync stay intact. - Native OS Drag & Drop: Drop entire system folders into Steel. The advanced Rust backend will recursively parse, filter, and render your file hierarchy visually.
- Smart AST Edge Generation: Drop a codebase (
.js,.py,.ts, etc.) and Steel will parse the Abstract Syntax Trees (AST) in Rust to automatically draw connecting dependency edges between files. - Radial Tag Engine: A gorgeous hexagonal radial menu for managing multi-tags directly on the canvas, persisting global taxonomies.
- Contextual Previews: While editing a node, seamlessly glide through adjacent connections via immersive edge-screen sidebars without breaking focus.
- In-App Media Viewer: Securely load and view
.png,.mp4and other media directly on the canvas without bloated Electron bridges. - Web Nodes: Embed live
iframessuch as Wikipedia, YouTube, or Excalidraw natively onto your workspace. - Folder Management: Group items in resizable boundary folders with elegant SVG Bezier connection curves.
- P2P Multiplayer (Weld): Real-time collaborative canvas syncing between users via secure Swarm WebRTC networking.
- Headless Canvas Server:
steel-canvas-serveris an always-on Weld peer you run from the command line (or as a packaged.exe) to keep a.steelcanvas live and saved to disk with no desktop client open — seesteel-canvas-server/README.md. - Android Support: Native mobile build with a touch-optimized toolbar, pinch-to-zoom, and an in-house webview overlay plugin for web nodes.
- Auto-Hide Command CLI: A sleek slide-up smart CLI docked to the screen bottom for executing global commands —
/helpfor the full list,/changelogfor what's new. - Native PTY Terminal Node: Spawn hardware-accelerated, fully interactive Windows
cmd.exesessions directly inside canvas nodes via/term. Powered by Rustportable-ptyandxterm.js. - Local First: Everything is stored securely on your machine as JSON workspaces. Total privacy, no cloud required.
- Dark Mode First: Carefully crafted neutral aesthetics with seamless syntax highlighting.
- Frontend: React, TypeScript, TailwindCSS, Zustand (State Management), Lucide React (Icons), Xterm.js (WebGL Terminal emulator), BlockNote (Notes block editor).
- Backend: Rust, Tauri v2 API, Portable-PTY (Native pseudo-terminals), Axum (embedded MCP JSON-RPC server).
- Sync: Yjs CRDTs, y-webrtc (Weld P2P multiplayer).
- File Parsing & AST: SWC (JavaScript/TypeScript), RustPython AST (Python).
- Testing: Vitest (unit tests), GitHub Actions (CI: type-check + tests + build).
The repository is modular and highly structured for rapid iteration:
steel/
├── docs/ # Assets.
├── src-tauri/ # Rust Backend & OS Native code
│ ├── src/
│ │ ├── ast_tester.rs # AST parsers for JS/TS/Python imports
│ │ ├── mcp.rs # Embedded MCP JSON-RPC server (canvas-as-agent-tool)
│ │ └── lib.rs # File filtering, pruning & recursive tree generation
│ ├── tauri-plugin-weboverlay/ # Native Android webview overlay plugin
│ ├── capabilities/ # Tauri v2 security scopes & capabilities
│ └── tauri.conf.json # Main Tauri entrypoint & asset protocol
├── steel-canvas-server/ # Headless always-on Weld peer (standalone Node app)
└── src/ # React Frontend
├── components/
│ ├── canvas/ # WebGL-inspired canvas, nodes, edges & zoom
│ ├── notes/ # Notes view: page tree, block editor, Steel blocks
│ ├── folders/ # Visual folder boundaries
│ ├── nodes/ # Markdown, Code, and Media node rendering
│ └── ui/ # Context menus, CLI bar, modal Note editor
├── lib/ # Persistence, MCP bridge, export engine, CLI dispatcher
├── store/ # Zustand central state store (Nodes, Edges, Folders)
├── types/ # TypeScript interfaces
└── App.tsx # Main Router
- Node.js (v18+)
- Rust (Latest Stable)
- OS-specific build tools for Tauri (e.g., MSVC on Windows).
-
Clone the repository:
git clone https://github.com/JaumeLloretRubio/Steel-Canvas.git cd Steel-Canvas -
Install frontend dependencies:
npm install
-
Run the development environment:
npm run tauri dev
(This will compile the Rust backend and launch the React dev server simultaneously)
Compile a native executable for your OS:
npm run tauri buildBinaries will be outputted to src-tauri/target/release/bundle.
Steel follows a 100% Open Source Core philosophy. The code is free to read, compile, and modify. However, we offer an Official Premium Tier built for ease of use: it provides instant pre-compiled binaries, seamless Over-The-Air (OTA) native app updates (/update), and access to our high-speed, managed STUN/TURN Weld Multiplayer Swarm servers without any configuration.
If you purchase the official build, you will receive a JWT License Token. The premium version will be available right after the tests of the global release are done. Connect to the official servers by activating your copy in the CLI:
/register [Your-JWT-License-Token]We do not lock any code behind closed doors. If you are a developer, a university team, or a privacy-focused company, you can run the P2P multiplayer backend (steel-signaling) on your own infrastructure for free!
To ensure reliable peer-to-peer (P2P) connections between clients regardless of the network (NAT/Firewall), configuring a STUN/TURN server is essential.
-
Rename or copy the
.env.examplefile in the project root to.env. -
Provide your TURN credentials (for example, you can get free ones at ExpressTURN):
VITE_TURN_URL=turn:free.expressturn.com:3478 VITE_TURN_USERNAME=YOUR_USERNAME VITE_TURN_CREDENTIAL=YOUR_PASSWORD
-
Host and start the signaling server included in the
steel-signalingfolder usingnpm run devor your production process. -
Finally, in the Command Line Interface (CLI) within your local Steel app, point the network to your server's IP/domain:
/config weld ws://your-local-ip:4444- Type
/weld startto begin collaborating over your own sovereign network!
Contributions are always welcome. Please follow the existing minimalist aesthetic guidelines and ensure Rust backend performance patches remain non-blocking (using tokio where applicable).