Overview
The port exposure capability allows your Utari workers to make custom development servers and applications accessible by exposing specific ports. While port 8080 is automatically exposed, you can expose additional ports for applications running on different ports, enabling you to test multiple services simultaneously or work with applications that require specific port configurations.Port 8080 Note: Port 8080 is automatically exposed and does NOT require manual exposure. Use this tool for all other ports.
Understanding Port Exposure
What is Port Exposure?
Port exposure creates a tunnel that makes locally running applications accessible:Local Development
Applications running in your Utari workspace on specific ports
External Access
Makes these applications accessible via public URLs
Multiple Services
Run and access multiple servers simultaneously on different ports
Testing & Debugging
Test applications in development before deployment
Default vs. Custom Ports
- Port 8080 (Auto-Exposed)
- Custom Ports (Require Exposure)
Automatically Available
- No configuration needed
- Immediately accessible
- Default for most development servers
- Python HTTP server:
python -m http.server 8080 - Node.js apps configured for 8080
- Default development server port
When to Expose Ports
Use Cases for Port Exposure
Framework-Specific Development Servers
Framework-Specific Development Servers
Many frameworks use specific default ports:
- React/Create React App: Port 3000
- Next.js: Port 3000
- Angular: Port 4200
- Vue.js: Port 8080 (auto-exposed) or 5173 (Vite)
- Flask: Port 5000
- Django: Port 8000
- Express.js: Configurable, often 3000
- Svelte: Port 5000 or 8080
Multiple Services Running Simultaneously
Multiple Services Running Simultaneously
When you need multiple servers running at once:
Specific Application Requirements
Specific Application Requirements
Some applications require specific ports:
- Database interfaces and admin tools
- Monitoring dashboards
- Development tools (Webpack dev server, etc.)
- API documentation servers
- Testing frameworks
Custom Configuration
Custom Configuration
When you’ve configured your application for a specific port:
Exposing Ports
Basic Port Exposure
Multiple Port Exposure
You can expose multiple ports simultaneously:Common Development Server Configurations
React Applications
Node.js/Express Applications
Python Applications
Angular Applications
Vue.js Applications
Complete Development Workflow
Full-Stack Application Setup
Microservices Architecture
Port Exposure Best Practices
Use Standard Ports
Stick with framework defaults when possible for easier collaboration and documentation
Document Port Usage
Keep a list of which services run on which ports for easy reference
Avoid Conflicts
Ensure no two services try to use the same port simultaneously
Remember 8080
Use port 8080 when possible since it’s auto-exposed (one less step)
Non-Blocking Execution
Always run servers in non-blocking mode so they continue running in the background
Test After Exposure
Always verify the exposed URL works after requesting port exposure
Clean Up
Stop unused servers and unexpose ports when done to free resources
Use Environment Variables
Configure ports via environment variables for flexibility
Common Port Reference
- Web Frameworks
- Backend Frameworks
- Development Tools
- Databases & Services
| Framework | Default Port | Exposure Needed |
|---|---|---|
| React (CRA) | 3000 | ✅ Yes |
| Next.js | 3000 | ✅ Yes |
| Angular | 4200 | ✅ Yes |
| Vue (CLI) | 8080 | ❌ No (auto) |
| Vite | 5173 | ✅ Yes |
| Svelte | 5000/8080 | 5000: ✅ Yes |
| Nuxt.js | 3000 | ✅ Yes |
Troubleshooting
Port exposure requested but URL not working
Port exposure requested but URL not working
Verify:
- Server is actually running on that port
- Check server logs for startup errors
- Use
netstat -tuln | grep [PORT]to confirm port is listening - Ensure no firewall blocking
- Try restarting the server
- Re-request port exposure
Port already in use error
Port already in use error
Solutions:
- Check what’s using the port:
lsof -i :[PORT] - Stop the existing process
- Or use a different port
- Kill stuck processes:
kill -9 [PID] - Restart with new port number
Can't access exposed port from browser
Can't access exposed port from browser
Check:
- URL copied correctly (no typos)
- Server started successfully
- No CORS issues (check browser console)
- Server bound to 0.0.0.0 not localhost
- Try accessing from incognito/private window
Multiple ports needed but only one working
Multiple ports needed but only one working
Ensure:
- All servers started successfully
- All ports explicitly exposed
- No port conflicts
- Check each service individually
- Verify each exposed URL
Server running but shows connection refused
Server running but shows connection refused
Check that server is bound to all interfaces:❌ Wrong (localhost only):✅ Correct (all interfaces):
Exposed URL returns 404
Exposed URL returns 404
Verify:
- Server is running (check with list_commands)
- Correct route/path being accessed
- Server has proper route handlers
- No typos in URL path
- Check server logs for requests
Environment-Specific Configuration
Using Environment Variables
Package.json Scripts
Advanced Usage
Proxy Configuration
When frontend needs to communicate with backend on different port:Docker Compose with Port Mapping
Summary
You’ve successfully learned:How port exposure works in Utari
When to use port exposure (all ports except 8080)
How to expose single and multiple ports
Common framework default ports and configurations
Best practices for development server management
Troubleshooting port exposure issues
Advanced configurations for multi-service applications
Next Steps
Terminal Commands
Learn to start and manage development servers
Files and Folder
Organize your application code and assets
Web Browser
Test your exposed applications visually
Triggers
Automate server startup and port exposure