A desktop application built with Tauri and React that provides a terminal interface for managing Podman containers.
- ✅ Check and initialize Podman installation automatically
- 🐳 Create and manage containers with a visual interface
- 💻 Full terminal emulation with PTY (Pseudo-Terminal) support
- ⚡ Real-time command execution and output streaming
- 🎨 Built-in terminal emulator using xterm.js
- 🔧 Support for interactive programs (vim, htop, Claude Code, etc.)
- 📋 Container logs viewer with syntax highlighting
- ⌨️ Keyboard shortcuts for common actions
- 🌍 Cross-platform support (macOS, Linux, Windows)
-
Install Podman using Homebrew:
brew install podman
-
On Apple Silicon Macs, you may be prompted to install Rosetta 2 for compatibility with some container images.
-
The application will automatically initialize the Podman machine on first run.
- Install Podman using your distribution's package manager:
# Ubuntu/Debian sudo apt-get update sudo apt-get install podman # Fedora/RHEL sudo dnf install podman # Arch Linux sudo pacman -S podman
- Download and install Podman from the official website
-
Install dependencies:
bun install
-
Run in development mode:
bun run tauri dev
-
Build for production:
bun run tauri build
-
First Launch: The application will check for Podman installation and initialize the Podman machine if needed.
-
Creating Containers:
- Enter a container name in the sidebar
- Select a base image from the dropdown:
- Node.js Images (Recommended for Claude Code):
- Node.js 22 LTS (Latest stable with npm 10+)
- Node.js 20 LTS (Current LTS)
- Node.js 20 Alpine (Lightweight)
- Multi-Language Dev Containers:
- Universal Dev Container (Node, Python, Go, Rust, etc.)
- Gitpod Full (Complete development environment)
- Base OS Images:
- Ubuntu 24.04 LTS, Ubuntu 22.04 LTS
- Debian 12 (Bookworm)
- Alpine Latest (Minimal)
- Other Languages: Python 3.12, Rust, Go 1.22
- Node.js Images (Recommended for Claude Code):
- Click "Create Container" to create with optional dev tools
-
Managing Containers:
- Select a container to make it active
- Use the command bar at the bottom to execute commands
- Stop or remove containers using the action buttons
-
Terminal Interface:
- The integrated terminal shows real-time output from container commands
- Supports clickable links and proper terminal formatting
- Toggle between PTY mode (for interactive programs) and command mode (for one-off commands)
Enable PTY mode by checking "Full Terminal Mode (PTY)" at the bottom of the terminal. This mode:
- Provides a full interactive terminal session inside the container
- Supports terminal programs like vim, nano, htop, Claude Code
- Handles special keys (arrow keys, Ctrl+C, etc.) properly
- Maintains terminal state between commands
- Required for any interactive CLI applications
When PTY mode is disabled:
- Execute individual commands using the command bar
- Best for quick one-off commands
- Each command runs in isolation
- Output is displayed in the terminal but no input is accepted
Claude Code requires PTY mode for the best experience:
- Create a container with a Node.js image (recommended: Node.js 22 LTS)
- Select the container and enable PTY mode
- Install Claude Code:
npm install -g claude-code
- Initialize Claude Code:
claude init
- Start using Claude Code normally with full terminal support
Cmd/Ctrl + R
- Refresh containers listCmd/Ctrl + 1-9
- Quick select container by indexCmd/Ctrl + K
- Focus container name input
Cmd/Ctrl + P
- Toggle PTY modeCmd/Ctrl + L
- Clear terminalESC
- Exit log view
Cmd/Ctrl + ?
- Show keyboard shortcuts help
For a comprehensive technical deep dive into how this application works, including:
- How Podman integration is implemented
- Terminal emulation with xterm.js
- PTY (Pseudo-Terminal) implementation details
- Event system and IPC communication
- Container lifecycle management
- Data flow diagrams
Please see ARCHITECTURE.md
- Frontend: React + TypeScript with xterm.js for terminal emulation
- Backend: Rust-based Tauri framework for native functionality
- Container Management: Uses Podman CLI commands (future: Podman socket API)
- Communication: Tauri's command and event system for IPC
- Double character output: Make sure you're running the latest version. This was fixed in recent updates.
- Terminal not responding: Try disabling and re-enabling PTY mode, or restart the container.
- Special keys not working: Ensure PTY mode is enabled for proper key handling.
- Container won't start: Check Podman machine status with
podman machine list
in your system terminal - Permission denied errors: Ensure the volume mount permissions are correct
- Can't connect to container: Verify the container is running using the refresh button
- macOS Apple Silicon: Some container images may require architecture-specific versions. Use multi-arch images or specify
--platform linux/amd64
if needed. - Windows: Ensure Podman Desktop is installed and WSL2 is properly configured
- Linux: Check that your user is in the appropriate groups for Podman rootless mode
- Initial Podman machine setup may take several minutes on first run
- Alpine Linux containers have limited compatibility with some tools (e.g., Claude Code) due to BusyBox utilities. Use Ubuntu or Debian-based images for full compatibility.
- Container logs are not yet viewable in the UI (use
podman logs <container>
in command mode as a workaround)
- ARCHITECTURE.md - Technical deep dive into the implementation
- CLAUDE.md - Development guidelines for Claude Code
- Code Comments - Inline documentation references the architecture docs
Contributions are welcome! Please feel free to submit issues and pull requests.
When contributing, please:
- Read the ARCHITECTURE.md to understand the codebase
- Follow the existing code style and patterns
- Add tests for new functionality
- Update documentation as needed
This project is open source and available under the MIT License.