← All updates

CHANGELOG

v1.0.0-beta.223

An unfinished import can be resumed or discarded; list import ledgers expire. 231 changes in all: 70 new, 69 fixes, 5 performance, 20 changed, 15 docs and 52 behind the scenes.

The Aglyn Team · Oct 2026

Released to production on October 5, 2026 at 13:30 CDT. See every commit in this release on GitHub

The tree cut as v1.0.0-beta.222 never reached production, so its changes ship here.

New

  • Data: an unfinished import can be resumed or discarded; list import ledgers expire
  • Data: every import and export button and the hub show only what the person may do
  • Data: imports suggest and create referenced records; Data page names its dataset
  • Data: a resource sets its own default handling and matching; the review shows it
  • CRM: no CRM import or export on Free but the contacts and leads files
  • Sites: import and export submissions, bookings, redirects, events, do-not-contact
  • CRM: privacy settings export every contact and lead through the export dialog
  • CRM: leads, deals and tasks import and export; deals and tasks stop duplicating
  • Email: email topics travel in workspace packages, and what uses them follows
  • Commerce: gift cards import by issuing each card, confirmed by its total
  • Data: workspace packages and one Import & export hub with history and undo
  • Sites: a package import renders forms and emails side by side, data as a table
  • CRM: contacts and companies import and export every field; other CRMs' files map
  • Commerce: products, orders, promotions, gift cards and categories import and export
  • Email: list members and suppressions import/export with matching, consent, choices
  • Data: datasets import and export with field choice, matching and conflict choices
  • Sites: a package import shows each item's diff and asks how to handle it
  • Data: an import resolves lookup columns to records, and asks about the rest
  • Sites: pick what a site package carries, and see what is new or changed first
  • Data: export lets you choose the fields, remembers your choice, and arrives whole
  • Console: import and export open from any plugin and run against the transfer routes
  • Transfer ui: every import shows each match, conflict and warning and lets you pick
  • Data: imports run as resumable jobs with a dry run, a ledger and a 7-day undo
  • Plugins: a plugin declares what it can import and export
  • Data: one import/export core every surface will plug into
  • AI: assistance in the CRM sends the whole record only once the release flag is on
  • CRM: a deleted contact is nobody's reports-to; merge preview shows it
  • CRM: deals carry Salesforce's Opportunity Contact Roles
  • AI: drafted automations set a task's priority and a logged call's direction
  • AI: assistance in the CRM reads the whole record, under an open-ended disclosure
  • CRM: leads carry Salesforce's standard Lead fields, and converting hands them on
  • CRM: every Aglyn door and sequence fills in its own built-in lead source
  • CRM: tasks get Salesforce's status, priority, type, subject; calls get a direction
  • CRM: deals carry Salesforce's Opportunity fields; new pipelines get its stages
  • CRM: contacts carry Salesforce's standard Contact fields
  • CRM: companies carry Salesforce's Account fields
  • CRM: lead status is an editable picklist; leads keep the meaning
  • CRM: filter, report and share leads by Inbound/Outbound; filter contacts by source
  • CRM: every picklist ships Salesforce's standard values and takes the org's own
  • Sites: a new site is born with a real home page, header, footer, theme and SEO (AGL-3497) (#1201)
  • Billing: private images served through the CDN count toward bandwidth
  • Sites: a new site is born with a real home page, header, footer, theme and SEO
  • Media library: every upload optimized, and old media converges lazily
  • Bookings: a service may state its price as a label and book with no charge
  • SEO: every site icon size and the web app manifest derive from one upload
  • Bookings: a service may state its price as a label and book with no charge
  • Bookings: a service may ask the booker for a phone and the job address
  • Data: offer to make a record template a page again when it stops serving
  • AI: a plan may bind one page to a dataset as its record template
  • Data: set up record pages in Page Properties and preview them on the canvas
  • Outreach: an Opens column, and opens judged by where the fetch came from (AGL-3488) (#1196)
  • Billing: video, audio and file downloads count 1.6x toward bandwidth
  • Data: save a record template, and give a dataset its page addresses
  • Data: a record write, a template publish and a lockdown drop record pages
  • Data: record pages are linked by {{item.url}} and listed in sitemap and llms.txt
  • Data: a dataset record is served at /{base}/{address} from one template page
  • Pricing: every plan covers full-use cost + 30% after card fees
  • Media library: the library states storage used against the org-wide band
  • Organizations: staff take no seat, owner handoff invite, staff ask to upgrade
  • Plugins: every plugin that keeps a person erases its share, the CRM first and last
  • Screens: page groups, and nothing above a live page takes it off the site
  • Plugins: a plugin asks the plugin that keeps people for the person
  • Abuse: a link's path can be looked up in Web Risk, behind a switch left off
  • Plugins: a door asks the plugin that credits outcomes; it holds the campaign joins
  • Plugins: a plugin declares the artifact types it keeps, and an installer asks it
  • Console: the production canary raises an operator alert on a failed deploy
  • Operations: a five-minute render monitor fetches uncached pages from the console
  • Marketing site: a campaign visit rollup is readable by campaign scope only
  • Forms: a submission alert opens it and names its campaign
  • Tooling: a dry-run backfill files form leads under their form's campaigns

Fixed

  • CI: the promotion cadence check counts when production was quiet for days
  • CRM: an org owner can delete a lead a site holds
  • Data: every import and export asks its feature's plan and flag, like its own pages
  • Plugins: bookings, events and forms transfers lazy-load no library; lint green
  • Data: exported CSV cells can't run as spreadsheet formulas
  • Tooling: a JSON key written twice fails the build instead of vanishing
  • Data: main is green again after workspace packages
  • Data: anyone who can read a dataset can export it again
  • Sites: a site package import's undo snapshots expire a day after undo closes
  • Data: stale import jobs expire, a half-done undo finishes, presets name the ID once
  • Data: the transfer layer says where a dataset record's integrity fields are derived
  • Data: the transfer core is reached by its own path and names no brand literal
  • Tooling: the stale-spec-literals check pairs a short string's own quotes
  • Sites: site search falls back to the browser when no app router is mounted
  • Notifications: the site door announces the workspace it makes, and every new site (AGL-3491) (#1199)
  • Console: confirming three dialogs acts instead of reading as cancel
  • Forms: each card on a form's page saves what it shows, from its own header
  • Sites: the self-hosted font route states its lockdown exemption
  • Sites: the self-hosted font route states its lockdown exemption
  • Media library: a library file's Storage URL is served through the CDN
  • Sites: site search navigates with the client router instead of reloading
  • SEO: check each page as it publishes, and name keywords past five
  • Commerce: paid video and downloads served off the CDN count toward bandwidth
  • Console: any plan may name the one language its site is in
  • Media library: a serve is counted before its request ends, and a lost count is logged
  • Bookings: the slot listing is a page of whole days, and the widget shows all of them
  • Data: list values stored as lists, and a repeat with no rows publishes nothing
  • Plugins: erasers registered at boot are the ones the erasure runs
  • SEO: an image marked decorative is not missing a description
  • Data: record pages carry their own {{item.url}}, and the setup reads at a glance
  • Billing: the quota banner states storage on org pages too
  • Forms: a placed form renders the saved form's own label, message and styling
  • Billing: the staff discount guardrail rates the org as it bills
  • Notifications: the site door announces the workspace it makes, and every new site
  • Media library: any member may read the storage band, and a read-only lock allows it
  • Billing: one storage alert, against the workspace's pooled band
  • Billing: a coupon under full-use cost is a warning, judged on the charges it reaches
  • Bookings: the per-service availability reads get their composite index
  • Billing: the storage cap card states the allowance as the workspace's
  • Billing: storage is metered and warned on as the workspace's one band
  • Besigner: every save converts typed binding names to id tokens
  • Besigner: layout chrome draws site variables as the page does
  • Organizations: the upgrade-proposal card carries a help link, as help coverage requires
  • Billing: video and files served from origin count against the bandwidth band
  • Screens: publishing the placeholder home page makes it the owner's
  • Workflows: the run bands are held to the workspace's runs, not one site's
  • Billing: the full-use cost names stored data as the platform model does
  • Billing: quotes and discounts are rated against what a plan costs at full use
  • Besigner: the empty-document slot names the document it stands for
  • Console: the theme section lists what you have changed below the editor
  • Billing: the upgrade proposal email falls back to the configured brand name
  • Console: the interaction builder offers no step only an automation holds
  • Billing: price at nam5, in decimal GB, and a /v1 request as a function
  • Abuse: a Web Risk lookup that cannot reach the store reads unknown, not notFound
  • API: the /v1 root lists each resource once, and datasets only with the data plugin
  • Data: concurrent dataset-schema installs cannot cross the org's dataset cap
  • Console: the production build turns off Turbopack's build cache to fit 8 GB
  • Tooling: the client-site seed names its fixed ids through key functions
  • Sites: a page render awaits no network call without a real deadline
  • Sites: a page never waits on a theme font stylesheet past its deadline
  • Marketing site: the campaign touch and creditor read the campaign model from the plugin
  • Abuse: one fraud row per charge; a late Stripe signal joins it
  • Themes: every button color has a legible hover in both schemes
  • Documentation: the advertising consent sentence is back in the assist index
  • Marketing site: the campaign page opens on what it caused, then who it reached
  • Marketing site: the page touch shares the campaign-touch entry; no new device key
  • Workflows: a lead's task and activity are named by a platform-minted id
  • CRM: the lead door names its campaigns field when it writes one
  • Workflows: a stored filter no event can satisfy is a Skipped run with its reason

Performance

  • Media library: published images size themselves from the composed tree, no re-save
  • Media library: images say how big they render, and published URLs are versioned
  • Sites: a theme's Google fonts are served by the site, not linked
  • Sites: a published page ships its node map as a tree that states each id once
  • UI components: an entries block loads its search box only when search is on

Changed

  • Marketing site: a campaign's model is marketing's; the send math stays shared
  • Forms: the door's own words leave the core forms model
  • Forms: a flooded door's notices are the forms plugin's declaration
  • Workflows: the automation vocabulary moves to its plugin, behind step seams
  • Plugins: send names, the kill switch and site record counts come from owners
  • CRM: a captured person, their owner and their company are the CRM's
  • Data: the dataset model is the data plugin's own
  • Plugins: the CRM runs the automation steps that write its records
  • Forms: the form door is the forms plugin's route, keeping its own visitor gates
  • Inbox: the Inbox reads form submissions through the forms plugin's records
  • Outreach: a sequence reads its people through the record system's seams
  • Plugins: a plugin offers its automation recipes through a recipe seam
  • AI: the quota banner's AI credit warning is the AI plugin's band declaration
  • Plugins: a plugin declares the entity kinds a Besigner picker lists
  • Data: the dataset automation steps run in the data plugin
  • Plugins: commerce and forms serve their resources under a site on /v1
  • Data: a dataset schema's install, publish and update are the data plugin's
  • Plugins: the record system moves a delivered message's timeline entry
  • CRM: a record's next activity and a task's reminder are the CRM's model
  • Plugins: an alert words a conversion description through the credit seam

Documentation

  • CRM: the deals board, reports and contact record show today's stages and fields
  • Data: import and export docs show the wizard, the field picker and the new buttons
  • Data: the docs capture plan shoots the import wizard and the export dialog
  • Forms: a card's Save stays grayed out, in American spelling
  • CRM: custom fields names every picklist the CRM keeps
  • Media library: the media page shots state storage against the workspace band
  • Data: record pages across the datasets docs and the plugin reference
  • Data: a guide to service and location pages from a dataset
  • Pricing: the 1.6x media sentence is live on /pricing
  • Teams: owner handoff, staff seats, and building a site for a client
  • Media library: the Media page shots show the Library card's two tabs
  • Build: record what took aglyn.com/press under 500 KiB
  • Marketing site: the campaign page opens on what it caused, with who it reached under it
  • Marketing site: campaign credit without labels, utm_campaign labels, reach, Inbox links
  • Workflows: transactional replies, merge tags, New lead and what a filter runs

Behind the scenes

  • Releases: beta.222 carries main through 055f270990
  • Platform: the self-host claims sweep reads beta.222's media line as media
  • Releases: beta.222 carries main through fac6bc004b
  • Releases: beta.222 carries main through f7dacb2548
  • Tests: the contacts bulk-bar spec exports the selection through the dialog
  • Tests: the CRM specs open Closed Won and fill a task's Subject
  • Tests: console and CRM suites read today's sections, filters, pickers and grids
  • Tooling: lib-boundaries refuses lazy-loading a library also imported statically
  • Security rules: rules deploy without their comments, so the source keeps its docs and room
  • Sites: the image-sink inventory declares the starter site's SEO image
  • Releases: beta.222 carries main through 6f659ac364
  • Releases: beta.222 changelog names the site search router fix
  • Releases: beta.222 carries main through 1e73e4c654
  • Releases: beta.222 changelog names raw Storage URLs served through the CDN
  • Releases: beta.222 changelog names the default site and new-site notices
  • Releases: beta.222 changelog names the site search fix
  • Notifications: read the canary guard from the shared workspace announcer
  • Releases: beta.222 changelog names the added fixes
  • Sites: the image-sink inventory names the font style and the SEO facts
  • AI: the palette knows the Image element's Sizes attribute
  • Linear: the issue ceiling is AGL-3501, read from Linear
  • Linear: the issue ceiling is AGL-3498, read from Linear
  • Data: the repo guards answer for record pages
  • Billing: the storage alert spec imports entitlements by package
  • Billing: the plan-card and batched-send specs read the cut bands
  • Pricing: the Figma frames state the 1.6× origin-media weight
  • Documentation: regenerate the Assist docs index for the storage copy
  • Console: the automation-step fakes take the run meter's transaction and batch
  • Pricing: the Figma frames carry every moved figure
  • Tooling: the Linear ceiling reads AGL-3478, read from the workspace
  • Outreach: the emulator spec's erasure request carries the erasure's time
  • Billing: the pricing page caught up with the nam5 and decimal-GB figures
  • Tooling: raise the Linear id ceiling to AGL-3463, read from the workspace
  • Console: the outbox drain spec ages a pending entry from before the drain started
  • Site runtime: the door scan's control names the contract door, not a count
  • Releases: beta.223 carries main through 210311aa2a
  • Releases: beta.223 carries main through 3bbc6fcada
  • Releases: beta.223 carries main through d412ab9e32
  • Platform: the self-host sweep reads the production canary as operator tooling
  • Releases: beta.223 carries main through c278e4be2f
  • Releases: beta.223 carries main through 89076a89bb
  • Monitoring: read production after every tenant/console deploy and roll back a red one
  • Security rules: the deploy artifact carries the campaign visit reports rule
  • Sites: the production smoke renders a client-shaped site under a route budget
  • Dependencies: bump the dev-minor-patch group across 1 directory with 4 updates
  • Tooling: actions.ts no longer trips domain-exports:workflows; prune the rule
  • AI: the Welcome a new lead eval case and org-hub e2e follow the recipe to New lead
  • Workflows: a form-fill reply leaves without List-Unsubscribe, a mailing with it
  • AGL 3461: wip — paused mid-work (second wip: specs + typecheck were green)
  • AGL 3458: wip — paused mid-work (workflows-side spec move in progress)
  • AGL 3458: wip — form leads in campaigns, lead-aware CRM steps, merge tags, filters
  • AGL 3461: wip — page touch, declared utm labels, campaign visits, inbox links

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.