piecoterminal
Automatically create and manage development terminals for multiple services with auto-discovery and flexible configuration.
Marketplace Link
Features
- Auto-Discovery: Automatically finds services with
go.mod, package.json, Cargo.toml, etc.
- Flexible Configuration: Uses VS Code Settings for custom setup
- Smart Grouping: Groups services by prefix and labels terminals with the group name
- Health Status: Optional port checks with results in the status bar
- Language Agnostic: Works with Go, Node.js, Python, Rust, and any language
- Easy Management: Create all terminals with one command, stop all with another
Installation
Step 1: Build the extension
npm install
npm run compile
Step 2: Install as development extension
Create a symlink:
ln -sf "$(pwd)" ~/.vscode/extensions/pieceowater.terminal
Step 3: Reload VS Code
- Press
Cmd+Shift+P (or Ctrl+Shift+P on Linux/Windows)
- Type "Developer: Reload Window"
- Hit Enter
Usage
Create All Terminals
Method 1: Command Palette
- Press
Cmd+Shift+P (or Ctrl+Shift+P)
- Type "pcwt: Create All Terminals"
- Hit Enter
Method 2: Keyboard Shortcut
Stop All Services
Command Palette
- Press
Cmd+Shift+P
- Type "pcwt: Stop All Services"
- Hit Enter
Restart Services
Restart Current Service
- Press
Cmd+Shift+P
- Type "pcwt: Restart Current Service"
- Hit Enter
Restart All Services
- Press
Cmd+Shift+P
- Type "pcwt: Restart All Services"
- Hit Enter
Restart Service (Quick Pick)
- Press
Cmd+Shift+P
- Type "pcwt: Restart Service (Quick Pick)"
- Hit Enter
Configuration (Settings)
Auto-Discovery (No Configuration Needed)
By default, the extension scans your workspace root and auto-discovers services based on:
- Presence of language-specific files (
go.mod, package.json, Cargo.toml, requirements.txt)
- Subdirectories (skips
node_modules, dist, build, .git, etc.)
For each discovered service:
- Go:
go run cmd/server/main.go
- Node.js:
npm run dev
- Rust:
cargo run
- Python:
python -m main
Custom Configuration
Open Settings and search for pieceoterminal. You can also edit settings.json directly:
{
"pieceoterminal.services": [
{
"name": "api-gateway",
"path": "services/gateway",
"command": "go run main.go",
"group": "api",
"port": 8080
},
{
"name": "auth-service",
"path": "services/auth",
"command": "go run main.go",
"group": "api",
"port": 8081
},
{
"name": "frontend",
"path": "web",
"command": "npm run dev",
"group": "ui",
"port": 3000
}
],
"pieceoterminal.groupPattern": "^([a-z]+)\\..*",
"pieceoterminal.commandMapping": {
"go.mod": "go run cmd/server/main.go",
"package.json": "npm run dev",
"Cargo.toml": "cargo run",
"requirements.txt": "python -m main"
},
"pieceoterminal.discoveryDepth": 2,
"pieceoterminal.exclude": ["**/*.proto", "tools/**"],
"pieceoterminal.portMapping": {
"api": 8080,
"frontend": 3000
},
"pieceoterminal.healthCheck.enabled": false,
"pieceoterminal.healthCheck.delayMs": 1500,
"pieceoterminal.healthCheck.timeoutMs": 2000
}
#### Configuration Options
- **pieceoterminal.services** (optional): Explicitly list services. If omitted, auto-discovers from workspace root
- `name`: Terminal display name
- `path`: Path relative to workspace root
- `command`: Shell command to run
- `group`: Service group for labeling
- `port`: Port for health checks
- **pieceoterminal.groupPattern** (optional): Regex to extract group from directory name
- Default: prefix before last dot (e.g., "api.gateway" → "api")
- Example: `"^([a-z]+)\\."` for "service-api" → "service"
- **pieceoterminal.commandMapping** (optional): File -> command mapping for auto-discovery
- Checked in order; first matching file determines command
- **pieceoterminal.discoveryDepth** (optional): Recursion depth (1-2)
- **pieceoterminal.exclude** (optional): Glob patterns to exclude
- **pieceoterminal.portMapping** (optional): Map service name or group to port
- **pieceoterminal.healthCheck** (optional): Health check settings
- Checked in order; first matching file determines command
## Example Projects
### Go Microservices
workspace/
├── api/
│ └── go.mod
├── auth/
│ └── go.mod
└── web/
└── package.json
Creates:
- Terminal "api" (group "api")
- Terminal "auth" (group "auth")
- Terminal "web" (group "web")
### Monorepo with Mixed Languages
workspace/
├── .multiterminal.json
├── services/
│ ├── api/
│ │ └── go.mod
│ ├── worker/
│ │ └── Cargo.toml
│ └── dashboard/
│ └── package.json
└── docs/
└── (no config files, skipped)
## Tips
- **Terminal Order**: Terminals created by group then name
- **Process Cleanup**: Stops all running service processes before creating terminals
- **Log Isolation**: Each service logs independently in its own terminal tab
## Development
### Rebuild after changes
```bash
npm run compile
Watch mode (auto-rebuild)
npm run watch
License
MIT