.dev

Changelog

What changed on the Feeef developer platform — storefront runtimes, CLI, API and shipping.

Product changes that affect an integration. Template publish notes (feeef publish --changelog) are a different log: those belong to a theme release, not to this page.

2026-10-16 — Helium runtime and authoring guides

The Helium source now isolates executed merchant SSR jobs in fresh QuickJS runtimes, keeps custom components interactive by default, and resolves custom hosts through explicit store domain mappings. Renderer tests include nested test directories and cover isolation, hydration, domains and render-result caching.

Origin performance work adds page-specific worker inputs, bounded public result caching with request coalescing, stricter cache bounds and a smaller V8 heap profile. The local 8,000-store sweep returned zero render/HTTP errors with a 137.3 MiB late RSS median; sampled follow-up load peaked at 160.9 MiB. These are local origin results, with methodology and limits in the performance report.

CLI changes prepared for the next npm release: Helium runtime/schema validation, hydration strategy validation and advisory warnings for known interactive controls marked never. The starter and Nour/Souk/Rimal source packs add the runtime guide and explicitly keep static CSS/footer blocks as server HTML. No new CLI version is announced by this note.

Start with Helium, hydration, migration and the updated CLI workflow. Runtime rollout and domain hosting depend on the store's deployment configuration.

2026-10-09 — feeef.js 0.13, checkout keys, fee quotes, parcel events

feeef.js 0.13.0 (not on npm yet; the notes below apply once it is published):

  • Breaking: the public store security config is numbers only: { minTimeMs, duplicateWindowMs, submitCooldownMs } | null (milliseconds, 0 = off, null = security off). Rule names and outcomes are no longer published.
  • Breaking: the order helpers isFakeOrderId, isFakeOrder, isWarningOrder and shouldSuppressPixelEvents are removed, with the old PublicSecurityOption* types. Nothing in an order's id or body classifies it; handle every success response the same way (order form).
  • Public Meta, TikTok and Snap pixel entries carry capi: boolean (the store has a server key for that pixel; the key itself is never exposed). See pixels.
  • ff.orders.quoteShipping({ storeId, items, shippingState, shippingCity?, shippingType? }) returns { shippingPrice: number | null }, the fee POST /orders/calculate will charge. ff.orders.calculate now forwards shippingCity (the commune) too.

Storefront checkout: order submits carry one x-feeef-idempotency-key per checkout submission, and a failed call answers 503 ORDER_RETRY or 502 ORDER_STATUS_UNKNOWN (order form). The storefront now shows the shipping fee before the order is placed. The thank-you URL is /thanks?order=<id>; older links that carried a name, phone or total are redirected on the server to that form before the page renders (standard pages).

Parcel events: Cloud parcel webhooks now carry an event id, a per-parcel seq and occurredAt, and are delivered at least once from a persisted queue. Dedupe on the event id and drop stale seq (shipping).

In-app purchase: buyMonthWithIap accepts only the credit_feeef product, verifies the purchase with the store, and uses each store transaction once (payments).

2026-10-04 — Large sends are chunked

POST /v1/stores/{storeId}/orders/cloud-parcels/sendMany still accepts the whole selection in one request. The merchant app can select up to 500 orders. Courier create APIs accept about 50 or 100 parcels per call, so Cloud splits the selection into those chunks and waits 1–5 seconds between chunks.

Companies that only create one parcel per request (Maystro, ZR Express, DeliveryOS) keep that pace inside a group of 50, then take the same rest before the next group.

Feeef waits for the Cloud batch long enough for that selection to finish, up to 15 minutes. The Dart shipOrders call uses the same receive timeout. A timed-out response means the batch is still processing — do not send the same orders again.

Details and the per-company sizes are in Shipping. The desk-side story is Sending 500 orders.

On this page