Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This article answers common questions about Fabric Apps.
General
What is Fabric Apps?
Fabric Apps is a backend platform that helps TypeScript developers build and deploy data-driven applications faster. You define data models using TypeScript decorators, and Fabric Apps generates GraphQL APIs, database schemas, and type-safe clients automatically.
Who should use Fabric Apps?
Fabric Apps is ideal for developers building:
- Internal tools and dashboards
- Data exploration and visualization applications
- Rapid prototypes
- AI and agent applications that need persistent state
What databases are supported?
Fabric Apps supports SQL Server – Default for Fabric deployments.
Can I use Fabric Apps with existing databases?
No. Fabric Apps manages the database schema based on your TypeScript data models. You can't point it at an existing database with a predefined schema.
Development
How do I install CLI?
You can install Rayfin CLI with npm. Since it's an npm package you can update with npm update.
npm i @microsoft/rayfin-cli
Can I use Fabric Apps without TypeScript?
No. Data models must be defined using TypeScript decorators. The frontend application can use JavaScript, but the backend requires TypeScript for model definitions.
What frontend frameworks are supported?
Fabric Apps works with any frontend framework that can make HTTP requests:
- React
- Vue
- Angular
- Svelte
- Vanilla JavaScript/TypeScript
The client SDK provides type-safe APIs for all frameworks.
Authentication
What authentication methods are supported?
| Environment | Supported methods |
|---|---|
| Local frontend targeting Fabric | Microsoft Entra sign-in through the Fabric broker or delegated token exchange. |
| Local backend | Email and password for development. |
| Deployed to Fabric | Microsoft Entra sign-in through Fabric popup/iframe handoff, direct delegated token exchange, or an external parent host. |
Note
Email and password authentication doesn't work after deploying to Fabric. You can't deploy an app to Fabric unless authentication is enabled.
Can I use custom authentication providers?
Fabric Apps doesn't support arbitrary identity providers. An application that already has a delegated Microsoft Entra token can use signInWithEntraToken() in a browser or Node.js. This method provides another Entra sign-in path, not a custom provider.
Enable services.auth.fabric.externalEntraExchange, and use a delegated token for the deployment's Fabric/Power BI audience with Item.Execute.All, issued in the item's owning tenant. The user also needs Execute permission on the app item. This exchange doesn't support app-only service principal tokens. Your identity library handles token acquisition and consent.
For server-side integrations, use separate memory-only sessions per user and never share a mutable authenticated client between users. See Sign in with an existing Microsoft Entra token.
Can an external portal embed and sign in my app?
Yes. The parent can use createEmbedHost() from @microsoft/rayfin-embed-host with a delegated Entra token and an exact origin allow list. Enable external Entra exchange and satisfy the same token and item permission prerequisites. Register the host before loading the iframe, and await initEmbeddedAuth() in the iframe before restoring a stored user.
The host validates the iframe origin and return origin and passes a single-use handoff code, not the parent's Entra token. Dispose of the host when removing the iframe. See Embed in an external parent portal.
Deployment
Can I deploy an app without authentication enabled?
No. Fabric requires fabric authentication to be enabled before you deploy a Fabric App.
Can I deploy to multiple environments (dev, staging, production)?
You can manually manage separate Fabric workspaces and deploy to different items.
How long does deployment take?
Initial deployment typically takes 2-5 minutes. Subsequent deployments with npx rayfin up staticapp deploy (static content only) take 30-60 seconds.
Can I roll back a deployment?
Redeploy the previous version by checking out the prior git commit and running npx rayfin up.
How do I debug deployment failures?
- Build errors — Run
npm run buildbefore deploying. The most common deployment failure is a missing production build. After the build succeeds, runnpx rayfin up. - Capacity or permission errors — Verify that your workspace has Fabric capacity assigned and that you have permission to create or modify items in the workspace.
- Database schema errors — If the error occurs while applying the database schema, review the schema changes you made since the last successful deployment and resolve any conflicts.
Data models
Can I use composite primary keys?
No. Every entity must use a single UUID field named id as the primary key.
Are many-to-many relationships supported?
No. Use an explicit join entity with two @one() navigation decorators instead.
Can I write custom SQL queries?
Fabric Apps doesn't expose raw custom SQL through its generated API or connectors. Use the generated GraphQL client for app-owned data. To access an existing lakehouse, warehouse, or SQL database in Fabric, add a connector and use its typed operations.
Performance and scale
What are the performance limits?
Performance depends on your Fabric capacity. Contact your Fabric administrator for capacity-specific limits.
Can I cache query results?
Yes. Implement client-side caching in your frontend application. The backend doesn't provide built-in caching.
How do I optimize query performance?
- Select only the fields you need
- Use pagination for large result sets
- Include related entity fields in a single query rather than making multiple requests
Security
How is data secured?
- Authentication is required by default (configurable per entity)
- Row-level security policies filter data based on JWT claims
- All communication uses HTTPS in Fabric deployments
Limitations
What are the current limitations?
- A standalone
count()isn't available on the fluent GraphQL client. Use numeric-fieldaggregate()andgroupBy(), or count records across all pages; one page's length isn't a matching-record total. - Many-to-many relationships aren't supported
- Composite primary keys aren't supported
- Custom authentication providers aren't supported
- Multiple environments management isn't available out of the box
- Workspace outbound access protection isn't supported at this time.
- Tenant-level and workspace-level private links aren't supported at this time.
- Application lifecycle management (ALM) isn't supported at this time.
See Troubleshoot Fabric Apps for workarounds.
Can I export my data?
Yes. Use the generated data client to read app-owned data, or use a connector to read from a supported Fabric data item. Select only the fields you need, page through large result sets, and generate the export in your application.