Storyblok Has a Free Headless CMS — Visual Editing Meets API-First Content Management
Most headless CMS platforms give you an API but take away the visual editing experience. Storyblok gives you both — a powerful REST API AND a real-time visual editor where you can see changes as you make them.
Why Storyblok Stands Out
- Visual Editor — drag-and-drop editing with real-time preview
- REST API + GraphQL — fetch content programmatically
- Component-based — build pages from reusable content blocks
- Multi-language — built-in internationalization
- Asset Manager — CDN-backed media storage with transformations
Free Tier (Community Plan)
- 1 space
- Unlimited content entries
- 1 user
- 25,000 API calls/month
- Asset storage included
- Visual editor included
Quick Start: Fetching Content
import StoryblokClient from 'storyblok-js-client';
const Storyblok = new StoryblokClient({
accessToken: 'your-access-token'
});
// Get a single page
const { data } = await Storyblok.get('cdn/stories/home', {
version: 'published'
});
console.log(data.story.content); // Your page content
// Get all blog posts
const { data: posts } = await Storyblok.get('cdn/stories', {
starts_with: 'blog/',
sort_by: 'first_published_at:desc',
per_page: 10
});
posts.stories.forEach(post => {
console.log(post.name, post.first_published_at);
});
Component-Based Content
Storyblok's power is in components — reusable content blocks:
// Define components in your frontend
const components = {
hero: ({ blok }) => (
<section style={{ backgroundImage: `url(${blok.background_image})` }}>
<h1>{blok.headline}</h1>
<p>{blok.subheadline}</p>
<a href={blok.cta_link}>{blok.cta_text}</a>
</section>
),
feature_grid: ({ blok }) => (
<div className="grid">
{blok.features.map(feature => (
<div key={feature._uid}>
<h3>{feature.title}</h3>
<p>{feature.description}</p>
</div>
))}
</div>
)
};
// Render dynamic pages
function Page({ story }) {
return story.content.body.map(blok => {
const Component = components[blok.component];
return Component ? <Component blok={blok} key={blok._uid} /> : null;
});
}
Image Optimization
// Storyblok's image service transforms on the fly
const imageUrl = '//a.storyblok.com/f/12345/image.jpg';
// Resize to 800x600
const resized = `${imageUrl}/m/800x600`;
// WebP format with quality
const optimized = `${imageUrl}/m/800x0/filters:format(webp):quality(80)`;
// Face detection crop
const avatar = `${imageUrl}/m/200x200/filters:focal(500x300:600x400)`;
The Bottom Line
Storyblok bridges the gap between developer-friendly APIs and editor-friendly visual tools. If your team needs both technical flexibility and a great editing experience, it's worth trying.
Need to extract content from competitor websites, monitor CMS changes, or build content migration tools? I build custom data solutions.
📧 Email me: spinov001@gmail.com
🔧 My tools: Apify Store
Top comments (0)