// use case

Expose your Next.js dev server to Twilio for Twilio webhooks

Twilio posts to your URL every time an SMS arrives at your number. Without a tunnel, you can't test SMS-driven flows locally — every change means deploying. Next.js (React, Node.js) dev server.
  1. Reserve a stable subdomain

    On the lrok free plan you keep one reserved subdomain forever. Pick a name your Twilio dashboard can hold onto — webhook URLs that survive laptop restarts mean fewer dashboard re-pastes.

    $ lrok reserve nex-twilio
      Reserved https://nex-twilio.lrok.io
  2. Run your Next.js app

    Start the dev server on port 3000 (the Next.js default).

    $ npm run dev
  3. Tunnel localhost to the public URL

    lrok forwards https://nex-twilio.lrok.io/api/webhooks/handler → http://127.0.0.1:3000/api/webhooks/handler. The flag --hint binds your reserved subdomain to this tunnel.

    $ lrok http 3000 --hint nex-twilio
      Forwarding https://nex-twilio.lrok.io  ->  http://127.0.0.1:3000
  4. Paste the URL into Twilio

    Phone Numbers → Active Numbers → Messaging webhook. Paste https://nex-twilio.lrok.io/api/webhooks/handler as the destination.

  5. Watch deliveries land in the request inspector

    Every webhook Twilio sends shows up at lrok.io/dashboard with full body, headers, status, and latency. Re-deliver any request to your Next.js handler with one click. Twilio expects a TwiML response (XML). Return Content-Type: application/xml with <Response><Message>...</Message></Response>. The inspector shows what Twilio actually parsed.

// why lrok for this

lrok's reserved subdomain is free and lives forever, so your Twilio twilio webhooks 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