Announcing the App SDK
Today, Attio is launching something very exciting: the App SDK. You can now build high-quality integrations that feel like a native part of Attio, in minutes.
This isn't an SDK in the traditional sense (a thin wrapper around a REST API) but something much bigger. It's a whole system to extend Attio and program it exactly to your needs. Through writing React apps with TypeScript, Attio's core web app is now directly moddable and extensible by third-parties.
The challenge
As a modern CRM, our challenge is vast. CRMs have a wider surface area than any other SaaS product. CRM is also well-established; our competitors have 20-year head starts. In this market, you cannot get away with linearly building dozens of integrations. You need to build thousands, exponentially.
And, in 2025, users don't just want to integrate with other products. They want to build their own. I now regularly get on calls with customers who walk me through a vibe-coded internal tool that would, merely two years ago, be an entire SaaS product. Building software is cheaper, and it's also democratized. Everyone wants to code, and now they can.
What we've built
Traditionally, you would solve your integration needs by hard-coding integrations and by providing external developers with a limited set of APIs. This is not the approach Attio has taken.
Instead, we've built something that means integrations are both easier to build and higher quality. You can spin up a new React app with our CLI, npm run dev and then use our design system to start hacking on Attio.
To make this concrete, let's look at part of our recent Linear integration, built with the App SDK.
Here, we wanted to ensure that customer requests in Linear have all the right context from the customer. For our users, Attio is the home of context. So, we built on top of the App SDK's call recording functionality and built UI to send quotes from customer calls right into Linear.
Each app has its own requirements and we let you call functions and compose components as you need. For Linear, we want to open a dialog with a form to submit a customer request. With prebuilt components, putting together the right form dialog takes minutes.
import type {App} from "attio/client"
import {showDialog} from "attio/client"
import {LogCustomerRequestDialog} from "./log-customer-request-dialog"
export const customerRequestTranscriptSelectionAction: App.CallRecording.Transcript.TextAction = {
id: "customer-request-transcript-selection-action",
label: "Log customer request",
onTrigger: async ({
transcript,
url,
}) => {
await showDialog({
title: "Log customer request",
Dialog: ({hideDialog}) => {
const quote = transcript
.map(({speaker, text}) => `> **${speaker}**: ${text}`)
.join("\\n> \\n")
return (
<LogCustomerRequestDialog
description={`## Transcript\\n${quote}\\n`}
attachmentUrl={url}
onDone={hideDialog}
/>
)
},
})
},
}
AI-driven development
Building is even easier with the time we've spent to make the App SDK AI-native.
Apps are built in React and TypeScript, the language of LLMs. Our default app template comes with pre-populated CLAUDE.md and AGENTS.md files. We provide an MCP for our docs so that agents can autonomously lookup APIs, no further instructions required.
All you need to do is prompt your app idea, hit enter, then wait.
Start building
We have already seen an overwhelmingly positive response to the alpha release of the App SDK. For integration builders, it's meant obtaining thousands of users. For app-building consultants, the SDK has solved meaningful business problems for their clients. For us internally, we've been able to deliver higher-quality integrations, quicker than we ever imagined.
Today, as we announce the SDK publicly, we're excited to see what else developers (and non-developers) will build.
→ Get started: attio.xyz/developers-ea
Husband. Father. Leader. Engineer. Creative. Recovering Half-Arser | ex-Monzo, ex-Couchbase
2wAmazing!!! 🤩 So excited to see this come to life. Well done team 👏👏👏