# SeatsChart changelog

New features, improvements and fixes across the SeatsChart API, embed and SDKs, designer, dashboard and platform. Newest first.

Web: https://seatschart.com/changelog · RSS: https://seatschart.com/changelog.xml

## October 2026

### Floor-plan scan reads row labels and seat numbers

*2026-10-30 · Designer* · [link](https://seatschart.com/changelog#2026-10-30-scan-reads-labels)

**Scan floor plan** now reads the printed row letters and seat numbers as well as the seat positions, so scanned seats arrive already labelled. The reading runs in your browser with a self-hosted OCR engine (nothing is sent to a third party, no extra server cost) and only looks at the seats, the row ends and the aisles. Each row's numbering is inferred (consecutive, odd, even or odd/even from the centre, either direction, zero padding kept) and missing row letters are filled from the sequence. A review step shows what was read, flags the rows to check and lets you edit, accept or fall back to automatic labels before the seats land as one undo step.

Packages: `@seatschart/embed@0.15.0`, `@seatschart/react@0.15.0`, `@seatschart/react-native@0.12.0`, `@seatschart/vue@0.11.0`, `@seatschart/angular@0.11.0`

Docs: [Map designer](https://seatschart.com/docs?doc=MAP_DESIGNER.md#read-row-and-seat-labels)

### Public status page with 90 days of uptime history

*2026-10-30 · Platform* · [link](https://seatschart.com/changelog#2026-10-30-status-page)

The new **status page** (`/status`) shows the live state and response time of the API, real-time updates, the reservations queue, the database, the cache, the map asset CDN and the dashboard, with a daily uptime bar for the last 90 days, incidents and scheduled maintenance. A lightweight probe checks every component every 30 seconds; sustained failures open an incident automatically. Days or hours without measurements show as no data, never as uptime. The same data is available as JSON from `GET /api/status`.

### Try the designer and a demo shop without an account

*2026-10-30 · Platform* · [link](https://seatschart.com/changelog#2026-10-30-public-demos)

The **designer playground** (`/try/designer`) runs the real map designer in your browser with no sign-up: start from a template, edit with undo and redo, check the validation list, preview the buyer view and export or import the chart as JSON. The draft stays in your browser and, after you sign up, **New chart** turns it into a chart of your workspace. The **demo shop** (`/try/shop`) is a made-up concert page with the production buyer viewer, category prices, ticket types, a hold timer, best available and a fake checkout; its inventory and other buyers are simulated in the browser, so nothing is reserved or charged.

Docs: [Quick start](https://seatschart.com/docs?doc=QUICKSTART.md#try-it-first-no-account-needed) · [Map designer](https://seatschart.com/docs?doc=MAP_DESIGNER.md)

### Multi-floor charts open on all floors, and host objects carry fees

*2026-10-30 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-30-stacked-floors-fees-and-validators)

Without `activeFloor`, a multi-floor chart now opens on the stacked all-floors view in 2D, as seats.io does (`activeFloor` still picks the floor, and 3D still opens on a floor). Host objects carry fees the seats.io way, in `pricing.fee`, each ticket type's `fee` and `selectedTicketType.fee`, and a seat whose ticket type is not picked yet shows the span of its fees instead of the default type's. The Event Manager reports `onSelectionInvalid` with `minimum_selected_places` for `minimumSelectedPlaces`, in the object and the seats.io list form. The designer's displayed type also shows on section and general admission cards.

Packages: `@seatschart/embed@0.15.0`, `@seatschart/react@0.15.0`, `@seatschart/react-native@0.12.0`, `@seatschart/vue@0.11.0`, `@seatschart/angular@0.11.0`

Docs: [Floors](https://seatschart.com/docs?doc=README.md#legend-filter-controls-floors-and-form-posts) · [Host objects](https://seatschart.com/docs?doc=README.md#host-objects-seatsio-object-model) · [Map designer](https://seatschart.com/docs?doc=MAP_DESIGNER.md)

### seats.io-style validators, resale-aware orphan checks and fee lines

*2026-10-29 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-29-validators-and-fee-lines)

`selectionValidators` accepts the seats.io list form (`[{ type: "noOrphanSeats" }, { type: "minimumSelectedPlaces", minimum: 4 }]`, with `enabled: false` to switch an entry off), and `noOrphanSeats.ignoreResale` decides whether resale seats form a block of their own. When your pricing has fees, the tooltip, the ticket-type card and the cart show them on their own line: "incl. €2.50 fee" with `allFeesIncluded: true`, "+ €2.50 fee" otherwise. A release that fails now shows the buyer a short notice instead of failing silently.

Packages: `@seatschart/embed@0.14.0`, `@seatschart/react@0.14.0`, `@seatschart/react-native@0.11.0`, `@seatschart/vue@0.10.0`, `@seatschart/angular@0.10.0`

Docs: [Host customisation](https://seatschart.com/docs?doc=README.md#host-customisation-declarative-never-host-code) · [Fees](https://seatschart.com/docs?doc=README.md#buyer-experience-per-seat-ticket-types-tap-to-zoom-gestures-box-lasso)

### Whole rows, List places on phones and a stacked floor view

*2026-10-29 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-29-whole-rows-and-list-places)

Buyers can turn on **Select whole rows** in the selection menu: one click takes the seat's whole row block in one hold call. On phones, charts with `stepThrough` get **List places**, a sheet that walks floors, sections, rows and seats with large targets. Multi-floor charts get a stacked all-floors view in 2D, seen from the stage or from above (`multiFloor.view`, `isometricView()`, `stageView()`), and `set3DCameraPreset()` moves the 3D camera.

Packages: `@seatschart/embed@0.14.0`, `@seatschart/react@0.14.0`, `@seatschart/react-native@0.11.0`, `@seatschart/vue@0.10.0`, `@seatschart/angular@0.10.0`

Docs: [Floors](https://seatschart.com/docs?doc=README.md#legend-filter-controls-floors-and-form-posts) · [Guided selection and List places](https://seatschart.com/docs?doc=README.md#guided-selection-seat-search-and-colours) · [Buyer UX guidelines](https://seatschart.com/docs?doc=BUYER_UX_GUIDELINES.md)

### Table layouts, foreground decorations and text styles in the designer

*2026-10-29 · Designer* · [link](https://seatschart.com/changelog#2026-10-29-designer-table-layouts-and-foreground)

Tables get layouts and open spaces, a foreground layer draws decorations above the seats, text can be bold or italic, floors carry short abbreviations for tight floor pickers and seats a displayed type that buyers see in the tooltip. Number fields gain a drag scrubber, and the chart check now flags oversized images and duplicate labels across sections with the same name. A 3D seat-picking checklist decides whether buyers on `defaultRenderer: "auto"` pick seats in 3D.

Packages: `@seatschart/embed@0.14.0`, `@seatschart/react@0.14.0`, `@seatschart/react-native@0.11.0`, `@seatschart/vue@0.10.0`, `@seatschart/angular@0.10.0`

Docs: [Map designer](https://seatschart.com/docs?doc=MAP_DESIGNER.md#tables-and-booths)

### Any Font Awesome 4.7 icon on a seat

*2026-10-29 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-29-font-awesome-icons)

`objectIcon` accepts every Font Awesome 4.7 icon name and alias (786 names), with or without the `fa-` prefix, next to the 66 icons drawn in the viewer's own style. An outline downloads only when your configuration names it, at about 4 KB per icon.

Packages: `@seatschart/embed@0.13.0`, `@seatschart/react@0.13.0`, `@seatschart/react-native@0.10.0`, `@seatschart/vue@0.9.0`, `@seatschart/angular@0.9.0`

Docs: [Declarative rules v2](https://seatschart.com/docs?doc=README.md#declarative-rules-v2)

### Large group holds, the full object model and safe tooltip links

*2026-10-29 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-29-group-holds-and-object-model)

Workspaces can raise the hold cap so a group of more than 64 seats is held in one atomic step. Host objects carry the remaining seats.io fields, tooltips take links (`[url=https://…]`) that open in a new tab outside the iframe sandbox, `selectionBy: "objects"` counts a table booked as a whole once, and `showRowLabels` and `previewObjectChanges()` are new. 0.12.1 lets popover links leave the sandbox.

Packages: `@seatschart/embed@0.12.1`, `@seatschart/react@0.12.1`, `@seatschart/react-native@0.9.1`, `@seatschart/vue@0.8.1`, `@seatschart/angular@0.8.1`

Docs: [Host objects](https://seatschart.com/docs?doc=README.md#host-objects-seatsio-object-model)

### Declarative rules v2, buyer extraData and map-only mode

*2026-10-29 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-29-rules-v2-and-map-only-mode)

Colour, label, icon, visibility and tooltip rules match on price, accessibility, zone, floor, ticket type and your own `extraConfig`, as data, so a 50,000-seat map repaints as fast as without rules. Workspaces can publish selected `extraData` keys to buyers. `bringYourOwnBackend` renders the map with statuses fed by your own system. The loader also accepts seats.io configuration names, and `changeConfig` patches the live chart.

Packages: `@seatschart/embed@0.11.0`, `@seatschart/react@0.11.0`, `@seatschart/react-native@0.8.0`, `@seatschart/vue@0.7.0`, `@seatschart/angular@0.7.0`

Docs: [Declarative rules v2](https://seatschart.com/docs?doc=README.md#declarative-rules-v2) · [Map-only mode](https://seatschart.com/docs?doc=README.md#map-only-mode-bringyourownbackend)

### General admission in the cart total and in listSelectedObjects

*2026-10-28 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-28-general-admission-in-the-cart)

General admission places picked without an immediate hold (`holdOnSelectForGAs: false`) are priced in the viewer's cart and counted in its total. `listSelectedObjects({ includeGeneralAdmission: true })` returns one entry per area with its quantity, unit price and ticket types.

Packages: `@seatschart/embed@0.10.0`, `@seatschart/react@0.10.0`, `@seatschart/react-native@0.7.0`, `@seatschart/vue@0.6.0`, `@seatschart/angular@0.6.0`

Docs: [Checkout flow](https://seatschart.com/docs?doc=README.md#checkout-flow-hold-calls-lost-seats-modes-and-prompts)

### 3D floors, wayfinding markers, sponsor billboards and GA holds at checkout

*2026-10-27 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-27-3d-floors-markers-billboards)

The 3D view colours GA table chairs by state, shows wayfinding markers, fades upper floors and gets a floor elevator and a Places list. Venues can carry sponsor billboards. `holdOnSelectForGAs: false` selects general admission places and holds them at checkout. The embedded designer's `safe` and `readOnly` modes are now enforced by the API, and every server SDK has connect and request timeouts.

Packages: `@seatschart/embed@0.9.0`, `@seatschart/react@0.9.0`, `@seatschart/react-native@0.6.0`, `@seatschart/vue@0.5.0`, `@seatschart/angular@0.5.0`

Docs: [3D venue view](https://seatschart.com/docs?doc=README.md#3d-venue-view-and-static-export-png-pdf) · [SDK timeouts](https://seatschart.com/docs?doc=GENERATE_SERVER_SDK.md#timeouts)

### Resale of season-ticket seats in single matches

*2026-10-27 · API* · [link](https://seatschart.com/changelog#2026-10-27-resale-of-season-ticket-seats)

In seasons whose bookings do not propagate, a season-ticket holder's seat that is not for sale in a match can be listed for resale in that match only. Buyers see it for sale with the listing's colour and price, and best available never picks it.

Docs: [Resale of seats that are not for sale](https://seatschart.com/docs?doc=OPERATIONAL_INVENTORY.md#19-resale-of-seats-that-are-not-for-sale-season-tickets)

### 70 languages

*2026-10-27 · Platform* · [link](https://seatschart.com/changelog#2026-10-27-70-languages)

The buyer viewer, the embed, the dashboard and the developer docs are available in 70 languages, including right-to-left scripts. The viewer follows the host page's language unless you pass `language`.

Packages: `@seatschart/embed@0.8.0`, `@seatschart/react@0.8.0`, `@seatschart/react-native@0.5.0`, `@seatschart/vue@0.4.0`, `@seatschart/angular@0.4.0`

### Vue and Angular components

*2026-10-26 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-26-vue-and-angular)

`@seatschart/vue` and `@seatschart/angular` wrap the seat map, the Event Manager and the designer with typed props and events, next to the React and React Native packages. This release also introduced the locale registry with 32 languages and right-to-left layouts.

Packages: `@seatschart/embed@0.6.0`, `@seatschart/react@0.6.0`, `@seatschart/react-native@0.3.0`, `@seatschart/vue@0.2.0`, `@seatschart/angular@0.2.0`

Docs: [Vue and Angular components](https://seatschart.com/docs?doc=README.md#vue-and-angular-components)

### 3D lighting presets and the view from a seat

*2026-10-26 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-26-3d-lighting-and-view-from-a-seat)

Venues can pick a 3D lighting preset, and buyers can look at the stage from the seat they are considering (`showViewFromSeat`). The Flutter package `seatschart_flutter` 0.2.0 ships the same features.

Packages: `@seatschart/embed@0.5.0`, `@seatschart/react@0.5.0`, `@seatschart/react-native@0.2.0`

Docs: [3D venue view](https://seatschart.com/docs?doc=README.md#3d-venue-view-and-static-export-png-pdf)

### React Native and Flutter

*2026-10-26 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-26-react-native-and-flutter)

`@seatschart/react-native` and `seatschart_flutter` load the viewer in a WebView over an opt-in native bridge: the same events, commands and prompts as on the web, without shipping any secret in the app.

Packages: `@seatschart/embed@0.4.0`, `@seatschart/react@0.4.0`, `@seatschart/react-native@0.1.1`

Docs: [Mobile apps](https://seatschart.com/docs?doc=TICKETING_PLATFORMS.md#8-mobile-apps-react-native-flutter)

### Embed the Event Manager and the designer

*2026-10-26 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-26-event-manager-and-designer-embeds)

`SeatsChartEventManager` and `SeatsChartDesigner` put the box-office tools and the map designer inside your own back office, with callbacks, modes and language and colour scheme options. The buyer chart gained `partySize`, `style`, `objectPopover`, `legend`, `filterControls`, the floors API and hidden form inputs.

Packages: `@seatschart/embed@0.3.0`, `@seatschart/react@0.3.0`

Docs: [Embedded Event Manager](https://seatschart.com/docs?doc=README.md#embedded-event-manager-host-javascript-api) · [Embedded designer](https://seatschart.com/docs?doc=README.md#embedded-designer-host-javascript-api)

### Server SDKs in seven languages

*2026-10-25 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-25-server-sdks)

Official server clients for TypeScript, Python, Ruby, PHP, Java, .NET and Go, published to their package registries. Each retries `429` and `503` with backoff, retries only safe or idempotent requests, and reuses your `Idempotency-Key` so an operation is never applied twice.

Packages: `@seatschart/sdk@0.2.0`

Docs: [Server SDKs](https://seatschart.com/docs?doc=GENERATE_SERVER_SDK.md)

### Sandboxes and dark mode in the dashboard

*2026-10-25 · Dashboard* · [link](https://seatschart.com/changelog#2026-10-25-sandboxes-and-dark-mode)

Sandboxes are isolated workspaces linked to production, with their own keys, a copy-from-production action, an atomic reset and usage that is never billed. The dashboard also follows a Light, Dark or System theme.

Docs: [Sandboxes](https://seatschart.com/docs?doc=PLATFORM_GOVERNANCE.md#sandboxes)

### Resale and primary listings

*2026-10-25 · API* · [link](https://seatschart.com/changelog#2026-10-25-listings)

Listings group seats for resale or primary sale, with listing types, colours and prices, and can be sold as a whole. Holds, confirmations, best available and the buyer viewer respect them, and they reach buyers in the live state.

Docs: [Listings](https://seatschart.com/docs?doc=OPERATIONAL_INVENTORY.md#15-listings-resale-and-primary-and-listing-types)

### Authored 3D venues

*2026-10-25 · Designer* · [link](https://seatschart.com/changelog#2026-10-25-authored-3d)

Give sections and zones an elevation and a rake, add stands, stack floors with their heights and place 3D tables, with a live 3D preview in the designer. The buyer viewer renders the result.

Docs: [3D view](https://seatschart.com/docs?doc=MAP_DESIGNER.md#3d-view)

### Section prices, section cards and buyer filters

*2026-10-24 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-24-section-prices-and-filters)

Zoomed out, each section shows its lowest price ("from R$ 120") or "Sold out". Hovering a section opens a card with free seats and prices, and the Filters panel narrows seats by price, section, ticket type and accessibility. Hosts drive the same filters with `setFilters()`.

Docs: [Section prices and filters](https://seatschart.com/docs?doc=README.md#section-prices-section-card-and-filters)

### Fewer round trips on every hold and confirmation

*2026-10-24 · Platform* · [link](https://seatschart.com/changelog#2026-10-24-faster-holds)

Prepared statements, warm connections, cached roles and pipelined reserve and confirm calls cut database and cache round trips on the hot paths. Audit entries and hold webhooks moved to the background worker.

### Row tools, layers and GA tables in the designer

*2026-10-24 · Designer* · [link](https://seatschart.com/changelog#2026-10-24-designer-row-tools)

Join, split and interleave rows, edit sections in place, work in layers, join areas, place GA tables, calibrate a reference image and let charts publish automatically.

Docs: [Row tools](https://seatschart.com/docs?doc=MAP_DESIGNER.md#row-tools-join-split-interleave)

### Per-seat ticket types, tap-to-zoom and lasso selection

*2026-10-23 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-23-per-seat-ticket-types)

Buyers pick a ticket type per seat in a card next to the seat (a bottom sheet on phones), so one order can mix full and half price. Seats too small to hit zoom in on the first tap, seat numbers appear once they are legible, embedded maps no longer steal page scrolling, and a rectangle or lasso selects many seats at once.

Docs: [Buyer experience](https://seatschart.com/docs?doc=README.md#buyer-experience-per-seat-ticket-types-tap-to-zoom-gestures-box-lasso)

### Partner pricing and Brazilian sales rules

*2026-10-23 · API* · [link](https://seatschart.com/changelog#2026-10-23-partner-pricing)

Ticketing platforms choose where prices come from: their own (no quote), a synced price table or the SeatsChart catalog. Half-price quotas, lot switching and per-buyer limits are enforced atomically on every hold.

Docs: [Ticketing platforms](https://seatschart.com/docs?doc=TICKETING_PLATFORMS.md)

### Designer onboarding and a live chart check

*2026-10-23 · Designer* · [link](https://seatschart.com/changelog#2026-10-23-designer-onboarding-and-checks)

One-click charts, inline rename, a start panel and a guided tour get new users drawing quickly. A live checklist finds problems as you draw, locates them on the map and blocks publishing when a severity says so.

Docs: [Validation](https://seatschart.com/docs?doc=MAP_DESIGNER.md#validation)

### Script-tag loader and renderer API

*2026-10-22 · Embed & SDKs* · [link](https://seatschart.com/changelog#2026-10-22-script-tag-loader)

One `<script>` and one `div` embed the seat map: the loader creates the sandboxed iframe, checks every message and turns chart events into callbacks and commands into promises. Multi-event embeds book the same seats across several events.

Docs: [Script-tag loader](https://seatschart.com/docs?doc=README.md#script-tag-loader-recommended)

### Webhook subscriptions, API key scopes and usage metering

*2026-10-22 · Platform* · [link](https://seatschart.com/changelog#2026-10-22-webhooks-scopes-usage)

Subscribe endpoints to the events you need and inspect every delivery, limit API keys to scopes, and follow usage against your plan's rate limits.

Docs: [Webhooks](https://seatschart.com/docs?doc=PLATFORM_GOVERNANCE.md#webhooks) · [API key scopes](https://seatschart.com/docs?doc=PLATFORM_GOVERNANCE.md#api-key-scopes)

## September 2026

### Scan seats from a floor plan

*2026-09-24 · Designer* · [link](https://seatschart.com/changelog#2026-09-24-floor-plan-scan)

Upload a floor plan image and the designer detects its seats and rows, adapting to the seat pitch of the drawing.

Docs: [Scan floor plan](https://seatschart.com/docs?doc=MAP_DESIGNER.md#scan-floor-plan)

## August 2026

### Live inventory over Server-Sent Events

*2026-08-15 · API* · [link](https://seatschart.com/changelog#2026-08-15-live-inventory)

Connected buyers see seats change as they are held, sold or released, through one lightweight Server-Sent Events stream per event. Host pages can command the embedded map.

### Event Manager, seasons and the server SDK

*2026-08-12 · Dashboard* · [link](https://seatschart.com/changelog#2026-08-12-event-manager-and-seasons)

The Event Manager lets box-office staff book, block and release seats on the map. Seasons bundle events, and the first `@seatschart/sdk` brings the API to Node and Bun servers.

## July 2026

### Billing, team roles and embed domains

*2026-07-02 · Platform* · [link](https://seatschart.com/changelog#2026-07-02-billing-team-embed-domains)

Workspaces get plans and billing, team members with roles, and a per-workspace list of domains allowed to embed the seat map.
