v1.0.0-beta.219
Released to production on October 1, 2026 at 08:54 CDT. See every commit in this release on GitHub
New
- Data: a site's datasets are the data plugin's section of the backup; export and restore ask it
- Billing: usage notices step through 75, 80, 90 and 100 percent, each once
- Forms: a form's publish, its contract check and its live-page drop are the forms plugin's
- Copy: screens are called pages everywhere a person reads the word
- Plugins: a plugin declares the meters it adds to the cost model and the utilization table
- Console: a plugin keeps its own old addresses answering; the build config names none
- Plugins: a plugin declares the site collections a backup carries; export and restore walk them
- Besigner: a plugin's site documents open in the console's one plugin-document editor, and publish through their plugin
- Plugins: a plugin answers which of its records depend on a thing; "Used by" asks
- Plugins: a plugin declares what each plan includes of its own keys
- Marketplace: the template gallery and library ask the marketplace what it offers
- Templates: an installed template is labeled in its installer's own words
- Tooling: a plugin reaching into another plugin's storage or pages is refused
- SEO: a plugin declares the sitemap its own pages fill; products leave the route
- Plugins: a plugin declares the kinds the site create route writes to its storage
- Interactions: a page's interactions are the platform's; plugins declare their steps
- Data: a bound form files its records through a contract, not through core
- CRM: the digest, task reminders and capture webhook are the CRM's machine routes
- Outreach: a mailbox's daily cap can be set up to 100
- Workflows: a site's workflows, webhooks and actions are read through its indexes
- Plugins: a plugin that earns through the platform answers for its take on revenue
- Data: a published page asks the plugin that keeps the rows what its repeats render
- CRM: the CRM publishes its pipelines as a record index; the AI asks it for stages
- Plugins: a plugin lists and reads another's records through the owner's index
- Plugins: a plugin that sells through the platform answers for its tax return sales
- SEO: every site owner gets the SEO check; AI SEO only proposes the fixes
- Payments: the plugins that take money ask a payment-provider contract
- Analytics: a site's analytics tag mounts through its vendor's adapter, not core
- Marketplace: the staff overview's purchase feed and refund queue are the plugin's
- Email: a self-host can bring its own mail sender, behind a provider contract
- Plugins: a video host's player is declared by the plugin that plays it
- Plugins: a workspace erasure takes plugins' records through declared seams
- CRM: share leads, contacts, companies and deals with other sites, by hand or rule
- Plugins: the realm loader joins against the store the distributing plugin declares
- Marketplace: the Plugins pages ask the marketplace what it installed
- Datasets: forms and automations store dataset values typed, refusing bad ones
- Sequences: enroll someone at a later step when they had the earlier ones by hand
- Themes: a stock Material UI built-in theme; the default is named as the platform's
Fixed
- Sites: an upgrade brings a site past the traffic ceiling back the same month
- Besigner: "Learn more" under an element finds its category's section from the catalog's own headings
- Console: every chip list beside typed fields commits only when it changes
- Forms: a multi-select is drawn only when something it draws changes
- Besigner: typing in the Properties dialog no longer exceeds React's update depth
- Tooling: the emulator sweep runs the Data plugin's scoped-sharing spec
- AI: a third-party player is built only where the brief asks and the plan lists it
- Billing: a limit-reached notice is sent once per crossing, and its body says what the limit is on
- CRM: the import's company ids and the contact writer's stay on the id-minting list
- Web: every boundary and an uncaught import recover a stale build; 50-frame stacks
- CRM: the capture batch lives beside the contact writer, not in a new core file
- Tooling: the plugin-domain guard reads a type named in an import as a use
- Console: a tab recovers when a frozen background tab locks the Firestore cache
- CRM: deleting or removing a contact keeps the person's marketing refusal
- Outreach: typing a step's body no longer trips React's update-depth limit
- Accounts: signing in again from the session dialog never creates or swaps an account
- Signup: an account /signin bounced for consent gets its workspace on sign-up
- Accounts: staff hears about every new account exactly once, from any sign-up door
- CRM: a contacts import chunk reads once, not per row, and answers inside the limit
- Web: the client-error beacon labels what we recover from and drops what is not ours
- Outreach: a step test Google refuses for the account answers 4xx, not 502
- Outreach: a mailbox connect Google refuses for the account answers 4xx, not 502
- Monitoring: the journeys marker reads get a budget a cold Firestore connect fits
Changed
- Workflows: the workflow model leaves core; plugins declare the events they emit
- Bookings: a booking asks the tenant's tax rule for its service rate; it reads no store settings
- CRM: the CRM's seed fixtures and backfill planner live in the plugin
- Plugins: orders, bookings and submissions are linked at their owners' addresses
- Search: each plugin declares what console search finds; the palette names none
- CRM: the export is the CRM's route, and every workspace keeps its people file
- Commerce: the product editor, products hub and import dialog zones are declared by commerce
- CRM: lead conversion, the contact merge and the stage floor are the CRM's
- Plugins: a form, an action or an email design is linked at its owner's address
- CRM: the CRM describes and meters its own /v1 resources
- Besigner: a repeat's item tokens come from its source and the picker's entity fields, not from datasets
- Data: staff counts an org's capacities from their declarations, and the legacy dataset scan is gone
- Notifications: each plugin declares its notification categories and digests
- CRM: the CRM serves its own /v1 resources; the router finds them in a registry
- Email: each plugin declares the emails its sites send; the catalog is compiled
- Marketing site: a list's send time is the marketing plugin's; the AI asks for it as record facts
- Email: an unsubscribe link names the send it rides in; the meters stay
- Plugins: each plugin defines its own release flag, compiled into RELEASE_FLAGS
- Email: a merchant's list file is read in the email plugin; core bounds a CSV
- Console: plugin tab titles compile from the plugins' nav labels and rails
- CRM: the CRM asks the Emails plugin where a message and a sender live
- Platform: the signup's UTM parser and forwarder are named for the web's labels
- Sites: the host-event seam names a page's dispatch an interaction
- Sites: two roster readers stop borrowing the email plugin's word for a member
- Platform: the organization type names no CRM capture address
- Marketing site: the campaign batch rule leaves the mail rail, which names a tier
- Tooling: the provisioned-mailbox registry is named for what it records
- Console: product-updates consent is named as the platform's; the rail's stays
- AI: a job's drafts are owned by whoever registered their writer
- Plugins: the AI job drawer asks where a campaign or a product lives
- Payments: shopper and publisher no-payments copy lives in their plugins
- Console: the shell's floating dock is a console dock, not the AI assistant's
- Plugins: a plugin names its own activity target types, so core names no AI job
- Platform: docs search is the platform's, and names no assistant
- Platform: installed content is the platform's model, named for itself
- Platform: the rule for a node tree from elsewhere is named for what it guards
- Marketplace: who may see a listing is decided in the marketplace plugin
- Marketplace: the publisher agreement and its snapshots live in its plugin
Documentation
- Self-hosting: the webhook mail provider needs no rebuild, and promises no image
- Monitoring: the recovered-kinds rate policy and consoleFastCrons as a beat
Behind the scenes
- Besigner: the two production-registry typing specs get a CI-sized budget
- Outreach: the keystroke-burst spec has the time its isolated registry costs in CI
- Besigner: the file-save and unopened-draft sweeps read the plugin-document editor too
- Besigner: the refused-save sweep reads the plugin-document editor a form now opens in
- AI: the provider-cost sweep reads the AI meter where the cost model now takes it
- Sites: the AI palette's catalog line for an Image is declared as prompt text, not a sink
- Tooling: raise the Linear id ceiling to AGL-3436, read from the workspace
- Erasure: the credentials spec finds its plugin's report beside the required stand-ins
- Tooling: raise the Linear id ceiling to AGL-3428, read from the workspace
- Console: the CRM's sharing rules table is classified as a capped settings table
- Platform: the staff zone list names the staff overview's new zone
- Tooling: the platform's measurement of its own product is argued to stay in core
- Console: the marketplace registrar check reads boot declarations from their file
- Tooling: raise the Linear id ceiling to AGL-3426, read from the workspace
- Tooling: retire the converged bounced-account acquisition backfill
- Tooling: one-off backfill for the two accounts the consent bounce left unattributed
- Tooling: retire the converged suspended-flag backfill
Share this article
We're building the open web platform. Follow along as we ship — and tell us what you need.