Simplify development with a lightweight SDK that generates full web apps from your backend code.
Call Compose's UI methods alongside your business logic, and Compose will automatically generate UIs in your browser and wire them up to your backend logic.
EXAMPLE
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))
}
})
Call simple input methods that return validated outputs. Compose automatically handles the network requests, UI rendering, data validation, and more.
EXAMPLE
import { Compose } from "@composehq/sdk";
import { db } from "../db";
const usersDashboard = new Compose.App({
name: "Users Dashboard",
handler: async ({ page, ui }) => {
page.modal(() => ui.form("new-user-form",
[
ui.textInput("name"),
ui.emailInput("email"),
], {
onSubmit: (form) => {
db.users.insert(form.name, form.email);
page.toast("User created!", { appearance: "success" });
},
clearOnSubmit: true,
}
))
}
})
Use AI copilots, shared functions, call other APIs, use loops and conditionals, and commit everything to your own version control.
EXAMPLE
import { Compose } from "@composehq/sdk";
import { s3 } from "@aws-sdk"
import OpenAI from "openai";
import { db, isValidJSON } from "../utils";
const dataLabelingApp = new Compose.App({
name: "Data Labeling Tool",
handler: async ({ page, ui }) => {
const docs = await db.documents.selectAll();
const needsReview = docs.filter((d) => !d.reviewedAt);
const current = needsReview[0];
const file = await s3.getObject("my-bucket", current.fileId);
annotations = await OpenAI.chat.completions.create({ ... });
page.add(() => ui.row([
ui.pdf(file, { annotations }),
ui.stack([
ui.textArea("annotations-editor", {
initialValue: JSON.stringify(annotations, null, 2),
validate: (text) => {
if (!isValidJSON(text)) {
return "Please enter valid JSON";
}
},
onEnter: (text) => {
annotations = JSON.parse(text);
page.update();
}
}),
ui.button("save-to-database", {
onClick: async () => {
await db.documents.update(current.id, {
annotations,
reviewedAt: new Date()
});
page.toast("Annotations saved!", { appearance: "success" });
}
}
])
]))
}
})
Large companies dedicate entire teams to building these features. Compose gives them to you out-of-the-box.
Performant at scale
Sub 90ms latency. Tables with millions of rows. Large file uploads. And more...
Multipage apps
Scale easily from simple tools to complex multi-page applications.
Permissions and Authentication
Enforce roles to easily restrict apps to certain team members.
Beautiful by default
Mix-and-match over 40 modern UI components that are designed to look great together.
Audit logs and analytics
Monitor everything with built-in audit logs and in-depth usage analytics.
External sharing
Securely share apps by email with external users.
For indie hackers, solo developers, and founders just starting out.
For teams of all sizes. Every feature, unlimited users, dedicated support.