Introduction
What's a Surface?
A Surface is a place in your app where you allow users to add their own Features. Think of it as drawing an outline in your app and saying, "You can add features here."
Users can't put Features anywhere they want. You choose the places where it makes sense for them to customise your app, and they choose what to build there.
What could a Surface look like?
You might have a Custom Pages Surface where users can add their own pages to your app. They could build a report, a calendar, or a custom view of their projects, with your app providing navigation between those pages.
Or you might set aside a section of your sidebar for small widgets. Users could add a task summary or a list of things that need their attention, without changing the rest of the page.
These are just examples. A Surface doesn't come with a fixed layout. Your app controls how Features are displayed, so you can choose a location that fits the way people already use your product.
You choose what Features can do there
Each Surface has its own capabilities: the data its Features can read and the actions they can take in your app. You provide these as part of the integration.
For example, a Surface with a capability for reading projects could support a project report. To let users update projects from that report, you'd also need to provide a capability for making those changes.
A Surface can have many Features. You don't need to create a new Surface for each report or widget someone builds; Features on the same Surface use the same set of capabilities.
Start with one Surface
We recommend keeping your first integration simple. Choose one place in your app, add a Surface, and give it a few read-only capabilities. You don't need to decide everywhere Rough might fit before trying it out.
Then build a few test Features yourself. For example, if you've provided a capability that reads projects, try asking for a project list and then a report that groups them by status. Check that the preview works with your sample data, and that the published Feature shows the right data in your app.
This gives you a chance to check your capabilities are working correctly and get a feel for how to get useful results from AI-generated Features. You can add more capabilities once you're happy with the basics. There's no need to support changes to your app's data on day one.
When to add another Surface
Add another Surface when you want users to build Features in another part of your app, with a separate list of Features or a different set of capabilities.
For example, your Custom Pages Surface might offer project and task data for reports, while your sidebar Surface only offers a summary of the current user's tasks. Each location can display its own Features without mixing full-page reports into the sidebar.
You can work towards that gradually. Start with one Surface, try building things, and use what you learn to decide what to add next.
To set up your first Surface, follow the getting started guide, or set up Rough with your coding agent.