// use case
Expose your Express dev server to Discord for Discord interactions
Reserve a stable subdomain
On the lrok free plan you keep one reserved subdomain forever. Pick a name your Discord dashboard can hold onto — webhook URLs that survive laptop restarts mean fewer dashboard re-pastes.
$ lrok reserve exp-discord Reserved https://exp-discord.lrok.ioRun your Express app
Start the dev server on port 3000 (the Express default).
$ node server.jsTunnel localhost to the public URL
lrok forwards https://exp-discord.lrok.io/webhook → http://127.0.0.1:3000/webhook. The flag --hint binds your reserved subdomain to this tunnel.
$ lrok http 3000 --hint exp-discord Forwarding https://exp-discord.lrok.io -> http://127.0.0.1:3000Paste the URL into Discord
Discord application → General Information → Interactions Endpoint URL. Paste https://exp-discord.lrok.io/webhook as the destination.
Watch deliveries land in the request inspector
Every webhook Discord sends shows up at lrok.io/dashboard with full body, headers, status, and latency. Re-deliver any request to your Express handler with one click. Verify the X-Signature-Ed25519 + X-Signature-Timestamp headers using your application's public key. Reject any mismatch with 401, otherwise Discord disables your bot.
// why lrok for this
lrok's reserved subdomain is free and lives forever, so your Discord discord interactions URL never rotates. $9/mo flat for unlimited tunnels — no SSO tax, no enterprise-only signature verification, no bandwidth metering. The request inspector is built in.
Related workflows
- Expose your Next.js dev server to Discord for Discord interactions
- Expose your Django dev server to Discord for Discord interactions
- Expose your Rails dev server to Discord for Discord interactions
- Expose your Express dev server to Stripe for Stripe webhooks
- Expose your Express dev server to GitHub for GitHub webhooks