Going Further
Local Development
Two things differ on a laptop, and the SDK handles both so your code stays identical to production: where results are stored, and how they're delivered back to your app.
How results are delivered
"Delivery" is how a finished result travels from us back into your app as a ParseCompleted
event. There are two modes, and the default auto chooses between them per environment:
| Mode | What happens |
|---|---|
auto (default) |
poll when APP_ENV=local; webhook everywhere else (staging, production, …), keyed off APP_ENV. |
webhook |
We POST a signed callback to the SDK's route; it verifies the signature and fires the event. Reactive, no polling. |
poll |
The SDK checks our API from a queued job and fires the same event when the result lands. For local dev, where we can't reach an inbound webhook. |
Both modes fire the same ParseCompleted event, so your listener code is identical either
way; delivery only changes how the result gets to that listener. With auto, production uses
webhooks and your laptop polls, with nothing to set by hand.
No bucket? Use ours.
Leave parse.disk unset and we write results to a managed dev bucket: zero setup, nothing
to configure. It's quota-limited (sized for development, not production) and results are kept
for ~1 day, so fetch what you need promptly. For production, set PARSE_DISK to your own
bucket; your bytes then never transit us.
No inbound webhook? We poll instead.
We can't reach a webhook on localhost, so with delivery=auto your local environment uses
poll: ->parse() quietly dispatches a small background job that checks our API, then
updates the parse_requests row and fires the same ParseCompleted event when the result
lands. It rides the queue worker you're already running; if you use Laravel's composer run dev, that includes queue:listen, so events just work locally with nothing extra.
composer run dev # serve + queue:listen + vite, events fire locally
That background poll is also what advances
->status()locally (in production the webhook keeps the row current). So run a worker locally to see status move or events fire, and it needs a real queue driver (databaseorredis, the Laravel default), notsync.
Prefer real webhooks locally for true production parity? Run a tunnel (ngrok, Expose, Herd
Share), point APP_URL at it, and set PARSE_DELIVERY=webhook.