create-component
Create and configure Storyblok component definitions using the TypeScript schema DSL.
Skill by jimdrury
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/jimdrury-create-component
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: frontend, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/create-component
What's inside
- Skill name
create-component- Description
- Create and configure Storyblok component definitions using the TypeScript schema DSL. Use when the user wants to add a new component, define fields, set up content types or nestable blocks, or work with files in the schema/ directory.
- License
- MIT
- Instructions
- 273 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- reference.md
SKILL.md (first lines)
# Create Component
Define Storyblok components as TypeScript files in `schema/`. Each file default-exports a call to `contentType()` or `nestable()` with a `schema` array of field types.
## Installation
This package is published to the GitHub Package Registry.
### npm / Yarn 1
Add a `.npmrc` to your project root:
```
@jimdrury:registry=https://npm.pkg.github.com
```
Then install:
```bash
npm install @jimdrury/storyblok-component-schema
```
### Yarn 2+ (Berry)
Add to your `.yarnrc.yml`:
```yaml
npmScopes:
jimdrury:
npmRegistryServer: https://npm.pkg.github.com
```
Then install:
```bash
yarn add @jimdrury/storyblok-component-schema
```
## Configuration
Create a `.component-schema.yaml` in your project root:
```yaml
componentsDir: ./schema
storyblok:
apiToken: "${STORYBLOK_API_TOKEN}"
spaceId: "${STORYBLOK_SPACE_ID}"
```
Values wrapped in `${...}` are resolved from environment variables at runtime. All fields are optional -- the CLI falls back to env vars (`.env.local`) and defaults.
## Workflow
1. Create `schema/<name>.ts`
2. Import the component-type factory and field-type factories
3. Default-export the component definition
4. Run `npx storyblok-component-schema plan` to preview, `npx storyblok-component-schema apply` to push
## Imports
```ts
import { contentType, nestable, text, textarea, richtext, markdown, number, datetime, boolean, option, options, blocks, multilink, asset, multiasset, tab, table, references } from '@jimdrury/storyblok-component-schema';
```
Only import the factories you need. All exports are available from `@jimdrury/storyblok-component-schema`.
## Component Types
### contentType -- root-level entries (pages, articles, settings)
```ts
export default contentType({
name: 'page', // required -- lowercase + underscores only
display_name: 'Page', // required -- label in Storyblok UI
folder: 'content', // optional -- component group path
tags: ['marketing'], // optional -- for filtering / block restrictions
image: 'https://...', // optional -- preview image URL
preview_field: 'title', // optional -- field used as preview title
schema: [ /* fields */ ], // required -- array of field definitions
});
```
Returns `is_root: true`.
### nestable -- reusable blocks embedded via `blocks()` fields
```ts
export default nestable({
name: 'hero',
display_name: 'Hero',
folder: 'layout',
tags: ['layout'],
schema: [ /* fields */ ],
});
```
Returns `is_root: false, is_nestable: true`. Parameters are identical to `contentType`.
## Field Types Quick Reference
Every field accepts base params: `name` (required), `description`, `tooltip`, `required`.
| Factory | Use for | Key specific params |
|---------|---------|---------------------|
| `text` | Short strings | `translatable`, `default_value`, `max_length`, `regex` |
| `textarea` | Multi-line text | `default_value`, `max_length` |
| `richtext` | WYSIWYG editor | `max_length`, `allow_target_blank` |
| `markdown` | Markdown editor | `max_length`, `rich_markdown` |
| `number` | Numeric input | `min_value`, `max_value`, `decimals`, `steps`, `default_value` |
| `datetime` | Date/time picker | `disable_time`, `default_value` |
| `boolean` | Toggle | `default_value`, `inline_label` |
| `option` | Single-select | `options` (required), `default_value`, `source`, `datasource_slug` |
| `options` | Multi-select | `options` (required), `default_value`, `min_options`, `max_options` |
| `blocks` | Nested blocks | `minimum`, `maximum`, restriction params (see below) |
| `multilink` | Links | `email_link_type`, `asset_link_type`, `show_anchor`, `allow_target_blank` |
| `asset` | Single file | `filetypes`, `allow_external_url` |
| `multiasset` | Multiple files | `filetypes`, `allow_external_url` |
| `tab` | Editor tabs | `display_name` (required), `fields` (required) |
| `table` | Editable table | (base params only) |From jimdrury/jimdrury-component-schema, MIT.
More from jimdrury/jimdrury-component-schema
- 0.409score
text
jimdrury
Use the text() factory for single-line text input fields like titles, headings, or slugs.
SkillDFreshness: DClaude Code +9 - 0.409score
content-type
jimdrury
Use the contentType() factory to define root-level Storyblok components like pages, articles, or settings.
SkillDFreshness: DClaude Code +9 - 0.409score
install
jimdrury
Install and configure @jimdrury/storyblok-component-schema in a project.
SkillDFreshness: DClaude Code +9 - 0.409score
multiasset
jimdrury
Use the multiasset() factory for multiple file/image picker fields like galleries.
SkillDFreshness: DClaude Code +9 - 0.409score
number
jimdrury
Use the number() factory for numeric input fields like prices, ratings, or quantities.
SkillDFreshness: DClaude Code +9 - 0.409score
nestable
jimdrury
Use the nestable() factory to define reusable Storyblok blocks that can be embedded inside other components via blocks() fields.
SkillDFreshness: DClaude Code +9 - 0.408score
datetime
jimdrury
Use the datetime() factory for date and time picker fields.
SkillDFreshness: DClaude Code +9 - 0.408score
markdown
jimdrury
Use the markdown() factory for markdown editor fields.
SkillDFreshness: DClaude Code +9 - 0.408score
richtext
jimdrury
Use the richtext() factory for WYSIWYG rich text editor fields.
SkillDFreshness: DClaude Code +9 - 0.408score
boolean
jimdrury
Use the boolean() factory for toggle/checkbox fields.
SkillDFreshness: DClaude Code +9 - 0.408score
asset
jimdrury
Use the asset() factory for single file/image picker fields.
SkillDFreshness: DClaude Code +9 - 0.406score
blocks
jimdrury
Use the blocks() factory for nested component block fields.
SkillDFreshness: DClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Mar 21, 2026 (7 months ago)
- Last release
- Mar 21, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from jimdrury
- 0.409score
multiasset
jimdrury
Use the multiasset() factory for multiple file/image picker fields like galleries.
SkillDFreshness: DClaude Code +9 - 0.409score
number
jimdrury
Use the number() factory for numeric input fields like prices, ratings, or quantities.
SkillDFreshness: DClaude Code +9 - 0.409score
nestable
jimdrury
Use the nestable() factory to define reusable Storyblok blocks that can be embedded inside other components via blocks() fields.
SkillDFreshness: DClaude Code +9 - 0.409score
install
jimdrury
Install and configure @jimdrury/storyblok-component-schema in a project.
SkillDFreshness: DClaude Code +9 - 0.409score
content-type
jimdrury
Use the contentType() factory to define root-level Storyblok components like pages, articles, or settings.
SkillDFreshness: DClaude Code +9 - 0.409score
text
jimdrury
Use the text() factory for single-line text input fields like titles, headings, or slugs.
SkillDFreshness: DClaude Code +9
Cite this page
create-component skill. Agent Mart. https://agentmart.dev/skills/jimdrury-create-component (last updated 2026-10-24)