2026-10-22
Changed
experimental_useDataTablecells can return a Fragment to show several items, as well as an array.
2026-10-21
Added
- Added
ConfigSchema.attioActivity(),OutcomeSchema.attioActivity()andOutcomeValue.attioActivity(...)for workflow block config and outcomes that hold an activity, such as a call or meeting type. Pick one in the configurator withAttioActivityInput, and narrow an outcome to one activity with.activity({slug}). - Added
ConfigSchema.attioActivityRecord(),OutcomeSchema.attioActivityRecord()andOutcomeValue.attioActivityRecord(...)for workflow block config and outcomes that hold an activity record. Bind one or many from a variable withAttioActivityRecordInput, limited to the activities inactivitySlug, and narrow an outcome to one activity with.activity({slug}). - Added
experimental_useDataTable, a virtualized data table. Pass it your rows and columns and render theDataTableit returns. Cells can show text, numbers, dates and SDK components such asBadge,LinkandButton, columns sort, and rows can be selected.
2026-10-15
Changed
Widget.TextWidgetnow acceptsWidget.Decorationand rejects a bareBadge.
Fixed
- Fixed
DescriptionListerror messages referring to a component that doesn’t exist. - Fixed
Divideroverhanging the content on app pages and record tabs. - Fixed new apps failing
lintandformat:checkon generated GraphQL types. - Fixed
Chart.Funnelclipping its labels when it scrolls. - Fixed
Chart.LineandChart.Bary-axes not ending on a round number. - Fixed
fetchin server functions ignoringsignal. Aborting the signal, for example withAbortSignal.timeout, now rejects with the signal’s reason and cancels the request.
2026-10-02
Changed
- Settings pages can now render any component from
attio/client, such asStack,TypographyorTable, alongside the components returned bySettings.useForm. The regularuseForm,Button,EmptyStateandLoadingStateare not supported on settings pages: linting flags them,attio buildfails, and they do not render. - New apps use ESLint v10. The lint rules in the default app template are unchanged, plus the
rules ESLint v10 adds to its recommended set:
no-unassigned-vars,no-useless-assignmentandpreserve-caught-error.
2026-09-22
2026-09-21
Added
Table.Cellnow acceptsButtoncomponents. A cell that contains buttons must contain only buttons. A single button renders inline; two or more collapse into a menu on the cell, where picking an action runs that button’sonClick.
2026-09-14
Added
- Added pages.
Extensions.definePagedefines a full page of your app, default-exported fromsrc/app/pages/<slug>/page.tsx. Pages are listed under Apps in the workspace sidebar and served at/{workspaceSlug}/apps/{appSlug}/<slug>. - Added record tabs.
Extensions.defineExtension({type: "record-tab", ...})renders a React component as a tab on the record pages of the objects you choose. - Added navigation.
Destinationsbuilds a place inside Attio to point the user at: one of your app’s pages, a record (optionally on a given tab) or your app’s settings page.navigatetakes the user there andAttioLinkrenders a link to it. - Added
Chart, withChart.Bar,Chart.Line,Chart.Pie,Chart.Metric,Chart.FunnelandChart.Loading. - Added the layout components
Card,Grid,StackandEmptyState.
2026-09-10
Fixed
- Fixed
BadgeandStatusBadgestretching to the full width of their container when placed directly inside aSection. - Fixed
Badgerendering as plain text inside dialogs. It now renders as a badge anywhereStatusBadgedoes.
Changed
- The default app template no longer includes Biome. Newly created apps lint with ESLint
(
eslint.config.js, replacingeslint.attio.config.js) and format with Prettier.
2026-09-08
Changed
- Production builds (
attio buildandattio version create) now minify dependency code fromnode_modulesand build it withprocess.env.NODE_ENVset to"production", so dev-only branches in dependencies are dropped. This shrinks the uploaded bundle. Your own application code is left unminified, andattio devis unchanged.
2026-09-03
Added
- Added
ConfigSchema.record(...)for config that holds any number of keys under a single value schema, like a TypeScriptRecord<string, TValue>.
2026-08-24
Added
- Added linting that flags components imported from
attio/clientinsideSettings.defineWorkspacePagecallbacks, where components returned bySettings.useFormmust be used instead.
Fixed
- Fixed a type error when binding
CollectionInputto an optional array (ConfigSchema.array(...).optional()). - Fixed dev server and bundling issues on
Windowsoperating system
2026-08-11
The App SDK is stable.
attio and create-attio were previously published as dated
0.0.1-experimental.<date> builds. From 1.0.0 they follow
semantic versioning, and are always released together at the
same version.What stable means
- Everything exported from
attio,attio/clientandattio/serverwill not change incompatibly within the 1.x line unless marked asexperimentalordeprecated. Breaking changes require a new major version. - Additive changes ship as minor versions and fixes ship as patches, so
^1.0.0picks up both. - Individual APIs that are still taking shape are marked as experimental in their documentation and
carry an
Experimental_prefix. They are excluded from the guarantee above and can change or be removed in a minor release. Apps submitted for review must not use them.
What you can build
- Extensions: record actions, bulk record actions, record widgets, object actions and call recording text actions.
- Workflow blocks: triggers and steps that appear in Attio’s workflow builder, each with its own configurator UI.
- Workspace settings: a settings schema and a settings page for your app.
- Forms and a component library for extension UI.
- Queries against Attio data, server functions, inbound webhooks, connections to external services and a key-value store.