A real bash terminal in your Filament admin panel — powered by PTY + WebSocket.
Repository: github.com/octadecimalhq/shellgate
Shell Gate is a standalone product. It may be developed or tested inside another workspace (e.g. via Composer path repository) but has no dependency on that workspace.
Shell Gate brings a fully functional bash terminal directly into your Filament v5 admin panel. Unlike command-by-command runners, this plugin provides a persistent PTY session over WebSocket (wss://), giving you the exact same experience as SSH — but in your browser.
┌─────────────────────────────────────────────────────────────────┐
│ admin@server:~$ ls -la │
│ total 48 │
│ drwxr-xr-x 12 www-data www-data 4096 Feb 1 10:30 . │
│ drwxr-xr-x 3 root root 4096 Jan 15 08:00 .. │
│ -rw-r--r-- 1 www-data www-data 1234 Feb 1 10:30 .env │
│ drwxr-xr-x 8 www-data www-data 4096 Feb 1 10:25 app │
│ -rwxr-xr-x 1 www-data www-data 1686 Jan 20 12:00 artisan │
│ admin@server:~$ █ │
└─────────────────────────────────────────────────────────────────┘
- Real PTY Session — Not just command execution; a true pseudo-terminal with full readline, history, tab completion
- Persistent Session — Your session stays alive while the page is open; run long commands, use vim, htop, etc.
- WebSocket (wss://) — Real-time bidirectional communication with TLS encryption
- xterm.js Frontend — Industry-standard terminal emulator (powers VS Code, JupyterLab, Portainer)
- JWT Authentication — Short-lived tokens (5-10 min) for each session
- Role-Based Access — Restrict to super_admin or custom roles
- User Isolation — Optional chroot, containerized shell, or dedicated system user
- Audit Logging — Full session logging: who, when, which commands
- TLS Encryption — All traffic encrypted via wss://
- Native Page — Seamless integration into Filament navigation
- Dark Mode Support — Respects Filament's theme
- Multi-Panel — Works with multiple Filament panels
- Configurable — Extensive configuration via
config/shell-gate.php
- Docker Support — Includes Dockerfile for the terminal gateway
- Nginx Config — Ready-to-use WebSocket proxy configuration
- Horizontal Scaling — Gateway can run as separate service
| Component | Version |
|---|---|
| PHP | 8.2+ |
| Laravel | 11.28+ |
| Filament | 3.0+ / 4.0+ / 5.0+ |
| Livewire | 4.0+ |
| Node.js | 18+ (for Terminal Gateway) |
Shell Gate is distributed via Anystack. After purchase you will receive a license key.
Add the Anystack Composer repository to your composer.json:
{
"repositories": [
{
"type": "composer",
"url": "https://shellgate.composer.sh"
}
]
}Authenticate with your email and license key:
composer config http-basic.shellgate.composer.sh YOUR_EMAIL YOUR_LICENSE_KEYInstall:
composer require octadecimalhq/shellgateLocal development (path repository): Place the package at
./packages/octadecimalhq/shellgateand add a path repository instead:{"type": "path", "url": "./packages/octadecimalhq/shellgate"}Then:
composer require octadecimalhq/shellgate:@dev
php artisan shellgate:installThis single command:
- Publishes configuration
- Runs database migrations
- Registers
ShellGatePluginin yourAdminPanelProvider.php - Configures gateway
.env(JWT secret, working directory) - Installs gateway npm dependencies
Development mode: Use
php artisan shellgate:install --devto skip license prompts. Inlocalenvironment, any authenticated user can access the terminal automatically.
php artisan shellgate:serveVisit /admin/terminal in your browser.
Production: Use systemd, PM2, or Docker instead of
artisan shellgate:serve. See Installation Guide for details.
┌──────────────────────────────────────────────────────────────────────┐
│ 🔧 System Tools > Web Terminal [×] │
├──────────────────────────────────────────────────────────────────────┤
│ │
│ admin@myapp:~$ php artisan about │
│ │
│ Environment .......................... production │
│ Debug Mode ........................... DISABLED │
│ URL .................................. https://myapp.com │
│ Maintenance Mode ..................... OFF │
│ │
│ admin@myapp:~$ docker compose ps │
│ NAME SERVICE STATUS PORTS │
│ app app running 0.0.0.0:8000->8000/tcp │
│ mysql mysql running 3306/tcp │
│ redis redis running 6379/tcp │
│ │
│ admin@myapp:~$ █ │
│ │
└──────────────────────────────────────────────────────────────────────┘
- Architecture — System design, components, data flow
- Security — Threat model, isolation, hardening
- Installation — Detailed setup guide
- Configuration — All configuration options
- API Reference — REST endpoints, WebSocket protocol
Shell Gate validates your license via Anystack at runtime.
Add both keys to your .env:
# Your license key (from purchase confirmation)
SHELL_GATE_LICENSE_KEY=your-license-key-here
# Anystack runtime API key (same for all customers)
ANYSTACK_CUSTOMER_API_KEY=8AE4QSBwTGwiPyrSvmw6vozlPbbkZr7JThe ANYSTACK_CUSTOMER_API_KEY has minimal permissions (validate/activate only) and is safe to use in your application.
php artisan shell-gate:licenseLicense verification is automatically skipped in local and testing environments.
For more details, see Installation → License Verification.
This plugin is sold under a commercial license. Each license includes:
- Single Site License — Use on one production domain
- Unlimited License — Use on unlimited domains
- Agency License — Use on unlimited client projects
- 1 Year Updates — Free updates for 12 months
- Priority Support — Email support with 48h response time
See LICENSE-COMMERCIAL.md for full terms.
- Documentation — Start with the docs above
- GitHub Issues — Bug reports and feature requests
- Email Support — support@octadecimal.engineering (license holders)
- Discord — Community support in #plugins channel
Built with these amazing open-source projects:
- Filament — Admin panel framework
- xterm.js — Terminal emulator
- node-pty — PTY for Node.js
- Laravel — PHP framework
Copyright © 2026 Octadecimal Engineering. All rights reserved.
This is commercial software. See LICENSE-COMMERCIAL.md for licensing terms.
Unauthorized copying, modification, or distribution of this software is strictly prohibited.