App Builder
NewTurn your backend into a usable app — no second codebase. Admins compose pages from 27 configurable block types (tables, wizard forms, kanban, charts, tabs, modals, reports, and more) with click-to-select reactivity between blocks, and every role uses those pages as their daily workspace, all governed by the permissions you already have.
An Internal Tool Builder, Built In
Pages are rows of data-bound blocks — the builder and the end-user view are the same components, not two apps.
Most teams end up writing a separate admin app on top of their backend. Baasix removes that step. Admins add pages to the navigation menu and fill each one with blocks — a table over your orders collection, a kanban grouped by status, a form that creates records, a chart that aggregates on the server. Configuration is stored in the database (in the baasix_Page and baasix_Block system collections), so it is versionable, exportable, and editable through the UI, the SDK, or AI. Non-admin roles see only the pages they are allowed to read; admins get an in-place “Editing” toggle to add, configure, move, and delete blocks live on the page.
- 27 block types: tables, forms, kanban, calendar, charts, cards, maps (Leaflet or Google), geocharts, feeds, media, timelines, progress gauges, repeaters, reports, tabs, containers, modals, rich text, inputs, and more
- In-place WYSIWYG editing — the builder and the rendered app are the same components
- Every data block binds to a collection and rides your existing RBAC and row-level conditions
- 12-column grid that collapses to a clean stacked layout on mobile
- Public pages for forms and dashboards reachable without login (with optional human-check)
- Cross-block reactivity: clicking a row/card/event drives sibling details, charts and forms — plus filter and input blocks
- Nested layout with tabs, collapsible containers, and action-opened modals
- Server-side config validation on every save — no broken pages
Compose Pages from Blocks
Pick a block, bind it to a collection, drop it on the grid. That's a page.
Each block carries a JSON config describing what it shows — columns, fields, group-by, aggregation, filters, row actions — and a position on the 12-column grid. Filters everywhere use the same items-API filter DSL you already know from permissions and queries.
// A page is rows of blocks; blocks bind to collections.
// Create one over the SDK (or build it visually in the UI editor):
const page = await baasix.items('baasix_Page').create({
name: 'Operations', slug: 'operations', icon: 'gauge',
})
await baasix.items('baasix_Block').create({
page_Id: page.id,
type: 'table',
collection: 'orders',
position: { row: 0, col: 0, span: 8 },
config: {
columns: [{ field: 'id' }, { field: 'customer' }, { field: 'total' }],
filter: { status: { eq: 'open' } },
actions: { create: true, edit: true, view: true },
},
})
// Renders at /pages/?slug=operations — public pages at /p/?slug=...Why Build Apps in Baasix?
You could ship a separate admin app. Here's the difference.
✓ With Baasix
- Pages and blocks bind directly to your collections and schema
- One permission system governs data, pages, and blocks
- In-place editing — no separate builder app to keep in sync
- Config lives in the database: exportable, importable, AI-editable
- Public form pages, dashboards, and role homepages out of the box
✗ Traditional Approach
- Hand-build a second app and wire every screen to the API
- Re-implement auth and access checks in the admin app
- Maintain builder and renderer as two diverging codebases
- Hardcode layouts that can only change with a deploy
- Build form handling, rate limiting, and dashboards yourself
A Block for Every View
Tables & Wizard Forms
Data grids with filters, sorting, inline edit, bulk actions and row actions; forms with multi-step wizards, conditional fields, and widgets like ratings, sliders and signature pads.
Kanban & Calendar
Drag-to-update kanban boards grouped by a field, and calendars mapped to date fields with month/week/day views.
Charts, Stats & Reports
Nine chart types with server-side aggregation, progress bars and radial gauges vs targets, and report tables over aggregate/group-by queries with CSV export.
Maps & Geocharts
Leaflet or Google Maps with clustered markers and popups, plus choropleth world geocharts that shade countries by an aggregated value.
Reactivity & Master-Detail
Clicking a row, card, event or marker drives sibling blocks — details, forms, charts — via record sources and $selection filters; filter and input blocks refine everything else.
Layout, Content & More
Tabs, collapsible containers and modals for structure; card lists, media galleries, realtime feeds, timelines, repeaters, rich text (lexical), markdown, buttons, iframes, uploads and a code viewer.
What You Can Build
From a quick internal dashboard to a full role-based workspace.
Internal Admin Tools
Ops dashboards, CRM-style record views, and back-office workflows over your existing collections — no separate app to maintain.
Role-Based Workspaces
Give each role its own homepage and curated menu. Support sees tickets, sales sees the pipeline, all from the same backend.
Public Forms & Portals
Contact forms, intake flows, and public dashboards on unauthenticated pages, with rate limiting and an optional human-check.
Data Apps & Reports
Charts, geocharts, kanban and calendars that aggregate live data — built and tweaked in minutes by a non-developer admin.
Portable & AI-Ready
Move apps between instances, and let AI assemble them for you.
Export any set of pages as a self-contained page bundle (pages + blocks + the collections they need) and import it on another instance with a validation preview that flags missing collections, slug conflicts, and unresolved references. Because the whole thing is plain config, AI assistants can build pages for you: the MCP server exposes dedicated page/block tools plus a live block-config reference, so you can ask Claude or Copilot to “build an orders dashboard with a table and a status chart” and get a working, validated page.
- Page bundle export/import with a dry-run validation report (missing collections, slug conflicts)
- MCP page-builder tools: create/update pages and blocks from natural language
- Live block-config reference resource so AI generates valid configs
- Build over the SDK with the generic items() API — no special client needed
App Builder FAQ
Who can build and edit pages?
Only administrators see the in-place UI editor and can create, update, or delete pages and blocks. Other roles get read-only access governed by baasix_Permission — the sidebar menu is simply "the pages this role is allowed to read".
Do blocks bypass my permissions?
No. Every data block goes through the same collection permissions and row-level conditions as any other API request. A block over a collection a role cannot read renders an empty/error state — it never leaks data.
Is this a drag-and-drop canvas like Appsmith?
It is a block-based grid, not a free-form canvas. Pages are rows of blocks on a 12-column grid (nestable inside tabs, containers and modals) that collapses to a stacked layout on mobile — simpler to reason about, and it maps cleanly onto your schema and permissions.
Can blocks react to each other?
Yes. Clicking a table row, card, calendar event or map marker publishes that record as a selection; sibling blocks follow it through a record source or $selection filter placeholders — no expression language needed. Input blocks add ad-hoc text/select/date/toggle controls that drive any block’s filters.
How do I move an app between environments?
Export a page bundle (pages + blocks + required collection names) as JSON and import it on the target instance. The importer runs a dry-run first, reporting missing collections, missing fields, and slug conflicts so you can resolve them before writing.
Can AI build pages for me?
Yes. The MCP server exposes baasix_create_page, baasix_create_block, baasix_validate_block_config and related tools, plus a block-config reference resource, so AI assistants can assemble and validate pages from a natural-language request.
Ready to build faster?
Join developers who are shipping production-ready backends in hours, not weeks.