21torr/storyblok
API helpers and infrastructure for working with Storyblok from Symfony, simplifying content delivery and management.
Architecture fit
config/storyblok.php, no facade, no package auto-discovery, no Artisan commands. Integration is via Symfony bundle registration, the DI container, tagged services, console commands, and event subscribers.ContentApi/ManagementApi services in favor of per-space "adapters" (AbstractStoryblokAdapter). That is a better architecture for multi-space/multi-locale setups, but it also means there is no simple container-global entry point to reach for — you configure and inject an adapter.NumberField, RichTextField, AssetField, LinkField, MarkdownField, DateTimeField, ChoiceField, FolderData, AssetData) with validation and hydration settings, plus ContentApi, ManagementApi, an asset proxy with signed-URL support, and a definitions-sync command wired into app deploy hooks. That is squarely "editorial content modeling in code," which is the expensive part to build yourself.Integration feasibility
Technical risk
DateTimeField parsing in 3.21.4 and 5.2.9). Good for stability, but it doubles the surface you must track and implies a long tail of consumers on 3.x.minValue, steps <= 0 division by zero, float rounding, default normalization), slug trailing slashes, asset metadata shape on story translation, missing service resets. Individually small; collectively a sign of a young, actively-churning validation layer. Budget for routine upgrade triage.cv query param handling, redirect avoidance via sorted query params, folder endpoints moved from Management to Content API, asset URL parsing extracted into a dedicated service in 5.2.0. Each is a compatibility break waiting to happen if Storyblok changes payloads.Key questions
Stack fit
fullData link handling are relevant if you render links/richtext yourself.Migration path
ContentRepository::getPage(slug, locale) in your app and implement it with ContentApi + your component classes. Nothing else in the codebase should import Storyblok namespaces. This is the single most important decision for reversibility.StoryblokDefinitionsSyncedEvent for post-deploy hooks.ManagementApi::updateStory() JSON-string deprecation in 5.2.5, folder methods deprecated in 5.2.0).Compatibility
cv passing, folder endpoints, updateStory() argument shape. Align to the new forms immediately, since the old ones will be removed in a major.Sequencing
Maintenance
Support
Scaling
cv on single-story fetches to avoid redirects, sorted query params to avoid redirects, and fetchFoldersInPath()/fetchFolderTitleMap() on the faster Content API endpoints instead of Management API.Failure modes
allowMissingData, allowLinksOpeningInNewWindow, allow_target_blank, allow_multiline, inline_label, useDescriptionAsAlt. Exercise these deliberately rather than discovering them in production.StoryblokDefinitionsSyncedEvent — but only if CI enforces it.DateTimeField UTC parsing was only fixed in 3.21.4/5.2.9. Audit existing content timestamps — anything published before that date may be off.steps <= 0, float rounding, negative minValue, default normalization — all patched recently. If editorial forms use number fields heavily, add integration tests.ContentApi and StoryblokIdSlugMapper. Relevant for Messenger/RoadRunner-style workers.Ramp-up
21torr-docs.pages.dev) is off-repo and thin in the README. Plan to write your own internal component-authoring guide; the changelog is the de facto behavioral spec for field settings.How can I help you explore Laravel packages today?