README

Crucible

An AI agent IDE for Windows — project-centric workspace combining terminal multiplexing, a code editor, git integration, and smart notifications.

Built with Tauri React Rust License CC BY-NC-SA 4.0

TypeScript xterm.js Monaco last commit


Features · Quick Start · Architecture · Tech Stack · Configuration · Contributing


Crucible is a desktop IDE built for developers who live in the terminal. It wraps multiple PTY sessions, a Monaco code editor, git tooling, and smart notifications into a single Tauri-powered window — native performance, no Electron, no browser tab.

One workspace. Every project. Zero context switching.


Features

Terminal

  • Multi-project terminals — Run multiple PTY sessions side-by-side
  • Terminal tabs — Multiple tabs per project with + button and per-tab close
  • Split panes — Vertical and horizontal split views (Ctrl+\)
  • Session persistence — Active project restored on restart
  • Auto-save — Files saved automatically on tab switch and window blur
  • ConPTY native — Real Windows terminal, not a wrapper

Editor & Files

  • Monaco editor — Syntax highlighting, file tabs, full editing
  • File explorer — Browse, open, rename, delete files from the sidebar
  • Right-click context menu — New file/folder, rename inline, delete with confirmation, copy path
  • Project search — Search across all project files (Ctrl+Shift+F)
  • Find in file — Search within the active file (Ctrl+F)
  • Command Palette — Quick access to all commands (Ctrl+Shift+P)

Git

  • Branch status — Current branch always visible in status bar
  • Changed files — Badge count on the Source Control icon
  • Inline diffs — Review changes without leaving the IDE
  • Stage/unstage/discard — Full git workflow from the sidebar

Workflow

  • Project management — Add/remove projects via folder picker
  • Smart notifications — Attention detection with sidebar indicators and border glow
  • Settings modal — Font, theme, cursor, zoom, sidebar position, accent color — all configurable
  • Keyboard-driven — F-key project switching, full keybinding support
  • Edit menu — Find in File, Find in Project, Command Palette via menu bar

Quick Start

Prerequisites

Install & Run

git clone https://github.com/The-R4V3N/Crucible.git
cd Crucible
npm install
npm run dev

This starts both the Vite dev server and the Tauri/Rust backend.

Run Tests

npm run test                    # Frontend tests (Vitest)
cd src-tauri && cargo test      # Rust tests

Build for Production

npm run build

Produces a Windows installer (.msi/.exe) in src-tauri/target/release/bundle/.


Architecture

Crucible/
├── src-tauri/               Rust backend (Tauri v2)
│   └── src/
│       ├── main.rs          Tauri entry point
│       ├── pty/             PTY session management (ConPTY)
│       ├── git/             Git integration (git2)
│       ├── files/           File system ops + watcher (notify)
│       ├── config/          Config loading + validation
│       └── commands.rs      IPC command handlers
│
├── src/                     React frontend
│   ├── components/          UI — sidebar, terminal, editor, explorer, diff, panels, layout, settings, palette, search
│   ├── hooks/               useSession, useGit, useFileWatcher, useKeyboard, useAutoSave, useEditorCursor, useGitDecorations
│   ├── stores/              State management (Zustand) — session, editor, ui, config, file, palette
│   ├── lib/                 Utilities — ipc, keybindings, theme
│   └── styles/              Tailwind + custom CSS
│
└── tests/
    ├── rust/                Rust integration tests
    └── frontend/            React component + hook tests
IPC Contract (Rust ↔ React)

Commands defined in src-tauri/src/commands.rs, called via @tauri-apps/api:

CommandDescription
pty_create(path, command)Spawn a new PTY session → returns session_id
pty_write(session_id, data)Write input to a PTY session
pty_resize(session_id, rows, cols)Resize the terminal
pty_kill(session_id)Kill a PTY session
git_status(path)Get git status for a project
git_diff(path)Get git diff output
file_tree(path)List directory tree
file_read(path)Read file contents
file_write(path, content)Write file contents
file_rename(old_path, new_path)Rename or move a file
file_delete(path)Delete a file
config_load()Load config from disk
config_save(config)Persist config to disk
list_fonts()List installed system fonts (Windows registry)

Events: pty:output · pty:exit · file:changed


Tech Stack

LayerTechnologyPurpose
BackendRust (Tauri v2)Native performance, system access
PTYportable-pty (ConPTY)Real terminal sessions on Windows
Gitgit2 crateBranch, status, diff operations
File Watchnotify crateReal-time file change detection
FrontendReact 19 + TypeScriptUI components and state
StylingTailwind CSSUtility-first styling
StateZustandLightweight state management
Terminalxterm.jsTerminal emulation in the browser view
EditorMonaco EditorCode editing with syntax highlighting
BuildViteFast frontend bundling

Configuration

Crucible stores its config in Crucible_config.json (auto-created on first run, never committed):

{
  "projects": [
    { "name": "my-app", "path": "C:/Projects/my-app", "command": "powershell.exe" }
  ],
  "theme": "dark",
  "accent_color": "#00E5FF",
  "font_family": "Cascadia Code",
  "font_size": 14,
  "cursor_style": "bar",
  "terminal_theme": "dark",
  "divider_color": "#1E1E2E",
  "ui_zoom": 1.0,
  "sidebar_position": "left",
  "default_project_path": "",
  "shell_command": "powershell.exe",
  "branch_prefix": "feature/",
  "active_project": "my-app"
}

All settings are editable through the Settings modal (gear icon in the activity bar).


Contributing

PRs welcome. See ARCHITECTURE.md for the full blueprint.

Development follows strict TDD — every feature starts with a failing test. See CLAUDE.md for coding conventions and commit guidelines.


Brand

Accent: #00E5FF Neon Cyan · Theme: Dark · Font: Cascadia Code


built with Rust, driven by agents