Skip to main content

Developer Changelog

What changed for app, theme and SDK developers, newest first. Changes are backwards compatible unless an entry says otherwise.

October 2026​

Themes and MCP​

  • /llms.txt for every site. Each storefront now serves /llms.txt, a Markdown index of the site for language models (site name, description, and the pages with their titles). A theme can write its own as templates/llms.twig, and add templates/llms-full.twig for /llms-full.txt. See Directory structure.
  • og:locale per language. sitepack_head() now prints og:locale in Open Graph's language_TERRITORY form for the language being read (nl_NL on /nl/, en_GB for a bare en store), plus an og:locale:alternate for every other language of the page. It used to print the store's main locale on every page, often as just en.
  • Cookie banner after first paint, in the page's language. sitepack_cookies() now shows the banner right after the first paint, so it is never the Largest Contentful Paint at load. On a custom theme its texts were rendered in the store's main language on translated pages; they now follow the page. See sitepack_cookies().
  • sitepack_slug() and deeper paths. A link written as the whole admin trail to a sub page ('website-builder/business-email/alternative') now resolves to the address that is served (/business-email/alternative) in every language, instead of a 404. See sitepack_slug().
  • One address per page. /nl/ and other paths with a trailing slash redirect to /nl with a relative Location, so the redirect keeps https. /index.php redirects to /.
  • Structured data. The SoftwareApplication offer from the company profile now links to the pricing page in the language being read, and a post type overview page (such as /themes) without entries gets a lastmod in sitemap.xml from its own last change.
  • Custom head and body code on custom themes. The head and body code a merchant sets under Settings → Custom HTML (a verification meta tag, a tracking snippet) was only printed by the built-in layout. sitepack_head() now prints the head code and the body_start hook the body code. Nothing changes in your templates, as long as your layout has {% app_block 'body_start' %} right after <body>. See sitepack_head().
  • Social media profiles over MCP and the API. get_social_media / update_social_media read and change the site's social media profiles, LinkedIn included, and so do GET / PATCH /api/public/v1/site/social-media (sites:read / sites:write). Only the networks sent change; a URL that is not on the network's own domain is refused with a 422. See AI and MCP.
  • LinkedIn. Merchants can link a LinkedIn page under Settings → Social media. It shows in the social media element and in site.socialMedia with name LinkedIn, and becomes part of the Organization sameAs. See Twig objects.
  • file field type. A theme setting or template field with "type": "file" is a download, such as a PDF. The merchant sees the current file with buttons to upload, replace or remove it; the file is virus-scanned and hosted by SitePack. The media type is now documented too, and its upload accepts documents. See File fields.
  • boolean toggles work. A boolean template field or setting is now an on/off toggle in the Admin, stored as "1"/"0". A template field's default from theme.json now really applies to every field the merchant never filled in (it was documented, but page did not carry it). See Toggling sections on and off.
  • PDFs through MCP. upload_media also takes a PDF (data:application/pdf;base64,... or a public url ending in .pdf). A file template field written with create_page/update_page must hold the url it returns; links to other websites are refused.
  • Structured data on app post type pages. The overview and entry pages of an app's post type (e.g. /cinemas and /cinemas/<slug>) now get the same schema.org JSON-LD from sitepack_head() as every other page: the organisation from the company profile, the website, the page itself and a breadcrumb. They used to print a bare Organization with a broken https://https:// address. Nothing changes in your templates.
  • Policy page titles name the site. On a custom theme, sitepack_title() on a legal page (terms, privacy, cookie policy…) now returns Privacy policy | <site name> instead of the bare policy name, as the built-in layout already did. content.name is unchanged, so headings stay the same.
  • Company profile. Merchants describe their business under Settings → My company (organisation type, founders, founding date, registration numbers and type-specific details). It now drives the site's Organization JSON-LD, whose @type follows the chosen schema.org type. See Twig objects. The JSON-LD no longer claims the site's creation year as foundingDate, and founders became the schema.org founder with @type: Person.
  • Variant image follows the picker. On a product page, sitepack_product_options() now switches the main product photo to the image of the picked variant, in every theme and without theme code. Variant images are added to product.images, so they show up as gallery thumbnails, and clicking one picks its variant. Themes can point at their main photo with data-product-main-image or handle the cancelable sitepack:variant:change event themselves. See sitepack_product_options().
  • get_company_profile / update_company_profile. The MCP connector can read and fill in the company profile. The connector now also asks for sites:write; existing connections pick it up when they reconnect. See AI and MCP.

