The easiest way to set up ngrok tunnels on macOS. Just double-click and go!
A standalone Mac application that provides an interactive, user-friendly interface for creating ngrok tunnels for any local development project. No terminal commands to remember, no configuration files to edit.
- π±οΈ One-click setup - Just double-click the app
- π― Universal compatibility - Works with any local development setup
- π¬ Interactive prompts - Guides you through configuration
- π Custom domains - Use your ngrok custom domains or enter them manually
- β Input validation - Ensures valid URLs and ports
- π‘οΈ Safe execution - No accidental commands or misconfigurations
- π± Professional interface - Clean terminal presentation
- π Reusable - Perfect for multiple projects and team sharing
When you double-click the app, it opens Terminal and provides this experience:
π Simple ngrok - Universal Tunnel Setup
=========================================
Simple ngrok - Tunnel Configuration
===================================
Common local development URLs:
β’ localhost (for most dev servers)
β’ mysite.local (Local by Flywheel, MAMP, etc.)
β’ site.test (Valet, Laravel Homestead)
β’ 127.0.0.1 (IP address)
Enter your local site URL: localhost
Common development ports:
β’ 80 (Apache, Nginx, WordPress)
β’ 3000 (React, Node.js, Rails)
β’ 8000 (Django, Python)
β’ 8080 (Alternative HTTP)
β’ 5173 (Vite)
β’ 4200 (Angular)
Enter your local port [default: 80]: 3000
Enter project name [default: 'Local Development']: My React App
Configuration Summary:
Project: My React App
Local URL: localhost
Local Port: 3000
[INFO] ngrok tunnel started successfully!
Local Site: localhost:3000
Public URL: https://abc123.ngrok-free.app
Your local site is now accessible at:
π https://abc123.ngrok-free.app
ποΈ Tunnel Management Commands
==============================
Stop tunnel: simple-ngrok.sh stop
Check status: simple-ngrok.sh status
List tunnels: simple-ngrok.sh list
Restart tunnel: simple-ngrok.sh restart
Show help: simple-ngrok.sh help
- macOS 10.15+ (Catalina or later)
- ngrok installed - Download from ngrok.com or install via Homebrew:
brew install ngrok
- ngrok authenticated - Sign up at ngrok.com and run:
ngrok authtoken YOUR_AUTH_TOKEN
# Clone the repository
git clone https://github.com/yourusername/simple-ngrok.git
cd simple-ngrok
# Build the Mac app
./scripts/build-app.sh
# The app will be created in the build/ directoryNote: On first run, macOS may ask for permission to run the app. Click "Open" to proceed.
Simple ngrok includes powerful tunnel management commands for easy control:
# Start a new tunnel (interactive setup)
./simple-ngrok.sh
./simple-ngrok.sh start
# Stop the current tunnel
./simple-ngrok.sh stop
# Check tunnel status and info
./simple-ngrok.sh status
# List all active tunnels
./simple-ngrok.sh list
# Restart the current tunnel
./simple-ngrok.sh restart
# Show help and available commands
./simple-ngrok.sh helpQuick Status Check:
./simple-ngrok.sh statusShows current tunnel status, project info, and public URL.
Stop Tunnel Properly:
./simple-ngrok.sh stopMuch better than remembering PID numbers!
List All Tunnels:
./simple-ngrok.sh listSee all active ngrok tunnels and their mappings.
Restart After Changes:
./simple-ngrok.sh restartQuickly restart tunnel with same configuration.
Simple ngrok supports using your custom ngrok domains for professional, SSL-enabled tunnels:
When starting a tunnel, you'll be prompted with:
- Random ngrok URL (default) - Gets a random URL like
abc123.ngrok-free.app - Manual domain entry - Enter your custom domain manually
- Auto-detected domains - If API access is configured, shows your domains automatically
Perfect for when you have a custom domain but auto-detection doesn't work:
ngrok Domain Selection
=====================
Available options:
1. Use random ngrok URL (default)
2. Enter custom domain manually
Select option [1]: 2
Enter your custom domain:
Examples:
β’ hardy-centrally-boxer.ngrok-free.app
β’ mysite.ngrok.io
β’ custom-domain.ngrok-free.app
Domain: hardy-centrally-boxer.ngrok-free.app
β Using custom domain: hardy-centrally-boxer.ngrok-free.app
- π― Consistent URLs - Same domain every time you start a tunnel
- π©βπΌ Professional appearance - Use branded domains instead of random ones
- π Proper SSL (paid domains only) - Paid custom domains have trusted SSL certificates
- π Free option available - ngrok provides 1 free custom domain per account
Free ngrok domains:
HSTS Enforced Domains (*.ngrok-free.app, *.ngrok-free.dev):
- β Browsers force HTTPS (HSTS preload list)
- β Self-signed certificates cause unavoidable SSL warnings
β οΈ HTTP requests automatically redirect to HTTPS
Non-HSTS Domains (*.ngrok-free.pizza):
- β Allow HTTP access without SSL warnings
- β Provide consistent URLs
- π‘ Best choice for development with .local domains
Paid custom domains (*.ngrok.io, *.ngrok.app, *.ngrok.dev):
- β Have proper SSL certificates (no warnings)
- β Professional HTTPS URLs
- β Perfect for production-like testing
For the best experience with Local by Flywheel and .local domains:
- Claim a .pizza domain - Allows HTTP without SSL warnings
- Or upgrade to paid plan - Get proper SSL certificates
- Avoid .app/.dev free domains - HSTS makes SSL warnings unavoidable
- Visit ngrok dashboard
- Claim your free custom domain
- Use it with Simple ngrok's manual entry option
React/Node.js Project:
- Local URL:
localhost - Port:
3000 - Perfect for testing API integrations and mobile devices
WordPress Site (Local by Flywheel):
- Local URL:
mysite.local - Port:
80 - Great for testing plugins and themes with external services
Django Development:
- Local URL:
localhost - Port:
8000 - Ideal for webhook testing and API development
π OAuth Testing Test GitHub, Google, or other OAuth integrations by using the ngrok URL as your callback URL.
πͺ Webhook Development Receive webhooks from Stripe, PayPal, or other services directly to your local development environment.
π± Mobile Testing Share your local development with team members or test on real mobile devices.
π₯ Client Demos Quickly share work-in-progress with clients or stakeholders.
| Framework/Platform | Typical URL | Common Ports | Notes |
|---|---|---|---|
| React, Vue, Angular | localhost |
3000, 4200, 5173 | Most modern JS frameworks |
| WordPress (Local by Flywheel) | *.local |
80, 443 | Custom local domains |
| Django, Flask | localhost |
8000, 5000 | Python web frameworks |
| Ruby on Rails | localhost |
3000 | Ruby web framework |
| PHP (XAMPP, MAMP) | localhost |
80, 8080 | Traditional PHP setups |
| Node.js/Express | localhost |
3000, 8000 | Backend API development |
simple-ngrok/
βββ src/
β βββ simple-ngrok.sh # Main interactive script
βββ scripts/
β βββ build-app.sh # Build script for Mac app
βββ build/ # Generated files (git ignored)
βββ README.md # This file
βββ LICENSE # MIT license
βββ .gitignore # Git ignore rules
To build the Mac app from source:
# Make sure you're in the project root
./scripts/build-app.sh
# The app will be created in build/Simple ngrok.appTest the script directly:
# Run the script directly (interactive setup)
./src/simple-ngrok.sh
# Test with help command
./src/simple-ngrok.sh help
# Test tunnel management
./src/simple-ngrok.sh status
./src/simple-ngrok.sh stop
# Test with arguments (if implementing CLI args)
./src/simple-ngrok.sh --url localhost --port 3000 --name "Test Project"- No command memorization - Interactive prompts guide you
- Works with any project - Universal compatibility
- Error prevention - Input validation prevents mistakes
- Time saving - Quick setup without documentation lookup
- Easy sharing - Send the app file to team members
- Consistent experience - Same interface for everyone
- Onboarding friendly - New developers can use it immediately
- Cross-project - One tool for all development environments
Contributions are welcome! Feel free to:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
# Clone your fork
git clone https://github.com/yourusername/simple-ngrok.git
cd simple-ngrok
# Create a feature branch
git checkout -b my-new-feature
# Make your changes to src/simple-ngrok.sh
# Test your changes
./src/simple-ngrok.sh
# Build the app to test
./scripts/build-app.shThis project is licensed under the MIT License - see the LICENSE file for details.
- ngrok for providing the tunneling service
- Apple for AppleScript and macOS automation capabilities
- The development community for inspiration and feedback
- π Issues: GitHub Issues
- π‘ Feature Requests: GitHub Discussions
- π Documentation: This README and inline help
- β Star this repo if you find it helpful!
Made with β€οΈ for developers who want simple, reliable ngrok tunneling on macOS.