← All updates

CHANGELOG

v1.0.0-beta.231

The Apple apps add, edit, switch and delete redirects natively. 357 changes in all: 123 new, 153 fixes, 2 performance, 5 changed, 22 docs and 52 behind the scenes.

The Aglyn Team · Oct 2026

Released to production on October 7, 2026 at 18:23 CDT. See every commit in this release on GitHub

New

  • Redirects: the Apple apps add, edit, switch and delete redirects natively
  • Native: the Apple plugin context writes as the console does, via FirestoreWriter
  • Commerce: the Apple store takes the Kotlin order chips and the to-ship card
  • Native: the Apple plugin host takes Kotlin's Besigner rules and screen-only actions
  • Commerce: the POS register and the store, native on iPhone, iPad and Mac
  • Native: the Aglyn app manages natively; the Besigner is its only web view
  • Native: the kit plans on both readers, takes device cards, opens only the Besigner
  • Native: unsigned Macs sign in over REST; push and notification settings
  • Native: the Apple kit plans list queries and formats orders as the console does
  • Native: the native seed writes a notification feed for both apps
  • Native: the Aglyn app shows the catalog and scans stock natively
  • Native: the Aglyn app shows the store's sales natively
  • Accounting: a Codat provider reaches QuickBooks Desktop, NetSuite, Sage and more
  • Redirects: the apps add, edit, switch and delete redirects natively
  • Native: the Windows Besigner runs in WebView2 inside the app window
  • Native: the apps open only the Besigner on the web; every other area is native
  • Fulfillment networks: ShipBob and Amazon MCF route paid orders and write tracking back
  • Native: the Aglyn app manages a site's orders natively
  • Commerce: post-purchase plugin — AfterShip, Route protection, Narvar
  • Native: the POS takes cards on Tap to Pay and Bluetooth, and scans with the camera
  • Native: per-type push switches, desktop Credential Manager and Listen
  • Native: a stored order without status or a totals field decodes
  • AI: a site put live whole says so with the shared site-live notice
  • Commerce: ShippingEasy connector beside ShipStation, with the merchant's own keys
  • Shipping: Easyship, Sendcloud, ShipperHQ and merchant carrier accounts
  • Native: the Aglyn and Aglyn POS app icons, generated from the chosen designs
  • AI: guided-start and build pages and layouts are designed in the layout language
  • AI: every page the layout language describes compiles to a tree the doctrine admits
  • Sharing: new datasets, media and CRM records each get their own default sharing
  • AI: run the guided AI site start locally, on the emulators with the real model
  • Commerce: outside fulfillers' holds and synced stock counts, through core seams
  • Fonts: an installer for a site's own font files in the theme editor
  • Fonts: the media library stores and serves a site's WOFF2 fonts
  • Fonts: a font picker over the whole Google Fonts catalog, with cost and pairings
  • Fonts: the theme editor's Typography card hosts a font control zone
  • UI components: a download cost badge, a searchable virtual list and useInView
  • Fonts: the font loader prices a theme's fonts as a published page loads them
  • Fonts: a theme's fonts read and write as a body font and a heading font
  • Fonts: a font loader that serves each theme face from the site, sized fallbacks
  • Commerce: the desktop register reads wedge scanners and prints ESC/POS over TCP
  • Bookings: today's bookings take payment at the Aglyn POS counter
  • Commerce: the native Aglyn POS register for Android and the JVM desktop
  • Mobile: the kit adds notices, amount rows, steppers, choice chips, skeleton grids
  • Mobile: the Kotlin apps run on the JVM desktop with menus and shortcuts
  • Mobile: the iOS and Mac Home is a site dashboard built from the shared kit
  • Mobile: seed the native apps' emulator stack from tools/scripts
  • Mobile: the Android console view carries the origin-checked bridge
  • Mobile: push over FCM registers the Android install and opens a tapped link
  • Mobile: the Kotlin list-query planner replays the console's plans
  • Mobile: the Kotlin apps adopt the generated contracts and formatter cases
  • Mobile: the till lists menu screens and binds the register's peripherals
  • Mobile: plugins read the register's peripherals and declare console-served screens
  • Mobile: the hardware kit encodes ESC/POS receipts and reads HID scanner bursts
  • Mobile: the Aglyn POS Android app with its store picker and register host
  • Mobile: the Android Home is a site dashboard built from the shared kit
  • Mobile: the native Apple foundation and the Aglyn and Aglyn POS shells
  • Mobile: push goes out over APNs and FCM, and device rules check each transport
  • Mobile: the native Kotlin foundation and the Aglyn Android shell
  • Marketing platforms: Mailchimp, Klaviyo, Omnisend and Attentive sync
  • Commerce: a checkout reached with an address raises checkout.started
  • Email: a site's marketing consent as an outside list mirrors it
  • Plugins: the person-records seam walks a site's people by change
  • Mobile: check:mobile-isolation holds the Swift and Kotlin trees both ways
  • UI components: StatusChip, CopyField and useClientPagination; sales channels use them
  • Mobile: record the console's formatter and order-rule answers for the native ports
  • Mobile: generate the shared native contracts from the pure modules
  • Bookings: check a guest in and move a booking, as member routes
  • Bookings: take payment for a booking in person on the native pos app's reader
  • Commerce: terminal connection tokens and the site location for the native pos app
  • Sales channels: product feeds for Google, Meta, TikTok, Pinterest, Snapchat and Microsoft
  • Mobile: the notification catalog for the native apps' push settings
  • Mobile: the native apps' logo, wordmark and app icons, generated
  • Mobile: native theme tokens and the bundled Roboto Flex face
  • Mobile: generate the native plugin manifest for Swift and Kotlin
  • Commerce: checkout and the register ask the store's tax service
  • Tax engines: merchants connect their own Avalara AvaTax or TaxJar
  • Platform: a core.tax-engine contract beside the tax profile
  • Legal: the subprocessor list names Apple and Google for push; push is on
  • Commerce: wallets, pay later and crypto on every storefront checkout
  • Mobile: biometric unlock for the Aglyn app
  • Mobile: native lists on the console's query plan, DAM upload and member access
  • Commerce: the Aglyn app's orders, products, scan and sales screens
  • Mobile: push devices, Expo fan-out, per-type push settings and tap deep links
  • Commerce: the tablet register scans with the camera and a wedge scanner off the search box
  • Commerce: the tablet register runs the shift, PIN cashier, customer lookup and 80mm receipt
  • Commerce: quick keys, modifiers and an item sheet for picking items at the register
  • Commerce: a POS devices card for card readers and customer displays
  • Commerce: the customer display, with text receipts and a thank-you that forgets the customer
  • Console: a plugin's public device page at /kiosk, with no session or ad tags
  • Commerce: a tablet-first register that splits tender across every payment
  • Commerce: the Hardware card lists a register's readers and displays
  • Commerce: sales print, kick the drawer, kitchen tickets, scanners and labels
  • Commerce: camera barcode scanning and a Hardware card per register
  • Commerce: ShipStation Custom Store endpoint with sealed credentials and shipnotify
  • Mobile: Aglyn app skeleton, mobile foundation libs and plugin mobile surface
  • Shipping: buy a return label from the return dialog
  • Shipping: check a paid order's address with the carrier
  • Commerce: live carrier rates at checkout, ship-from addresses, shipment seam
  • Shipping: shipping plugin with Shippo and EasyPost, labels, tracking, label billing
  • Commerce: a register return joins the store's returns and raises the refund events
  • Commerce: register shifts, Z-report, staff PIN, customer lookup, returns, receipts
  • Plugins: a person-records search the register's customer lookup reads
  • Accounting: QuickBooks Online and Xero sync of sales, refunds, fees and payouts
  • Commerce: a site's order history, read by other plugins through a service
  • Commerce: returns, invoice and order webhooks in the console; buyer return page
  • Commerce: return events, signed order webhooks, order-status return action
  • Sms: order texts after the receipt keep quiet hours in the store's zone
  • Commerce: a guest order-status page behind the link in every order email
  • Commerce: data layer for the app's orders, products and sales screens
  • Commerce: pure outbox and smart-collection reads for the app, web untouched
  • Commerce: shipping CSV presets, tracking import and shipping fields on orders
  • Commerce: returns — buyer request, approve, decline, receive with restock, refund once
  • Commerce: register receipts ride the buyer-notification door, and raise order.paid
  • Commerce: split-tender POS ledger, Stripe Terminal readers and tips
  • Sms: an SMS plugin behind core's messaging contract; resend receipt and buyer notification switches
  • Commerce: order events for other plugins, and as workflow triggers
  • Plugins: plugin events, declared by a plugin and delivered through an outbox
  • Commerce: cloud receipt printers — Star CloudPRNT and Epson Server Direct Print queue
  • Commerce: in-page storefront checkout is complete and released
  • Commerce: orderDetail and orderFulfillment zones, Fulfill items panel
  • Commerce: fulfill an order by quantity, several shipments each editable
  • Commerce: buyer emails for shipped, delivered, refunded, canceled and POS receipts
  • Commerce: one shared carrier tracking-link builder for every surface

