A terminal UI for managing containers on macOS using the native container CLI.
- Container Management: List, start, stop, restart, and remove containers
- Image Management: List, pull, inspect, and remove images
- Network Management: List, create, inspect, and remove networks
- Volume Management: List, create, inspect, and remove volumes
- Vim-style Navigation: Use
j/kor arrow keys for navigation - Search/Filter: Quickly filter resources with
/ - Real-time Refresh: Auto-refresh data with
rkey - Detailed Inspection: View full resource details with
Enterori - Container Logs: View container logs with
L
- macOS with native container support
- Node.js >= 18.0.0
- The
containerCLI must be installed and the container service running
# Install globally
npm install -g @rotorsoft/contui
# Run the CLI
contui# Or run without installing
npx @rotorsoft/contui# Clone the repository
git clone https://github.com/Rotorsoft/contui.git
cd contui
# Install dependencies
pnpm install
# Build the project
pnpm run build
# Run the application
pnpm start# Link for global usage
pnpm link --global
# Run from anywhere
contui| Key | Action |
|---|---|
1-4 |
Switch tabs (Containers, Images, Networks, Volumes) |
h / l |
Previous/Next tab |
j / k or ↓ / ↑ |
Navigate list |
Enter |
Inspect selected item |
Esc |
Go back / Cancel |
q |
Quit |
| Key | Action |
|---|---|
n |
Run new container (Containers/Images tab) |
e |
Edit container (recreate with new settings) |
s |
Start container |
x |
Stop container |
R |
Restart container |
d |
Delete (with confirmation) |
L |
View container logs |
i |
Inspect details |
p |
Pull image (Images tab) |
c |
Create network/volume |
| Key | Action |
|---|---|
/ |
Search/Filter |
r |
Refresh data |
? |
Show help |
# Run in development mode with hot reload
pnpm dev
# Type check
pnpm run typecheck
# Lint
pnpm run lint
# Run tests
pnpm test
# Run tests with coverage
pnpm run test:coverage
# Format code
pnpm run formatThe application is built with:
- Ink: React for CLI applications
- TypeScript: Type-safe development
- React Hooks: State management with
useState,useCallback,useEffect
src/
├── components/ # React components (views, dialogs, UI elements)
├── hooks/ # Custom React hooks
├── services/ # Container CLI wrapper and utilities
├── types/ # TypeScript type definitions
└── index.tsx # Application entry point
| File | Description |
|---|---|
src/index.tsx |
Entry point with health check |
src/components/App.tsx |
Main application component |
src/services/container-cli.ts |
macOS container CLI wrapper |
src/hooks/useContainerData.ts |
Data fetching and state |
src/hooks/useKeyboard.ts |
Centralized keyboard handling |
src/types/index.ts |
TypeScript interfaces |
- Fork the repository
- Create a feature branch (
git checkout -b feat/amazing-feature) - Make your changes
- Run validation:
pnpm run typecheck pnpm run lint pnpm test - Commit using Conventional Commits:
git commit -m "feat: add amazing feature" - Push and open a Pull Request
This project uses conventional commits enforced by commitlint:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting, etc.)refactor:Code refactoringperf:Performance improvementstest:Test additions or correctionsbuild:Build system changesci:CI configuration changeschore:Maintenance tasks
MIT