Getting Started with Periscope
Install the CLI, log in, and create your first secure tunnel in under two minutes.
Prerequisites
Before you begin, make sure you have the following installed on your machine:
- check_circle Node.js 20+ — download from nodejs.org
- check_circle npm — included with Node.js
- check_circle A web browser — for authentication (any modern browser works)
1 Install the CLI
Install Periscope globally using npm:
npm install -g @elf5/periscope
Verify the installation by checking the version:
periscope --version
You should see the current version number printed to the console.
2 Log In
Authenticate with the Periscope server. This opens your browser where you can sign up or sign in with your email:
periscope auth login
After signing in, verify your authentication status:
periscope auth status
You should see your email address and account status confirmed.
3 Create Your First Tunnel
Create a tunnel that exposes your local development server to a public URL:
periscope tunnel connect my-app --localPort 3000
This creates a tunnel named my-app that forwards traffic from the Periscope server to port 3000 on your machine.
Options
Use a custom port with the -p flag:
periscope tunnel connect my-app -p 8080
Set a custom host header with --localHost:
periscope tunnel connect my-app --localPort 3000 --localHost myapp.local
4 Check Server Status
Check the status of the Periscope server and your active tunnels:
periscope status
This displays connection health, server version, and a list of your active tunnels.
5 Live Request Logging
Live HTTP request logging is enabled by default. Every request that passes through your tunnel is logged to the console in real time, including method, path, status code, and timing.
To disable request logging:
periscope config set --request-log false
Re-enable it at any time by setting the value back to true.
6 Interactive Mode
Launch Periscope in interactive mode for a guided experience. The interactive CLI walks you through tunnel creation and configuration with prompts:
periscope --interactive
Interactive mode is ideal when you are getting started or want to explore available options without memorizing commands.
Configuration
View your current configuration with:
periscope config show
Change the server URL (useful if your organization self-hosts Periscope):
periscope config set --server https://periscope.yourcompany.com
Configuration Priority
Periscope resolves configuration values in the following order (highest priority first):
- Environment variables — override everything
.envfile — project-level defaults- Config file — persisted via
periscope config set
Common Use Cases
Webhook Development
Receive webhooks from third-party services (Stripe, GitHub, Twilio) on your local machine without deploying.
periscope tunnel connect webhooks --localPort 3000
Mobile App Development
Point your mobile app at the tunnel URL to test against a local API server running on your development machine.
periscope tunnel connect mobile-api --localPort 8080
Sharing Work in Progress
Share a live preview of your work with teammates or stakeholders without deploying to a staging environment.
periscope tunnel connect demo --localPort 5173
Multi-Service Development
Expose multiple local services at the same time, each on its own tunnel with its own public URL.
periscope tunnel connect frontend --localPort 3000 periscope tunnel connect api --localPort 8080
Troubleshooting
-
error_outlineServer is unreachable
Check your internet connection and verify the server URL is correct with
periscope config show. If your organization self-hosts Periscope, confirm the server address with your admin. You can update it with:periscope config set --server https://periscope.yourcompany.com
-
error_outlineAuthentication Fails
Try logging out and back in to refresh your credentials:
periscope auth logout periscope auth login
Make sure your browser completes the sign-in flow and returns you to the CLI confirmation page. If the issue persists, check that your system clock is accurate.
-
error_outlineTunnel Won't Connect
Verify that the local service is running on the port you specified. For example, if you used
--localPort 3000, confirm your app is listening on port 3000. Also check that no firewall rules are blocking local connections. Runperiscope statusto see detailed connection diagnostics.
We Want Your Feedback
Periscope is in beta and we are actively improving it based on your input. Tell us what is working, what is not, and what you would like to see next.
Logged-in users can send feedback directly from the CLI:
periscope feedback "Your message here"
Not logged in? Email us at [email protected]