Fixed

  • Accounting: the codat declaration names no accounting credential variable
  • Commerce: post-purchase cards link their guide; specs list the new locked-on plugins
  • Sharing: deny client writes to the default sharing fields
  • Native: the POS app is named "Aglyn POS" on iPhone, iPad and Mac
  • AI: the contact check's matches are typed, so the plugin's build compiles
  • AI: a site's footer prints one copyright line, its bottom bar's
  • Commerce: post-purchase declarations name their reason as customer-chosen
  • AI: only a guided start links a page kept out of the nav; Home always
  • Native: an order reads as the console lifts it, and sales figures are ported
  • AI: a site's header and footer link every page it builds, Home first
  • Commerce: the shippingeasy connection rule names its orders, not a recursive match
  • AI: no link reference reaches a language-built page's words
  • Fulfillment networks: the plugin's console budget, the self-host anchor and typed spec offers
  • AI: a language-built page or frame shows no gap; a fact the brief lacks is left out
  • Commerce: post-purchase catalog row fits the page budget; generated contracts, tsconfigs and plugin budget
  • Commerce: post-purchase order key is a named key function; card copy reads no brand
  • AI: a centered section's head stays centered; a spelled-out escape is its character
  • Native: the desktop Listen client compiles against grpc and the KMP dependency DSL
  • AI: the invented-contact check reads no icon drawing as a phone number
  • AI: a language page's contact check reads its stored nodes as a doctrine tree
  • Console: the Create site dialog closes once the site exists
  • AI: a language page gives no address or hours the job was not given
  • AI: a layout gives no street address or opening hours the brief did not
  • UI components: the table and the layout slot each name their drawer glyph once
  • Console: the editor-hint bounce never leaves a sign-up door mid-landing
  • Email: a subdomain's DKIM record named relative to its zone is readable
  • UI components: an icon size and a stack spacing stored as text are still numbers
  • AI: left-out sections are asked for again alone; a card a column is one group
  • Commerce: the ShippingEasy card's status chip and spec orders type-check
  • Commerce: the ShippingEasy card's four fixed facts are rows, not a mapped list
  • Shipping: American spelling in the Easyship and Sendcloud adapters
  • Shipping: ShipperHQ names the configured brand as the cart
  • Native: the splash screen keeps its launcher background color
  • AI: rule 1 counts a repeated block within its section, frames of items aside
  • Native: native build targets are build-native, out of the web build
  • Commerce: the POS touch style and memory store reads name their types
  • Onboarding: a starter site says it is live, and AI answers know it
  • Commerce: a synced stock count's adjustment row takes a minted resource id
  • AI: an AI layout fills the window, so a short page keeps its footer at the bottom
  • AI: the local guided start stops every emulator it started, and waits for slow ones
  • AI: a layout names the site by its own name and invents no contact detail
  • AI: the tree check settles a Grid container's items for layouts and components too
  • AI: a guided start's page may link the pages built after it
  • Fonts: the font prepare route tells a refused token from a failed check
  • AI: a heading past its ceiling keeps its first whole clause, not a mid-word cut
  • AI: a node map's missing children and unheld elements are settled, not refused
  • AI: a section whose plan places no component draws its repeated item inline
  • AI: the build page shows the contact form being built
  • AI: a customer never reads a building rule's own words
  • AI: a Grid container's items are sized before the page check, not refused
  • AI: a finished job's notification says what it could not build
  • AI: a guided start's plan handoff never reads as a failed site
  • AI: the item a build is writing shows as building, with its time
  • AI: a guided start's site job carries the site's own name
  • Native: the native test targets are test-native, out of the jest sweep
  • Fonts: each font control loads behind its own boundary in the Typography card
  • Fonts: a body font picked from the short list keeps the heading and uploaded fonts
  • Fonts: a font delivery chosen without its file sizes is reconsidered in minutes
  • Fonts: a customer site draws in the system font until its theme picks one
  • Fonts: a published page preloads each theme font once, not twice
  • Fonts: a Google font file id may run to 400 characters, so Roboto Flex loads
  • Commerce: register presses outlive their step; a payment left at a reader can stop
  • Mobile: a quantity stepper shows remove, not delete, when its floor is one
  • Mobile: picking a site on a fresh install keeps that site
  • Mobile: the self-host host ratchet allows the native app's bundle id
  • Mobile: the self-host ratchet allows the APNs topic's bundle id
  • Mobile: one declaration per APNs host in the subprocessor inventory
  • Mobile: regenerate the native contracts for the device transport fields
  • Mobile: the cookie inventory declares the native console session copy
  • Mobile: the subprocessor inventory declares the APNs gateways the push sender calls
  • Mobile: the subprocessor inventory declares APNs' production and sandbox hosts
  • Marketing platforms: the workspace export discloses the connections and owed events
  • Marketing platforms: the platforms gate answers 401 only to a refused token
  • Marketing platforms: the Mailchimp API base names its declared host literally
  • Sales channels: the repo-wide sweeps see the plugin as it is
  • Mobile: the subprocessor inventory declares the Android resource namespace
  • Bookings: the 3DS sweep classifies the card-present booking payment door
  • Themes: the console serves Roboto Flex, the face its theme names
  • Marketing platforms: the sync log pages with the shared paged hook and footer
  • Marketing platforms: log rows take a minted id, and the plugin has its budget
  • Marketing platforms: the brand is the configured one, event URLs spelled whole
  • Commerce: the 423 route-gate spec mocks runPluginEventHandlers for detach
  • Commerce: the host-lock job sweep expects the payment-method-domains job
  • Shipping: the shipping guide documents carrier accounts and labels for the cards
  • Tax engines: the Tax service cards open the tax services guide
  • Tax engines: the workspace export discloses the shipping and tax data it erases
  • Accounting: the host-field sweep strips comments string-aware, so a URL is no field
  • Bookings: booking member and in-person doors answer 401 only to a refused token
  • Sales channels: cards carry docs help, and only a refused token answers 401
  • Tax engines: the tax-engine door answers 401 only to a refused token
  • Accounting: the accounting gate classifies a token throw with isRefusedIdToken
  • Commerce: the printers door answers 401 only to a refused token
  • Commerce: the register-ops gate answers 401 only to a refused token
  • Commerce: the POS door answers 401 only to a refused token, not an outage
  • Shipping: carrier-rate and shipping doors answer 401 only to a refused token
  • Commerce: the product editor stages a country of origin a letter at a time
  • Commerce: the tenant image-sink inventory declares the POS and print surfaces
  • Commerce: the table-footer sweep classifies the Commerce v3 lists
  • Commerce: the webhook delivery log pages past its first 25 rows
  • Commerce: shift history pages through the shared footer instead of Show more
  • Mobile: the Firebase client comparison calls the GitLive SDKs unofficial
  • Mobile: the community-naming sweep exempts the React Native netinfo package's files
  • Commerce: the cache-drop sweep exempts the buyer notification switches
  • AI: the automation draft's grammar fits its proof again, every trigger kept
  • Mobile: the server drops the Expo push sender; transports register at the fan-out
  • Commerce: a receipt prints a media-library logo, resolved as the display resolves it
  • Commerce: the root barrel stops re-exporting the model, so sites skip its modules
  • Shipping: every shipping card carries its help affordance
  • Accounting: every accounting card opens the guide for its ledger
  • Accounting: the Accounting nav header waits for listed guides before naming a topic
  • Accounting: the Accounting nav tab names its id literally, as the flag map reads it
  • Accounting: release_accounting declares the two guides that disclose its rollout
  • Commerce: the store import and Pirate Ship guides' descriptions fit the excerpt limit
  • Commerce: the POS hardware guide's description fits the help excerpt limit
  • Shipping: the carrier quote cache's TTL is declared, documented and owed
  • Commerce: the print job queue's TTL is declared, documented and owed
  • Commerce: the order webhook delivery log's TTL is declared, documented and owed
  • Commerce: POS staff names resolve across auth pools, so SSO staff are named
  • Commerce: the order API spec expects shipment lines, status and label link
  • Commerce: the 3DS payment-door inventory classifies the POS Terminal door
  • Commerce: billing health specs expect the Terminal reader webhook events
  • Mobile: the self-host reference documents the app's build variables and push switches
  • Shipping: the self-host reference documents the Shippo and EasyPost variables
  • Accounting: the self-host reference documents the QuickBooks and Xero variables
  • Commerce: the media scan's corpus classifies the cloud printer and print job collections
  • Commerce: the media scan's corpus classifies the Terminal location and reader collections
  • Commerce: a read-only host rules block re-grants no write, so returns and webhooks read as denied
  • Shipping: server declarations load their handlers lazily, so boot never pulls next/cache
  • Commerce: the host-event picker order names commerce's order and return events
  • Legal: the subprocessor inventory declares 10.0.2.2 and the Epson ePOS namespace
  • Commerce: the app's camera prompts name the configured brand
  • Commerce: the customer display shows the tip just chosen and no tax before pricing
  • Commerce: the console surface registers managePos, so the register opens for its owner
  • Commerce: the manifest declares the order-status site component it registers
  • Commerce: register receipts go where the customer asked, and readers wait for live Terminal
  • Commerce: register card payments settle on the platform account, as §10.7 says
  • Commerce: refund a split-tender register sale card by card; void, not cancel, an open one
  • Commerce: removing a POS register works for merchants, on the server
  • AI: regenerate the palette for the return page's new summary
  • Commerce: one sale-print path, and print jobs carry minted ids
  • Commerce: product labels print in the page's own ink, with no fixed colors
  • Mobile: the app's generated paths carry the shipping plugin; drift names each file's own aliases
  • Shipping: a queued Shippo void settles from transaction_updated
  • Shipping: brand name from config, named quote ids, typed quote race
  • Shipping: shipping runs where commerce is on, without a requires edge
  • Documentation: Use Pirate Ship spells canceled the American way
  • Plugins: accounting takes catalog order 19 beside funnels, and carries v1.0.0-beta.230
  • Accounting: a Stripe Tax sale posts without the tax Aglyn remits
  • Commerce: a refund made in the Stripe Dashboard raises order.refunded
  • Workflows: the webhook transport is lazy-loaded through the plugin's own module
  • Workflows: a webhook step reaches only public addresses
  • Commerce: the carrier host declarations name no brand
  • Commerce: declare the carrier tracking hosts as no-request egress

