iws-0.1.1 is not a library.
iws
Multi-repo workspace manager — git worktree orchestration for coordinated changes across multiple repositories.
Why iws?
When working on features that span multiple repositories (e.g., backend + frontend + shared libs), you need isolated branches and working directories for each. Manually managing git worktrees across repos is tedious and error-prone.
iws automates the entire lifecycle:
iws init → iws new → work on code → iws pr → iws done
Each workspace creates isolated git worktrees for selected repos, so your main branches stay clean.
Features
- Workspace lifecycle — create, manage, and clean up multi-repo worktrees with a single command
- Interactive TUI — browse workspaces, view status, and manage repos with keyboard navigation
- Smart PR creation — generate pull requests across all repos with automatic cross-references
- Editor integration — open workspaces in Zed, VS Code, or Cursor
- Claude Code integration — launch Claude Code sessions scoped to workspace context
- Shared files — copy common config files (
.env, keyfiles) to each worktree - SPEC.md templates — auto-generated workspace specification for tracking requirements
Installation
From source
The binary is at ./target/release/iws. Move it to your $PATH:
Requirements
- Rust 1.70+ (for building)
- Git 2.20+ (worktree support)
- gh CLI (optional, for
iws pr)
Quick Start
# 1. Navigate to your multi-repo project root
# my-platform/
# ├── backend/ (git repo)
# ├── frontend/ (git repo)
# └── shared-lib/ (git repo)
# 2. Initialize iws (auto-detects git repos)
# 3. Create a workspace
# 4. Work on your code in .workspaces/auth-refactor/{repo}/
# Edit .workspaces/auth-refactor/SPEC.md to track requirements
# 5. Create PRs across all repos
# 6. Clean up when done
Usage
Interactive TUI
Launch the terminal UI for browsing and managing workspaces with keyboard navigation.
CLI Commands
| Command | Description |
|---|---|
iws init |
Initialize iws in current directory |
iws new <name> --repos r1,r2 [--branch name] |
Create workspace with worktrees |
iws list |
List all workspaces |
iws status <name> |
Show workspace status (commits ahead, dirty files) |
iws open <name> [--editor zed|code|cursor] |
Open in editor |
iws claude <name> |
Start Claude Code session in workspace |
iws add-repo <name> <repo> [--branch name] |
Add repo to workspace |
iws remove-repo <name> <repo> |
Remove repo from workspace |
iws pr <name> |
Create PRs for all repos |
iws done <name> [--force] |
Clean up workspace |
How It Works
Project Structure
After iws init, a .workspaces/ directory is created:
my-platform/
├── backend/
├── frontend/
└── .workspaces/
├── config.toml # Project config (repos, shared files)
└── auth-refactor/ # Workspace
├── .workspace.toml # Workspace config
├── SPEC.md # Requirements & progress
├── .claude/CLAUDE.md # Claude Code context
├── backend/ # Git worktree → backend repo
└── frontend/ # Git worktree → frontend repo
Workspace Lifecycle
init— Scans current directory for git repos, creates.workspaces/config.tomlnew— Creates worktrees withfeature/{name}branches (or custom), copies shared files, generates SPEC.md- Work — Edit code in worktree directories. Main repo checkouts are untouched
pr— Pushes branches and creates GitHub PRs with cross-references between reposdone— Removes worktrees and local branches (warns about uncommitted changes)
Configuration
Project Config (.workspaces/config.toml)
[]
= "my-platform"
= "/path/to/my-platform"
[]
= "backend"
= "main"
= [".env"]
[]
= "frontend"
= "main"
= [".env.local"]
Workspace Config (.workspaces/{name}/.workspace.toml)
[]
= "auth-refactor"
= "2024-03-20"
[]
= "feature/auth-refactor"
[]
= "feature/auth-refactor"
License
MIT