Compose is the open-source SDK for building custom internal tools with just backend code.
import { Compose } from "@composehq/sdk";
import { db } from "./database";
export default new Compose.App({
name: "Create User",
handler: async ({ page, ui }) => {
page.add(() => ui.header("Create User"));
page.add(() =>
ui.form(
"create-user",
[
ui.emailInput("email"),
ui.selectBox("role", ["user", "manager", "admin"]),
ui.textArea("notes"),
],
{
onSubmit: (form) => db.insertUser(form.email, form.role, form.notes),
}
)
);
},
});
Build in your backend
Full type safety everywhere
Import internal functions and logic
Run in your browser, shareable with your team
Build anything with 50+ powerful UI primitives
Install and use the SDK in your codebase
Import your internal functions and logic
Use simple, type-safe SDK methods
import { Compose } from "@composehq/sdk";
import { db } from "./database";
export default new Compose.App({
name: "Create User",
handler: async ({ page, ui }) => {
page.add(() => ui.header("Create User"));
page.add(() =>
ui.form(
"create-user",
[
ui.emailInput("email"),
ui.selectBox("role", ["user", "manager", "admin"]),
ui.textArea("notes"),
],
{
onSubmit: (form) => db.insertUser(form.email, form.role, form.notes),
}
)
);
},
});
Use and share with your team
Build anything with 50+ powerful UI primitives
Responsive, beautiful UIs out of the box
Install and use the SDK in your codebase
Import your internal functions and logic
Use simple, type-safe SDK methods
import { Compose } from "@composehq/sdk";
import { db } from "./database";
export default new Compose.App({
name: "Create User",
handler: async ({ page, ui }) => {
page.add(() => ui.header("Create User"));
page.add(() =>
ui.form(
"create-user",
[
ui.emailInput("email"),
ui.selectBox("role", ["user", "manager", "admin"]),
ui.textArea("notes"),
],
{
onSubmit: (form) => db.insertUser(form.email, form.role, form.notes),
}
)
);
},
});
Use and share with your team
Build anything with 50+ powerful UI primitives
Create responsive, beautiful UIs out of the box
Delete your super auth token and admin-only API endpoints. The Compose SDK automates networking and authentication for you.
import { Compose } from "@composehq/sdk";
import { db } from "../db";
const usersDashboard = new Compose.App({
name: "Users Dashboard",
handler: async ({ page, ui }) => {
const users = await db.users.selectAll();
page.add(() => ui.table("users", users))
}
})
Use LLMs to generate internal tools in seconds inside your own IDE - integrations are available for Cursor, VSCode, and more.
Access to everything for one developer. Just start here!
Upgrade once you're ready to share apps with your team.
We work in the open. Join the Discord or read the source code.