Performance

  • Fonts: keep the font loader out of the published page's browser bundle
  • AI: the AI plugin registers its cards and pages lazily, 409 KB to 54 KB eager

Changed

  • Native: the Redirects plugin loads from the generated manifest
  • Mobile: remove the React Native app, its libs, CI job and tooling
  • Mobile: plugins drop their React Native src/mobile entries
  • Lists: media, site and campaign list declarations are pure lib modules
  • Lists: the list filter grammar is a pure module the native app can plan with

Documentation

  • Legal: codat is a listed subprocessor, avalara and taxjar act for the merchant
  • Mobile: every console area has a native owner and a parity row
  • Legal: merchant-connected fulfillment and tracking services are not subprocessors
  • Legal: v11 — the subprocessor list names twilio, shipping and tax vendors
  • Mobile: console areas are native; only the Besigner opens in an in-app web view
  • Email: auth emails are catalog sends through Resend; Firebase SMTP is a fallback
  • Email: platform mail on notify.aglyn.com, Aglyn marketing on news.aglyn.com
  • Legal: the subprocessor inventory carries the general rows
  • Analytics: the analytics shot shows "Last 14 days", and the guard sees Accounting
  • Fonts: what's new names the font picker and the font installer
  • Fonts: upload your own font, and WOFF2 in the media library
  • Fonts: the theme page describes the font picker, its cost badge and pairings
  • Fonts: the inventory says a published site no longer sends visitors to Google Fonts
  • Fonts: how a published site loads its theme fonts, and what's new
  • Mobile: the native apps carry the console's brand, type and polish bar
  • Mobile: choose the Firebase client per platform, with the options compared
  • Mobile: the native apps replace React Native as the only apps
  • Mobile: native app architecture for iOS, Android, macOS and Windows
  • Commerce: the register's payments, item picking, customer display and hardware
  • Commerce: a register return is listed under Returns, with its reason
  • Commerce: register operations guide and what's new
  • Sms: the three Twilio variables and the inbound webhook, in the env reference