Apps​

  • API Endpoints page. Every endpoint on https://api.sitepack.eu on one page, grouped like the API Reference, with the scope each one needs, the response format, errors and rate limits. See API Endpoints.
  • API Reference for tools and AI assistants. The full OpenAPI document is at /openapi.json (also behind the reference's Download button), every section is a small Markdown file such as /api-reference/leads.md, and /llms.txt lists them all. Point code generators and AI assistants there instead of at the API Reference page, which is too large for them to read whole.
  • Leads in the API Reference. The lead endpoints (/api/public/v1/leads) have their own section instead of sitting under Site, and so do Comments and Billing.
  • Webhook topics, complete. Webhooks now lists every topic SitePack sends, with the endpoint to read the record back, and the topics you can subscribe to that do not fire yet.
  • Correction: webhook retries. A failed delivery is retried once, about 5 seconds later, not for 24 hours. A retry has a new event uuid. See Delivery and retries.

CLI​

  • Two-factor sign-in and trusted browsers. sitepack login signs in through the browser, so it now goes through the account's two-factor gate. The default second step is a 6-digit email code; an account with an authenticator app (TOTP) enabled confirms with an app or backup code instead, and staff accounts are required to use an authenticator app. After verifying, the browser stays trusted for a while (up to about a week) based on a device cookie rather than the client IP, so a changing network no longer forces a new challenge. Nothing changes in how the CLI stores its own token. See Authentication.

September 2026​

Apps​

  • Install link for every app. Your app page in the Partner Portal shows an Install link that works for public and private apps. Whoever opens it gets a consent screen showing the app, the site and the price. Private apps can be tested and shared before review. The Marketplace one-click install is unchanged. See The Partner Portal.
  • Scopes come from app.json. The consent screen reads auth.scopes from your latest published version.
  • Faster releases. A publish now reaches the storefronts of every site with your app installed right away.
  • API Reference. Every endpoint of the app API, with its parameters, required scope and example responses, is now published at API Reference.
  • sitepack app:link. Register an existing app folder as a new app in your organisation. See CLI commands.
  • Review emails. Owners and App developers get an email when an app is submitted and when the review is done, in their own language. See Marketplace Policy.
  • Translatable settings. Mark a free-text setting "translatable": true and the merchant translates it with the rest of the site. See Translations.
  • Image settings. A string setting with "format": "image" becomes a media picker, with an optional default image shipped in your app. See App Settings.
  • App translations. One JSON file per language in translations/ translates your settings form and your storefront blocks. See Translations.
  • One sandbox for apps and themes. App blocks may use everything a theme may use, including sitepack_products() and sitepack_price(). raw is not available; use sitepack_html and sitepack_json. See The sandbox.
  • App CDN. App scripts are served from https://cdn-app.sitepack.eu/<uuid>/<version>/assets/js/<file>.
  • Marketplace assets. Screenshots may now be SVG (cleaned on upload), up to 5 MB each.
  • New webhook topics. order.created, order.paid and customer.created line up with the storefront tracking events. See Webhooks.
  • Storefront blocks and events. Apps render Twig into fixed spots of every theme (blocks), load scripts (scripts), and read window.SitePackTracking, the sitepack:* SDK events and the visitor's cookie consent. See Storefront Blocks & Events.

SDK​

  • sitepack:checkout:thank-you. Raised once on the confirmation page when the order is paid. See Storefront events.
  • Cookie consent. sdk.cookies.consent() and the sitepack:cookies:consent event. See UI & Cookies.

Themes​

  • homepage.twig is assigned to the homepage automatically.
  • Legal pages are translatable and served per language.

August 2026​

Apps​

  • App install flow. The consent screen with a site picker, grouped permissions and paid plans; the install link and redirect URI in the Partner Portal; signed OAuth callbacks with manage_url. See Authentication (OAuth).
  • X-SitePack-Access-Token is the preferred header. Authorization: Bearer keeps working.
  • Product options and variants on the v1 API, with the products:* and inventory:* scopes and the ordered variant on order reads. See Product Options & Variants.
  • E-commerce and blog scopes: products, inventory, categories, collections, tags, orders, customers, discounts, shipping and blogs. See Scopes.

CLI​

  • sitepack mcp connects an AI editor to your SitePack site. See AI & MCP.

Themes​

  • New functions: sitepack_account(), sitepack_account_slug(), sitepack_blogs(), sitepack_categories(), sitepack_products(), sitepack_product_options(), sitepack_json_ld and the product, category and blog slug helpers. See Functions.
  • raw removed from themes. Use sitepack_html for merchant rich text and sitepack_json for data in a <script> tag.
  • Central content (newsletter, USPs, top bar, events) is managed in the admin and read through theme functions and the SDK.

July 2026​

  • JavaScript SDK released for theme and app developers. See SDK overview.
  • sitepack_slug() and the translation switcher functions for themes.