Print every service URL for your nSelf stack — API endpoints, console UIs, storage, email preview, and more — with automatic route conflict detection.
# Print all URLs for the current environment
nself urls
# Filter to a specific category
nself urls --category api
# Open the Hasura console in your browser
nself urls --category hasura --open
# Copy the GraphQL endpoint to your clipboard
nself urls --category api --copy
# Output as JSON (for scripts)
nself urls --jsonnself urls [FLAGS]nself urls reads your current environment configuration and prints every publicly reachable URL that nSelf exposes — internal service consoles, GraphQL endpoints, auth callbacks, storage browser, email preview, and any custom service endpoints you have configured.
The command also runs a lightweight route conflict check: if two services claim the same subdomain or nginx location block, it highlights the conflict so you can resolve it before traffic lands on the wrong backend. This check is especially useful after adding a new plugin or custom service.
By default it targets the current environment (local, staging, or prod — whichever is active in your.env cascade). Pass --env to query a different environment without switching.
Each row shows the category, label, and full URL:
# nself urls
#
# CATEGORY LABEL URL
# api GraphQL https://api.local.nself.org/v1/graphql
# api GraphQL (WS) wss://api.local.nself.org/v1/graphql
# api REST https://api.local.nself.org/api/rest
# console Hasura https://api.local.nself.org/console
# auth Auth https://auth.local.nself.org
# auth Auth (admin) https://auth.local.nself.org/healthz
# storage MinIO API https://storage.local.nself.org
# storage MinIO Console https://storage.local.nself.org/minio/
# mail Mailpit https://mail.local.nself.org
# search MeiliSearch https://search.local.nself.org
# admin Admin UI http://localhost:3021
# custom ping_api https://ping.local.nself.org| Flag | Type | Default | Description |
|---|---|---|---|
--category | string | — | Filter to a URL category: api, console, auth, storage, mail, search, admin, custom |
--open | bool | false | Open the first matching URL in the default browser |
--copy | bool | false | Copy the first matching URL to the clipboard |
--json | bool | false | Emit structured JSON array |
--env | string | current | Target environment: local, staging, prod |
--internal | bool | false | Include internal-only URLs (bound to 127.0.0.1) |
--quiet | bool | false | Suppress header row and decoration |
| Category | What is included |
|---|---|
api | GraphQL endpoint (HTTP + WebSocket), REST endpoint |
console | Hasura console, pgAdmin (if enabled) |
auth | Auth service public endpoint, admin endpoint |
storage | MinIO S3 API and browser console |
mail | Mailpit preview UI (local only) |
search | MeiliSearch API and dashboard |
admin | nself-admin UI (localhost:3021) |
custom | CS_1..CS_N custom service endpoints |
GRAPHQL=$(nself urls --category api --json --quiet | jq -r '.[0].url')
echo "Using $GRAPHQL"nself urls --category console --opennself urls --env stagingnself urls --category auth --copynself urls --json | jq '[.[] | select(.conflict == true)]'When two services expose the same nginx location or subdomain, nself urls marks the affected rows with a conflict: true flag in JSON output and prints a warning in text mode. Common causes include:
Resolve conflicts by editing .env and running nself build to regenerate the nginx config.