A powerful service management platform that provides a web-based interface for managing multiple services across different profiles. Vertex automatically handles Java environment detection, Maven/Gradle builds, service dependencies, and provides real-time monitoring.
- π Multi-Profile Management - Organize services into different profiles (dev, staging, production)
- β Automatic Java Detection - Works with ASDF, SDKMAN, Homebrew, and system Java installations
- π§ Build System Support - Automatic detection and support for Maven and Gradle projects
- π Real-time Monitoring - Live logs, health checks, and resource metrics
- π Web Interface - Modern React-based dashboard for service management
- π User Authentication - Secure JWT-based authentication system
- π± Responsive Design - Works on desktop and mobile devices
- π One-Command Installation -
./vertex --domain myapp.localinstalls everything automatically - π Nginx Integration - Optional nginx proxy for clean domain-based access
- π HTTPS Support - Automatic locally-trusted certificates with mkcert (.dev domains auto-enable HTTPS)
- π§ Build Wrapper Management - Generate and repair Maven/Gradle wrapper files
- Java 11+ (OpenJDK or Oracle)
- Go 1.19+ (for building from source)
- Node.js 16+ (for frontend development)
- nginx (optional - automatically installed when using
--nginxflag) - mkcert (optional - automatically installed when using
--httpsflag)
-
Download the binary for your platform:
- Download from GitHub Releases
- Choose the appropriate binary for your system:
vertex-linux-amd64(Linux 64-bit)vertex-darwin-amd64(macOS Intel)vertex-darwin-arm64(macOS Apple Silicon)vertex-windows-amd64.exe(Windows 64-bit)
-
Make it executable and bypass macOS security (macOS only):
chmod +x vertex-* # macOS: Remove quarantine to bypass "malware" warning xattr -d com.apple.quarantine vertex-darwin-*
-
Install as a user service:
# π ONE-COMMAND INSTALLATION (modern syntax - recommended) ./vertex-linux-amd64 domain vertex.local # Auto-installs with nginx! ./vertex-darwin-arm64 domain myapp.local # macOS example # vertex-windows-amd64.exe domain myapp.local (Windows example) # π ONE-COMMAND INSTALLATION (traditional syntax - alternative) ./vertex-linux-amd64 --domain vertex.local # Auto-installs with nginx! ./vertex-darwin-arm64 --domain myapp.local # macOS example # vertex-windows-amd64.exe --domain myapp.local (Windows example) # Basic installation options ./vertex-linux-amd64 install # Basic (modern) ./vertex-linux-amd64 --install # Basic (traditional) ./vertex-linux-amd64 install nginx domain vertex.local # Full (modern) ./vertex-linux-amd64 --install --nginx --domain vertex.local # Full (traditional)
Run Vertex in a Docker container with persistent data:
# Quick start - run with default settings
docker run -d \
--name vertex \
-p 54321:54321 \
-v vertex-data:/app/data \
zechtz/vertex:latest
# With custom configuration
docker run -d \
--name vertex \
-p 54321:54321 \
-v vertex-data:/app/data \
-v /path/to/your/projects:/projects \
-e JAVA_HOME=/usr/lib/jvm/default-jvm \
zechtz/vertex:latest
# Access the web interface
open http://localhost:54321Docker Compose (recommended for production):
Basic setup (localhost access only):
version: "3.8"
services:
vertex:
image: zechtz/vertex:latest
container_name: vertex
ports:
- "54321:54321"
volumes:
- vertex-data:/app/data
- ./projects:/projects
environment:
- JAVA_HOME=/usr/lib/jvm/default-jvm
- VERTEX_DATA_DIR=/app/data
restart: unless-stopped
healthcheck:
test:
[
"CMD",
"wget",
"--no-verbose",
"--tries=1",
"--spider",
"http://localhost:54321/",
]
interval: 30s
timeout: 10s
retries: 3
volumes:
vertex-data:Advanced setup with domain access (like native ./vertex domain vertex.dev):
Create a docker-compose.yml file:
version: "3.8"
services:
vertex:
image: zechtz/vertex:latest
container_name: vertex
expose:
- "54321"
volumes:
- vertex-data:/app/data
- ./projects:/projects
environment:
- JAVA_HOME=/usr/lib/jvm/default-jvm
- VERTEX_DATA_DIR=/app/data
restart: unless-stopped
healthcheck:
test:
[
"CMD",
"wget",
"--no-verbose",
"--tries=1",
"--spider",
"http://localhost:54321/",
]
interval: 30s
timeout: 10s
retries: 3
networks:
- vertex-network
nginx:
image: nginx:alpine
container_name: vertex-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/nginx/ssl
depends_on:
- vertex
restart: unless-stopped
networks:
- vertex-network
networks:
vertex-network:
driver: bridge
volumes:
vertex-data:Required nginx.conf:
events {
worker_connections 1024;
}
http {
upstream vertex {
server vertex:54321;
}
server {
listen 80;
server_name vertex.dev;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name vertex.dev;
ssl_certificate /etc/nginx/ssl/vertex.dev.pem;
ssl_certificate_key /etc/nginx/ssl/vertex.dev-key.pem;
# Modern SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;
location / {
proxy_pass http://vertex;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}Generate SSL certificates (requires mkcert):
# Install mkcert if not already installed
# macOS: brew install mkcert
# Ubuntu: apt install libnss3-tools && wget -O mkcert https://dl.filippo.io/mkcert/latest?for=linux/amd64 && chmod +x mkcert
# Setup local CA and generate certificates
mkcert -install
mkdir ssl
mkcert -cert-file ssl/vertex.dev.pem -key-file ssl/vertex.dev-key.pem vertex.dev
# Add to /etc/hosts
echo "127.0.0.1 vertex.dev" | sudo tee -a /etc/hosts
# Start services
docker-compose up -d
# Access at: https://vertex.devStart with: docker-compose up -d
-
Build the application:
go build -o vertex
-
Install as a user service:
# π ONE-COMMAND INSTALLATION (modern syntax - recommended) ./vertex domain myapp.local # Auto-installs with nginx! # π ONE-COMMAND INSTALLATION (traditional syntax - alternative) ./vertex --domain myapp.local # Auto-installs with nginx! # Basic installation options ./vertex install # Basic (modern) ./vertex --install # Basic (traditional) ./vertex install nginx domain myapp.local # Full (modern) ./vertex --install --nginx --domain myapp.local # Full (traditional)
-
Access the web interface:
- Docker: http://localhost:54321
- With HTTPS domain: https://vertex.dev (when using
--domain vertex.dev) - With HTTP domain: http://myapp.local (when using
--domain myapp.local) - Direct access: http://localhost:54321
π For detailed usage instructions and tutorials, see our Getting Started Guide on the wiki.
Vertex includes optional nginx integration for clean domain-based access without port numbers.
# π ONE-COMMAND INSTALLATION (modern syntax - recommended)
./vertex domain vertex.dev
# π ONE-COMMAND INSTALLATION (traditional syntax - alternative)
./vertex --domain vertex.dev
# Access via clean domain with HTTPS (auto-enabled for .dev domains)
open https://vertex.dev# One-command installation with custom domain (modern syntax - recommended)
./vertex domain myapp.local # HTTP
./vertex domain myapp.local https # With HTTPS
# One-command installation with custom domain (traditional syntax - alternative)
./vertex --domain myapp.local # HTTP
./vertex --domain myapp.local --https # With HTTPS
# Access your custom domain
open https://myapp.local # With HTTPS
open http://myapp.local # HTTP only# Modern subcommand syntax (recommended)
./vertex install nginx https domain myproject.local port 54321 # Full installation
./vertex domain myproject.local port 8080 # One-command with custom port
./vertex domain myproject.local https # Force HTTPS for any domain
# Traditional flag syntax (alternative)
./vertex --install \
--nginx \ # Enable nginx proxy
--https \ # Enable HTTPS with locally-trusted certificates
--domain myproject.local \ # Custom domain name
--port 54321 # Vertex service port (default: 54321)
./vertex --domain myproject.local --port 8080 # One-command with custom port
./vertex --domain myproject.local --https # Force HTTPS for any domain- β Automatically installs nginx on macOS (brew), Linux (apt/yum/etc), Windows (choco/winget)
- β Creates proxy configuration from port 80/443 to Vertex service
- β Manages /etc/hosts entries for local domain resolution
- β Handles permissions and log directory creation
- β Starts nginx service automatically
- π HTTPS Support - Automatically installs mkcert and generates locally-trusted certificates
- π Auto-HTTPS for .dev domains - Google-owned .dev domains automatically enable HTTPS (HSTS required)
- π HTTP to HTTPS redirect - Automatic redirects when HTTPS is enabled
- π‘οΈ Modern SSL configuration - TLS 1.2+, HTTP/2, secure ciphers, security headers
| Method | URL | Use Case |
|---|---|---|
| Nginx Proxy (HTTPS) | https://vertex.dev |
Secure domain access (.dev domains auto-enable HTTPS) |
| Nginx Proxy (HTTP) | http://myproject.local |
Clean domain access for non-.dev domains |
| Direct Access | http://localhost:54321 |
Development, bypassing nginx |
Vertex uses mkcert to generate locally-trusted SSL certificates. This provides real HTTPS with valid certificates that browsers trust.
# Check certificate status
ls -la ~/.vertex/ssl/
# Manually generate certificates
mkcert -install # Install local CA
mkcert -cert-file ~/.vertex/ssl/mydomain.local.pem \
-key-file ~/.vertex/ssl/mydomain.local-key.pem \
mydomain.local
# View certificate details
openssl x509 -in ~/.vertex/ssl/vertex.dev.pem -text -nooutSpecial .dev Domain Handling:
- Google owns the
.devTLD and requires HTTPS via HSTS preloading - Vertex automatically enables HTTPS for any
.devdomain - Certificates are generated and installed automatically
- No browser security warnings with locally-trusted certificates
Certificate Management:
- Certificates stored in
~/.vertex/ssl/ - Valid for the local CA installed by mkcert
- Automatically trusted by browsers and curl
- Use
mkcert -uninstallto remove the local CA if needed
# Check nginx status
brew services list | grep nginx # macOS
systemctl status nginx # Linux
# View nginx logs
tail -f /opt/homebrew/var/log/nginx/error.log # macOS
tail -f /var/log/nginx/error.log # Linux
# Test configuration
nginx -t
# Restart nginx
brew services restart nginx # macOS
sudo systemctl restart nginx # Linux
# Check HTTPS certificate
curl -v https://vertex.dev
openssl s_client -connect vertex.dev:443 -servername vertex.devThe service starts automatically after installation using:
- macOS: LaunchAgent (user-level service)
- Linux: systemd user service
- Windows: Scheduled Task
Vertex includes built-in commands that work across all platforms. You can use either the modern subcommand syntax or the traditional flag syntax:
# Start the service
./vertex start # (recommended)
./vertex --start # (alternative)
# Stop the service
./vertex stop # (recommended)
./vertex --stop # (alternative)
# Restart the service
./vertex restart # (recommended)
./vertex --restart # (alternative)
# Check service status and available URLs
./vertex status # (recommended)
./vertex --status # (alternative)
# Show recent logs
./vertex logs # (recommended)
./vertex --logs # (alternative)
# Follow logs in real-time (press Ctrl+C to exit)
./vertex logs -f # (recommended - like tail -f)
./vertex logs --follow # (explicit long form)
./vertex --logs --follow # (traditional syntax)macOS:
# Start
launchctl start com.vertex.manager
# Stop
launchctl stop com.vertex.manager
# Check status
launchctl list | grep vertexLinux:
# Start
systemctl --user start vertex
# Stop
systemctl --user stop vertex
# Restart
systemctl --user restart vertex
# Check status
systemctl --user status vertexWindows:
# Start
schtasks /run /tn "VertexServiceManager"
# Stop
schtasks /end /tn "VertexServiceManager"
# Check status
schtasks /query /tn "VertexServiceManager"You can run Vertex on a different port (default is 54321):
./vertex --port 9090macOS:
- Stop the service:
launchctl stop com.vertex.manager - Edit the plist file:
~/Library/LaunchAgents/com.vertex.manager.plist - Change the port argument from
54321to your desired port - Reload:
launchctl unload ~/Library/LaunchAgents/com.vertex.manager.plist && launchctl load ~/Library/LaunchAgents/com.vertex.manager.plist
Linux:
- Stop the service:
systemctl --user stop vertex - Edit the service file:
~/.config/systemd/user/vertex.service - Change the
--port 54321argument to your desired port - Reload:
systemctl --user daemon-reload && systemctl --user start vertex
# Show recent logs from all sources
./vertex logs # (recommended)
./vertex --logs # (alternative)
# Follow logs in real-time (press Ctrl+C to exit)
./vertex logs -f # (recommended - like tail -f)
./vertex logs --follow # (explicit long form)
./vertex --logs --follow # (traditional syntax)macOS:
# Main application logs
tail -f ~/.vertex/vertex.stderr.log
# Startup logs
tail -f ~/.vertex/vertex.stdout.logLinux:
# All logs
journalctl --user -u vertex -f
# Recent logs
journalctl --user -u vertex --since="1 hour ago"Windows:
# View log files directly
type %USERPROFILE%\.vertex\vertex.log| Platform | Location |
|---|---|
| macOS | ~/.vertex/vertex.stderr.log~/.vertex/vertex.stdout.log |
| Linux | journalctl --user -u vertex |
| Database | ~/.vertex/vertex.db |
| Config | ~/.vertex/ |
~/.vertex/ # User data directory
βββ vertex.db # SQLite database
βββ vertex.stderr.log # Application logs (macOS)
βββ vertex.stdout.log # Startup logs (macOS)
βββ env_vars.fish # Environment variables (optional)
~/.local/bin/vertex # Binary location (user installation)
Vertex supports both modern subcommand syntax and traditional flag syntax:
./vertex --helpService Management Commands:
| Subcommand | Flag | Description |
|---|---|---|
vertex start |
--start |
Start the Vertex service |
vertex stop |
--stop |
Stop the Vertex service |
vertex restart |
--restart |
Restart the Vertex service |
vertex status |
--status |
Show service status and availability |
vertex logs |
--logs |
Show service logs |
vertex logs -f |
--logs --follow |
Follow log output (like tail -f) |
vertex install |
--install |
Install Vertex as a user service |
vertex uninstall |
--uninstall |
Uninstall Vertex service and data |
vertex update |
--update |
Update the Vertex binary and restart the service |
vertex version |
--version |
Show version information |
Configuration Commands:
| Subcommand | Flag | Default | Description |
|---|---|---|---|
vertex domain <name> |
--domain <name> |
vertex.dev | π Smart install: Domain name for nginx proxy (auto-installs when specified) |
vertex port <number> |
--port <number> |
54321 | Port to run the server on |
vertex data-dir <path> |
--data-dir <path> |
~/.vertex | Directory to store application data |
vertex nginx |
--nginx |
- | Configure nginx proxy for domain access |
vertex https |
--https |
- | Enable HTTPS with locally-trusted certificates (auto-enabled for .dev domains) |
# π ONE-COMMAND INSTALLATION (modern subcommand syntax - recommended)
./vertex domain myapp.local # HTTP installation
./vertex domain vertex.dev # HTTPS auto-enabled for .dev domains
# π ONE-COMMAND INSTALLATION (traditional flag syntax - alternative)
./vertex --domain myapp.local # HTTP installation
./vertex --domain vertex.dev # HTTPS auto-enabled for .dev domains
# Installation Commands (modern subcommand syntax - recommended)
./vertex install # Basic installation
./vertex install nginx # With nginx proxy
./vertex install nginx https domain myapp.local # With HTTPS
./vertex domain myapp.local port 8080 # Custom domain and port
# Installation Commands (traditional flag syntax - alternative)
./vertex --install # Basic installation
./vertex --install --nginx # With nginx proxy
./vertex --install --nginx --https --domain myapp.local # With HTTPS
./vertex --install --nginx --domain myapp.local --port 8080 # Full explicit
# Service Management (modern subcommand syntax - recommended)
./vertex start # Start the service
./vertex stop # Stop the service
./vertex restart # Restart the service
./vertex status # Show service status and URLs
./vertex logs # Show recent logs
./vertex logs -f # Follow logs in real-time (like tail -f)
./vertex version # Show version
./vertex update # Update service
# Service Management (traditional flag syntax - alternative)
./vertex --start # Start the service
./vertex --stop # Stop the service
./vertex --restart # Restart the service
./vertex --status # Show service status and URLs
./vertex --logs # Show recent logs
./vertex --logs --follow # Follow logs in real-time
./vertex --version # Show version
./vertex --update # Update service
# Configuration Commands (modern subcommand syntax - recommended)
./vertex port 9090 # Run on custom port
./vertex data-dir /tmp/vertex-test # Custom data directory
./vertex domain myproject.local https # Force HTTPS for any domain
./vertex nginx # Enable nginx proxy
./vertex https # Enable HTTPS
# Configuration Commands (traditional flag syntax - alternative)
./vertex --port 9090 # Run on custom port
./vertex --data-dir /tmp/vertex-test # Custom data directory
./vertex --domain myproject.local --https # Force HTTPS for any domain
./vertex --nginx # Enable nginx proxy
./vertex --https # Enable HTTPS
# Combined Examples (modern syntax)
./vertex domain vertex.dev https port 8080 # Full configuration
./vertex install nginx domain myapp.local data-dir /custom/path # Advanced installVertex supports these environment variables:
VERTEX_DATA_DIR- Override data directory (default:~/.vertex)JWT_SECRET- Custom JWT secret for authenticationJAVA_HOME- Override Java installation path
- Create a Profile - Navigate to the Profiles section in the web interface
- Add Services - Define your services with their directories and configurations
- Set Projects Directory - Each profile can have its own root directory for services
- Start Profile - Use the profile management interface to start all services in a profile
Vertex automatically detects Java installations in this order:
- JAVA_HOME environment variable
- Java in PATH (with validation)
- User-specific installations:
- ASDF:
~/.asdf/installs/java/ - SDKMAN:
~/.sdkman/candidates/java/
- ASDF:
- System installations:
- macOS: Homebrew, system locations
- Linux: OpenJDK packages
- Windows: Program Files
- β
ASDF -
asdf install java openjdk-17 - β
SDKMAN -
sdk install java 17.0.1-open - β
Homebrew -
brew install openjdk - β
System packages -
apt install openjdk-17-jdk
This is a common macOS Gatekeeper security warning for unsigned binaries.
Quick Fix:
# Remove quarantine attribute
xattr -d com.apple.quarantine ./vertex-darwin-arm64
# Then run your command
./vertex domain vertex.devAlternative Fix:
- Try running the command and get the security warning
- Go to System Preferences β Security & Privacy β General
- Click "Allow Anyway" next to the vertex warning
- Run the command again
For Developers: Consider code signing your releases with an Apple Developer Certificate to eliminate this warning for users.
-
Check logs:
# macOS tail -n 100 ~/.vertex/vertex.stderr.log # Linux journalctl --user -u vertex --lines=100
-
Verify Java installation:
java -version echo $JAVA_HOME
-
Check port availability:
lsof -i :54321
Since Vertex runs as your user account, it should have access to all your project files. If you encounter permission issues:
-
Verify directory ownership:
ls -la /path/to/your/projects
-
Check build directory permissions:
ls -la /path/to/project/target # Maven ls -la /path/to/project/build # Gradle
Run the built-in diagnostics:
curl http://localhost:54321/api/system/java-diagnosticsThis will show:
- Detected Java installations
- PATH configuration
- Available vs working Java versions
Vertex includes a built-in updater to simplify the process of updating the binary and restarting the service. This is especially useful during development.
-
Build the new binary:
go build -o vertex
-
Run the updater:
./vertex update # (recommended) ./vertex --update # (alternative)
This command will:
- Stop the running Vertex service.
- Replace the existing binary with the new one.
- Restart the service.
For Native Installation:
-
Stop the service:
# macOS launchctl stop com.vertex.manager # Linux systemctl --user stop vertex
-
Build new version:
git pull go build -o vertex
-
Reinstall:
./install.sh
For Docker Installation:
# Pull latest image and restart
docker-compose pull
docker-compose up -d
# Or with docker run
docker pull zechtz/vertex:latest
docker stop vertex
docker rm vertex
docker run -d --name vertex -p 54321:54321 -v vertex-data:/app/data zechtz/vertex:latestFor Docker Installation:
# Using docker-compose
docker-compose down -v
# Or manually
docker stop vertex
docker rm vertex
docker volume rm vertex-data # This removes all data!
docker rmi zechtz/vertex:latestFor Native Installation:
# Self-uninstalling - works on all platforms!
./vertex uninstall # (recommended)
./vertex --uninstall # (alternative)Or manually:
macOS:
launchctl stop com.vertex.manager
launchctl unload ~/Library/LaunchAgents/com.vertex.manager.plist
rm ~/Library/LaunchAgents/com.vertex.manager.plist
rm ~/.local/bin/vertex
rm -rf ~/.vertexLinux:
systemctl --user stop vertex
systemctl --user disable vertex
rm ~/.config/systemd/user/vertex.service
systemctl --user daemon-reload
rm ~/.local/bin/vertex
rm -rf ~/.vertexWindows:
schtasks /delete /tn "VertexServiceManager" /f
rm ~/.local/bin/vertex.exe
rm ~/.local/bin/vertex-service.bat
rm -rf ~/.vertex# Backend
go build -o vertex
# Frontend (if modified)
cd web
npm install
npm run build# Run without installing
./vertex --port 54321
# With custom data directory
VERTEX_DATA_DIR=/tmp/vertex-dev ./vertex --port 9090
# Run with nginx proxy in development
./vertex --install --nginx --domain dev.local- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.
For issues and questions:
- Create an issue on GitHub
- Check the troubleshooting section above
- Review the logs for error messages
Happy service managing! π