ShellUI provides safe and simple access to predefined shell commands from a modern web interface with advanced theming capabilities.
- π¨ Modern Web Interface - Built with React, TypeScript, and Tailwind CSS
- β‘ Real-time Execution - WebSocket-based real-time command output streaming
- π Security First - Built-in authentication and access control
- π± Responsive Design - Touch-friendly interface for tablets and mobile
- π Command History - Track and manage command execution history
- βοΈ YAML Configuration - Simple configuration in YAML format
- π³ Container Ready - Docker support for easy deployment
- π API Integration - RESTful API for external integrations
- π― Advanced Validation - Real-time argument validation with patterns and constraints
- π Built-in Help - Command help integration with man pages
- π¨ Custom Themes - Advanced theming with custom colors and effects
- π Execution Statistics - Track command usage and performance
- Give family members a button to restart services:
systemctl restart plex - Provide junior admins with simple web forms for complex scripts
- Enable temporary SSH access:
firewall-cmd --add-service ssh --timeout 20m
- Expose complex commands on wall-mounted tablets
- Run long-running commands from mobile devices
- Create parameterized commands with dropdown selections
- Manage multiple servers from a single interface
- Node.js 18+ or Bun
- Linux/Unix system with shell access
-
Clone the repository
git clone https://github.com/your-username/shellui.git cd shellui -
Install dependencies
bun install
-
Configure commands
cp config.example.yaml config.yaml # Edit config.yaml with your commands -
Start the application
bun dev
-
Access the web interface Open http://localhost:3000 in your browser
ShellUI uses YAML configuration files to define commands, themes, and security settings.
title: "ShellUI - My Server"
theme: "dark"
auth:
enabled: true
users:
- username: "admin"
password: "secure_password"
roles: ["admin"]
commands:
- id: "system-info"
title: "System Information"
description: "Display system information"
icon: "Terminal"
shell: "/bin/bash"
command: "uname -a && df -h && free -h"
category: "System"commands:
- id: "ping-test"
title: "Ping Test"
description: "Test network connectivity"
icon: "Wifi"
category: "Network"
shell: "/bin/bash"
command: "ping -c {{ count }} {{ host }}"
args:
- name: "host"
type: "text"
label: "Host"
placeholder: "Enter hostname or IP"
required: true
pattern: "^[a-zA-Z0-9.-]+$"
help: "Enter a valid hostname or IP address"
- name: "count"
type: "number"
label: "Count"
default: 4
min: 1
max: 20
required: false
help: "Number of ping packets to send"ShellUI follows a modern microservices architecture:
- Frontend: React + TypeScript + Tailwind CSS
- Backend: Bun + Elysia.js (TypeScript)
- Real-time: WebSocket for live command output
- Storage: JSON-based execution history
- Authentication: JWT-based with role-based access
- Authentication: JWT-based user authentication
- Authorization: Role-based access control
- Input Validation: Strict parameter validation with patterns
- Command Sanitization: Safe command execution
- Rate Limiting: Prevent abuse
- Audit Logging: Track all command executions
- Installation Guide - Complete installation instructions
- Configuration Guide - Detailed configuration options
- Command Examples - Practical command examples
- API Reference - REST API documentation
- Security Guide - Security best practices
ShellUI provides a comprehensive REST API for integration:
- Command Execution: POST
/api/commands/{id}/execute - Real-time Output: WebSocket connection
- History Management: GET
/api/history - Configuration: GET
/api/config/commands - Argument Validation: GET
/api/commands/validate-args/{id}
# Execute a command
curl -X POST http://localhost:3000/api/commands/ping-test/execute \
-H "Content-Type: application/json" \
-d '{"args": {"host": "google.com", "count": 4}}'
# Get execution history
curl http://localhost:3000/api/history?limit=10# Build the image
docker build -t shellui .
# Run with configuration
docker run -d \
--name shellui \
-p 3000:3000 \
-v /path/to/config.yaml:/app/config.yaml \
-v /path/to/data:/app/data \
shellui- Node.js 18+ or Bun
- Git
# Clone repository
git clone https://github.com/your-username/shellui.git
cd shellui
# Install dependencies
bun install
# Start development servers
bun devshellui/
βββ packages/
β βββ client/ # React frontend
β βββ server/ # Bun backend
βββ docs/ # Documentation
βββ config.example.yaml # Example configuration
βββ package.json # Root package.json
# Development
bun dev # Start both client and server
bun dev:client # Start client only
bun dev:server # Start server only
# Building
bun build # Build both client and server
bun build:client # Build client only
bun build:server # Build server only
# Testing
bun test # Run all tests
bun test:client # Run client tests
bun test:server # Run server tests
# Linting
bun lint # Lint all packages
bun lint:client # Lint client
bun lint:server # Lint serverWe welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Add tests for new functionality
- Run tests:
bun test - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
MIT License - see LICENSE file for details.
- Documentation: docs.shellui.dev
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Discord: Join our Community
- Kubernetes integration
- Plugin system
- Advanced scheduling
- Multi-server management
- Mobile app
- Enterprise features
- Advanced monitoring
- Backup and restore
- Multi-language support
- Inspired by OliveTin - A great open-source project
- Built with React and Bun
- UI components from shadcn/ui
- Icons from Lucide
ShellUI - Making shell commands accessible to everyone. π