Behind the scenes

  • Sites: the layout language's image line is prompt text, not a tenant image sink
  • Tooling: the Linear ceiling is read off the workspace again, AGL-3671
  • Console: the guided-start e2e harness reads screens and creates none
  • Console: the layout language's live eval is a known mention of the provider key
  • AI: the live sections eval and the emulated env name the provider key
  • AI: layout shots write the words an AI-built page shows, for a grep
  • AI: the live layout-language eval builds each brief's Contact page too
  • Pricing: re-measure the published page the view rate rests on, at beta.230
  • Tooling: the Linear ceiling is AGL-3663, read from the workspace; post-purchase package at beta.231
  • Tooling: the Linear ceiling is read off the workspace again, AGL-3665
  • AI: door tables, step minimums and goldens know the language page and frame
  • AI: layout shots render an AI-built Home inside the layout, whole
  • Tooling: the Linear ceiling is read off the workspace again, AGL-3664
  • Tooling: the Linear ceiling is AGL-3663, read from the workspace
  • AI: the prompt-cache ledger carries the insight rule on a site's published state
  • AI: a live eval designs six guided starts' pages and frames in the layout language
  • wip(ai): a site's and a build's page and layout units are designed in the layout language
  • wip(ai): the layout frame typechecks; heading order, item budget and filler settles
  • wip(ai): compact layout language checkpoint before restart
  • AI: render-layout-shots draws a site layout as a visitor sees it
  • AI: the live section eval measures any section writer, five briefs, every figure
  • Sites: a hung font origin renders in the sized fallbacks, naming no Google
  • Tooling: the Linear ceiling is AGL-3659, read from the workspace
  • Fonts: the prepare route's refused token and verifier outage
  • Fonts: the fonts plugin's console budget, and the AI page audit re-recorded
  • Fonts: the console specs know the Fonts switch and the font zone
  • Tooling: the plugin-domain guard reads 'fonts' as the theme's own field
  • Mobile: the shell's UI tests sign in and open the site dashboard and switcher
  • Plugins: the workspace-locked plugins include email platforms
  • Mobile: the Kotlin config, API client, workspace, registry and deep-link cases
  • Tooling: test wiring counts Kotlin and Swift tests in a native project
  • Tooling: the native libraries are Nx projects but not npm packages
  • Commerce: the Terminal connection-token spec refuses with a coded token error
  • Tooling: the Linear ceiling is AGL-3656, read from the workspace
  • Console: the tax-return findings spec waits for the findings table it asserts
  • Console: the org Plugins page counts tax services and sales channels as locked on
  • Plugins: the workspace-locked plugins include tax services and sales channels
  • Tooling: plugin budgets measure eager bytes and run as a CI guard
  • Tooling: the Linear ceiling is AGL-3650, read from the workspace
  • Logic: re-baseline the logic plugin's bundle budget for AGL-3603's growth
  • Mobile: EAS build profiles for the Aglyn app
  • Commerce: register modifiers are a proven-pure module the app may reach
  • Commerce: a scanner's pace is the spec's clock, not the test machine's
  • Console: the Plugins page counts Shipping among the locked-on plugins
  • Commerce: the 80mm receipt's black-on-white stylesheet is a recorded color site
  • Releases: the sms plugin carries v1.0.0-beta.230
  • Accounting: a mocked-HTTP spec for every QuickBooks and Xero call
  • Tooling: the charge-shape guard lets a listed file read a connected account
  • Tooling: the Linear ceiling is AGL-3645, read from the workspace
  • Commerce: the stock-writer sweep names returns as transactional
  • Commerce: declare the returns collection, named where the sweep reads it
  • Releases: the sms plugin carries v1.0.0-beta.229

Share this article

The Aglyn Team

We're building the open web platform. Follow along as we ship — and tell us what you need.

Start building on Aglyn.

Free to start — design your first page and publish in minutes.