Changelog
Dated revisions of the Platform API, the theme contract, the SDK packages and the CLI.
On this page
Every additive change to the Platform API appears here under the dated revision the X-Dukkan-Api-Version header carries, and every theme-contract change under its date. Newest first. The versioning policy is in the API reference.
2026-09-10: Orders created by apps#
The third dated revision of v1 (X-Dukkan-Api-Version: 2026-09-10). All additive:
- Two new scopes.
orders:createcreates orders with prices the app sets; it is separate fromorders:writeand does not include reading orders.clients:writecreates and updates customer records and is gated on the data processing agreement exactly likeclients:read; its customer endpoints arrive in a later revision.orders:writenow reads "Update order status, note and tags" on the consent screen. Scope reference. POST /orderscreates an order with the agreed unit prices, for catalog variants and custom lines (OrderItem.kindisvariantorcustom), recomputes the totals, reduces stock under the stock policy or skips inventory, links the customer, notifies the merchant and emitsorder.createdwithsource: "app". Specific codes:422currency_not_allowedandinvalid_requestwithdetails.fields,404variant_not_found,409variant_unavailable,payment_method_disabledandinsufficient_stockwithdetails.lines. Orders created by apps.PATCH /orders/{id}updates the note, adds or removes tags as set operations, and merges the calling app's own attributes; thereferenceattribute renders as a chip on the merchant's order page.Order.tags,OrderDetail.noteandOrderDetail.attributesare new fields, andGET /orders?tag=filters by tag.GET /storereturns the store's public identity and checkout facts with no scope: pricing and storefront currencies, the FX table checkout applies asscaled / 10^scale, the enabled payment methods and the province vocabulary.GET /productsgainsq(ranked substring search over name, variant name, SKU, DSIN and barcode),statusandids;GET /products/variants?ids=re-validates up to 100 variants at once with their product name and status.- The
order.createdpayload carriessource. @dukkan.one/app-sdk0.3.0 addsorders.create,orders.update,products.search,products.variantsandstore.get, typedDukkanValidationErrorandDukkanConflictErrorwithinsufficientLines, and the FX helpersexchangeRateForandbuildCreateOrderLines.@dukkan.one/nuxt0.3.0 exportsenforceLimitandclientIpfrom@dukkan.one/nuxt/runtime. The SDK in any Node app, The Nuxt module.
2026-09-09 — App SDK, Nuxt module and CLI#
The official developer kit, published under the next dist-tag until 1.0.0:
@dukkan.one/app-sdk: a typed Platform API client generated from the OpenAPI document, OAuth with PKCE and rotating tokens behind aTokenStorethat serialises refreshes, a webhook receiver that verifies on raw bytes and deduplicates on the signed event id, commerce helpers for money in minor units and order transitions, and thedukkan.app.tomlschema. Runs on Node, Workers, Bun and Deno. Quickstart, reference.@dukkan.one/nuxt: mounts the install, callback and webhook routes fromdukkan.app.tomland asks for one contract,defineDukkanApp. The Nuxt module.@dukkan.one/cli: thedukkanbinary now carriesapp init,app config pushandpull,app devwith a public tunnel and a development session,app webhook triggerandapp logs, next to the unchanged theme commands.@dukkan.one/theme-cliforwards to it with a deprecation notice. CLI reference.- The contract for other languages, with the test vectors and the config schema, is published at
/contracts/v1/. The contract for other languages.
2026-09-09 — App SDK contract#
The second dated revision of v1 (X-Dukkan-Api-Version: 2026-09-09). All additive:
- Token responses (both grants) carry
install_id,store_id,store_slugand, on refresh,scope. Key your storage on the ids; see Authorization. GET /installationdescribes the token's install and store: effective scopes, distribution channel, the store's currency exponent, locale and timezone, and the current webhook subscription.- Webhook envelopes carry a signed
install_id; deliveries add the unsignedX-Dukkan-Install-Idheader for secret lookup. Sandbox rehearsals carrytest: true. POST /webhooks/testfires one signed delivery of any subscribed topic on a sandbox store, through the real outbox and delivery worker.- A refresh token presented again within 30 seconds of its rotation, while the successor is valid, is a race:
invalid_grantwithout revocation. See The refresh grant. 429responses carryRetry-After;payment_statusis a published enum; the OpenAPI document publishes every topic's payload schema underx-dukkan-topic-payloads.- The dashboard shows drafts managed by
dukkan.app.tomland warns when the portal and the file disagree. Webhook signing secrets minted from the dashboard now use thedk_whsec_prefix like the API.
2026-09-02 — Documentation#
- The docs were rebuilt on the current tree, the layout contract in the theme guide was corrected (
{% layout %}+{% block %}),fulfillment.requestedwas added to the topic table, and complete references for scopes, Liquid and the CLI were added.
2026-08 — Theme contract#
All additive unless noted:
- Sections on four pages:
enabled_onon a section definition opens it toproduct,categoryandcart; absent keeps home only.page_sectionsreaches all four templates. - Platform-owned section wrapper (a change for theme authoring, not for documents):
snippets/sections.liquidis reserved and injected at push; the theme writessnippets/section-body.liquid; a theme emittingdata-dukkan-sectionis rejected. Bodies render twice, a blank body emits no wrapper, andband: trueis excluded from thesec--altalternation. - New schema keys:
info,category,bandandenabled_onon sections;localizedon text settings;fonton aselectoption. - Two new types:
datetimeandrichtext(output through therichtextfilter). - Settings document: the
translationskey is reserved forlocalizedoverrides (an accepted narrowing while external themes are sandbox-gated);urlsettings accept same-host absolute paths. - New filters:
file_alt,file_focal_style,tel_href,wa_href,money_majoranddate_localized.img_urlbecame the image-CDN contract with a fixed width ladder. - Context v1:
product.savingsandvariant.savings,product.sold_count,product.image_color, and the four category image fieldsimage_url,image_color,image_alt,image_focal_style(the first-letter fallback stays mandatory). - Eastern Arabic numerals: the
arabic_numeralssetting switches the money filters to Arabic digits and the root is stampeddata-dukkan-numerals="arabic". - Runtime modules: scroll reveal, sticky buy button, back to top, dark mode
[data-scheme="dark"], the "notify me" form, quick view, and the fly-to-cart effect for bundles. - Performance: published themed pages are shared-cacheable; previews, sandboxes, the cart and search are excluded.
- Theme updates: first-party theme updates apply to their installs automatically; external themes update only through review and a merchant draft.
2026-08-29 — Theme marketplace#
- The publishing lifecycle is complete: media (cover + 3–8 screenshots with Arabic alt text), bilingual release notes, withdraw, retire and restore, the platform-owned demo store, draft-first updates for merchants, and insights. See Publish a theme.
- Product decisions: preview before buy, refunds handled by Dukkan finance under the Developer Terms, and a first response within 5 business days.
2026-08-19 — Sandbox stores and the DPA#
- Sandboxes are born seeded: 3 per organization, 90 days renewable, with reset, renew and purge commands. See Sandbox stores.
- The
@dukkan.one/theme-cli@0.1.0CLI and theDKN-XXXXXXdevice flow. - Data processing agreement version
2026-08-19.
2026-08-10 — Developer terms#
- First version of the developer terms.
2026-08-09 — Platform API v1#
The first dated revision of v1 (X-Dukkan-Api-Version: 2026-08-09):
- Resources: orders, fulfillments, refunds, products, discounts, inventory movements and the webhook subscription.
- Conventions:
Idempotency-Keyon every write, opaque cursor pagination, 180 requests per minute per install, and a uniform error envelope. - The 12 events including
fulfillment.requested, signed with HMAC-SHA256 and retried up to 8 times.