🚀 Skipper
A powerful tunnel and reverse proxy that allows you to expose your localhost projects to the internet through a subdomain. Simple, fast, and secure - your local development environment, accessible from anywhere.
✨ Features
- 🚀 Simple Setup - One command to expose your localhost
- ⚡ Fast - Built with Go for high performance
- 🌐 Global Access - Access your projects from anywhere
- 🎯 Custom Subdomains - Choose your own subdomain
🛠️ Installation
Package Managers
Homebrew (macOS)
brew tap juandi247/skipper
brew install skipper
Chocolatey (Windows)
choco install skipper
⚠️ Pending for approval
Direct Downloads
Download the latest version (v0.0.7) directly for your platform:
| Platform | Download |
|---|---|
| Linux AMD64 | skipper_0.0.7_linux_amd64.tar.gz |
| Linux ARM64 | skipper_0.0.7_linux_arm64.tar.gz |
| Windows AMD64 | skipper_0.0.7_windows_amd64.tar.gz |
| Windows ARM64 | skipper_0.0.7_windows_arm64.tar.gz |
| macOS AMD64 | skipper_0.0.7_darwin_amd64.tar.gz |
| macOS ARM64 (M1) | skipper_0.0.7_darwin_arm64.tar.gz |
🚀 Quick Start
Getting started with Skipper is as simple as running a single command:
skipper -port 3000 -subdomain myapp
This will expose your local application running on port 3000 at:
https://myapp.skipper.lat
Parameters
-port: The port where your local application is running-subdomain: The subdomain you want to use (will be available at subdomain.skipper.lat)
🏗️ Architecture
Skipper operates through a sophisticated architecture with advanced Go patterns:
🚀 Core Architecture
- TCP Persistent Connection: Bidirectional communication between proxy and tunnel
- Custom Framing Protocol: 20-byte binary header for efficient message routing
- Stream Multiplexing: Multiple flows over single TCP connection
🧠 Concurrency Patterns
- Worker Pools: Efficient concurrent task management
- Fan-In/Fan-Out: Dynamic message distribution patterns
- Reactor Pattern: Message dispatching by type and StreamID
🎛️ State Machine Design
- Functional FSM: Tunnel as concurrent state machine
- Graceful Shutdown: Controlled resource cleanup with context
- Error Handling: Robust state transitions and recovery
📦 Protocol & Serialization
- Protocol Buffers: Compact, fast serialization
- Go Idioms: Context, select, interfaces
- Extensible Design: Decoupled handlers for testing
🐕 Meet Skipper
Skipper: looks cute, contributes nothing to the repo
🤝 Contributing
We welcome contributions from the community! Here's how you can help:
- 🐛 Report bugs on our GitHub Issues page
- 💡 Suggest new features or improvements
- 📝 Help improve our documentation
- 🔧 Submit a Pull Request with your improvements
📞 Contact
- GitHub: @juandi247
- Email: [email protected]
- LinkedIn: Juan Diego Diaz