Features
This document provides an overview of features supported by the Strapi CMS integration.
Overview
| Feature | Status | Notes |
|---|---|---|
| GraphQL API | ✅ | Primary API for all content operations |
| Content Localization | ✅ | Full multi-locale support |
| Dynamic Routing | ✅ | Regex-based slug matching for dynamic pages |
| Themes/Layouts | ✅ | Supported via OneColumn and TwoColumn templates |
| Media Management | ✅ | Via Strapi media library |
| SEO Metadata | ✅ | Supported via ComponentSeo |
| Field Mapping | ✅ | Supported via ComponentFieldMapping for custom labels |
| Table Configuration | ✅ | Supported via ComponentTable for data table setup |
| Pagination | ✅ | Supported via ComponentPagination |
| Cache Integration | ✅ | Full cache support for optimized performance |
| Code Generation | ✅ | TypeScript types and SDK generated from GraphQL schema via graphql-codegen |
| Type Safety | ✅ | Full TypeScript type safety from GraphQL schema |
| Permissions/Roles | ✅ | Role-based content access control |
| Survey Forms | ✅ | SurveyJS integration for dynamic forms |
| Organization List | ✅ | Multi-organization support |
| Login Page | ✅ | Customizable login page content |
| Not Found Page | ✅ | Customizable 404 page content |
| Live Preview | ❌ | Not supported |
| Live Updates | ❌ | Not supported |
Feature details
GraphQL API
GraphQL is the primary API for all content operations, providing type-safe queries, efficient data fetching, and automatic SDK generation.
For detailed information, see the GraphQL documentation.
Content Localization
Strapi supports multiple locales out of the box through its i18n plugin. The integration:
- Fetches content for the specified locale
- Supports locale fallback (if content is not available in the requested locale)
- Handles locale-specific slugs for pages
- Maintains locale context throughout the data flow
- Retrieves available locales via the
getLocalesoperation
Dynamic Routing
The integration supports dynamic routing with regex-based slug matching. This allows:
- Pages with dynamic segments like
/tickets/{.+}to be defined in Strapi - Matching URLs with dynamic IDs (e.g.,
/tickets/123) - Flexible URL patterns for various content types
The matching process works by fetching all pages for a locale and finding one whose slug matches the requested URL using a regex pattern.
Themes/Layouts
Page layouts are defined through Template content types:
- OneColumnTemplate - Single column layout with top, main, and bottom slots
- TwoColumnTemplate - Two column layout with top, left, right, and bottom slots
Templates can be extended with additional layout variants as needed.
Media Management
Media assets are managed through Strapi's built-in Media Library:
- Image optimization and responsive images
- Asset metadata (alt text, title, caption)
- Multiple format support
- Centralized media management
SEO Metadata
SEO metadata is managed through the ComponentSeo content type, which includes:
- Page title
- Meta description
- Keywords
- Open Graph image
- Additional SEO fields
Field Mapping
Field mapping allows customizing labels for API field values. This is useful for:
- Displaying user-friendly labels for enum values
- Localizing field labels
- Customizing table column headers
Implemented via ComponentFieldMapping and related content types.
Table Configuration
Table configuration allows defining which columns to display and how to display them. This is useful for:
- Data tables (invoices, orders, tickets, etc.)
- Customizable column visibility
- Sortable and filterable tables
Implemented via ComponentTable content type.
Pagination
Pagination is supported through the ComponentPagination content type, which allows:
- Configuring items per page
- Enabling/disabling pagination controls
- Custom pagination settings per block
Cache Integration
The integration uses the framework's cache module for:
- Caching page data
- Caching component data
- Cache invalidation on content updates
- Performance optimization
Cached entries are stringified and stored using {id}-{locale} keys to ensure uniqueness.
Code Generation
TypeScript types and SDK methods are automatically generated from GraphQL queries using graphql-codegen. For detailed information, see the GraphQL documentation.
Type Safety
Full TypeScript type safety is provided through generated types from the GraphQL schema, ensuring compile-time validation. For detailed information, see the GraphQL documentation.
Permissions/Roles
Role-based content access control is fully supported in the Strapi integration. The permissions field on Pages, Articles, and Navigation Items allows content editors to restrict access based on user roles.
Supported roles:
prospect- Maps toPROSPECTroleuser- Maps toORG_USERroleadmin- Maps toORG_ADMINrole
The roles are defined in Strapi via ComponentSeoUserRoles and mapped to the framework's authentication constants, enabling seamless integration with the frontend's access control system.
Survey Forms
The integration includes support for SurveyJS forms:
- Dynamic form definitions stored in Strapi
- Survey retrieval via
getSurveyoperation - Integration with the SurveyJS module for form rendering
Organization List
Multi-organization support is available through:
getOrganizationListoperation for retrieving organization data- Organization-specific content management
- Multi-tenant content capabilities
Login Page
Customizable login page content is supported via:
getLoginPageoperation for fetching login page content- Localized login page content
- Custom branding and messaging for the authentication flow
Not Found Page
Customizable 404 page content is supported via:
getNotFoundPageoperation for fetching 404 page content- Localized error page content
- Custom messaging for missing pages
Live Preview
Live Preview is not supported in the Strapi integration. Unlike the Contentful integration, Strapi does not provide native Live Preview capabilities. The LivePreviewProvider and useInspector hook exist in the codebase as no-op placeholders to maintain API compatibility with other CMS integrations.
Live Updates
Live updates are currently not supported. The integration does not provide real-time content synchronization when content is updated in Strapi. Content changes require a page refresh or cache invalidation to be visible.