A modern, fast, open-source SSH terminal for network engineers.
Built to replace SecureCRT with a lightweight, keyboard-driven workflow — jump host proxying, tabbed sessions, device inventory, and Lua scripting.
# Install Homebrew (if needed)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Rust
brew install rustup
rustup-init
# Install Node.js
brew install node
# Xcode Command Line Tools (required by Tauri for macOS builds)
xcode-select --install
# Clone and run
git clone https://github.com/ndtobs/span.git
cd span
npm install
npm run tauri dev
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Tauri system dependencies
sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
# Clone and run
git clone https://github.com/ndtobs/span.git
cd span
npm install
npm run tauri dev
npm run tauri build
Note: First build takes several minutes to compile Rust dependencies. Subsequent builds are fast with hot reload for both frontend and backend.
span/
├── src/ # Svelte frontend
│ ├── lib/
│ │ ├── components/ # UI components
│ │ ├── stores/ # Svelte stores (state)
│ │ └── types/ # TypeScript types
│ ├── App.svelte # Root component
│ └── main.ts # Entry point
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── main.rs # Tauri entry
│ │ ├── commands/ # IPC command handlers
│ │ ├── ssh/ # SSH connection manager
│ │ ├── inventory/ # Device inventory (SQLite)
│ │ ├── credentials/ # Credential vault
│ │ └── scripting/ # Lua engine
│ ├── migrations/ # SQLite migrations
│ └── Cargo.toml
├── static/ # Static assets
└── package.json