H5P Content Type Scaffolder
Create a modern H5P content type starting from established boilerplates, with a minimal build pipeline and editor semantics.
How It Works
- Choose package intent:
library-install(default) orcontent-import(advanced). - Collect metadata (title, machine name, version, author, license).
- Generate a boilerplate (default: SNORDIAN) that aligns with current H5P best practices.
- Provide starter
library.json,semantics.json, and JS/CSS entrypoints. - Outline build and packaging steps using
h5p-cli.
Concepts
- Content types are runnable libraries under
H5P.*(runnable: 1). - Editor widgets are non-runnable libraries under
H5PEditor.*(runnable: 0). semantics.jsondefines the editor form schema and validation rules.- Non-runnable dependency libraries (often
H5P.*orH5PApi.*) are used as shared building blocks.
See references/CONCEPTS.md for details and official links.
Packaging Intent (Required)
library-install(default): Upload libraries/content types to platform library installers.content-import(advanced): Import an authored content instance (h5p.json+content/content.json) into content import flows.- This skill scaffolds libraries. It does not generate
content/content.json. - Validate unpacked packages before upload:
bash /mnt/skills/user/h5p-type-scaffold/scripts/validate-package.sh --mode library-install --dir /path/to/unpacked
bash /mnt/skills/user/h5p-type-scaffold/scripts/validate-package.sh --mode content-import --dir /path/to/unpacked
Usage
bash /mnt/skills/user/h5p-type-scaffold/scripts/scaffold.sh \
--title "My Content Type" \
--machine "H5P.MyContentType" \
--kind "content" \
--version "1.0.0" \
--description "Short description" \
--author "Your Name" \
--license "MIT" \
--template "snordian" \
--out /path/to/output
Editor widget example:
bash /mnt/skills/user/h5p-type-scaffold/scripts/scaffold.sh \
--title "My Editor Widget" \
--machine "H5PEditor.MyWidget" \
--kind "editor" \
--out /path/to/output
Output
library.jsonandsemantics.jsonsrc/entries,src/scripts,src/stylesREADME.md(templates)DEV.md(templates, dev harness)- Build config and lint config (varies by template)
- Templates live under
assets/templates/
Build & Package (h5p-cli)
- Install deps:
npm install - Build assets:
npm run build - Set up dev environment:
h5p corethenh5p setup <library> - Run local editor/server:
h5p server - Pack library for install:
h5p pack <library> [my-library.h5p](seeh5p help pack) - Install this package in the platform's library/content-type upload flow.
- For library packages, keep
library.jsonat the package root and avoid top-levelh5p.jsonorcontent/. - Use
h5p.json+content/only for content-instance export/import flows. - Run package validation before upload with
scripts/validate-package.sh.
Strict-validator packaging (Drupal 11.x H5P 2.0.0+)
Some platforms (notably Drupal 11.x with the H5P 2.0.0 beta module) reject
zip directory entries such as dist/ or language/ because they lack an
allowed file extension. Use scripts/pack.sh instead of h5p pack to produce
a .h5p archive that omits directory entries:
bash /mnt/skills/user/h5p-type-scaffold/scripts/pack.sh \
--dir /path/to/built-library \
--out MyLibrary.h5p
Add --strict to abort if any packaged file lacks an allowed extension.
Dev Harness (h5p-cli)
- Manual steps:
references/DEV-HARNESS.md - Helper script:
scripts/h5p-dev.sh
xAPI Integration
- Guidance:
references/XAPI.md(emit + listen + platform notes)
See references/H5P-CLI.md for a fuller command overview and references/CONTENT-TYPE-AUTHORING.md for authoring essentials.
Guidance (2024/2025 Best Practices)
- Default to the SNORDIAN boilerplate for linting, i18n scaffolding, and CI-ready conventions.
- Use the official
h5p/h5p-boilerplatewhen you want the simplest baseline. - Prefer vanilla JS for community maintainability.
- Use
h5p-clito pack and manage libraries. - Validate semantics and editor UX early with a minimal field set.
Related Community Patterns (Incorporated)
- H5P content is often embedded via iframe in LMS or CMS platforms.
- Common education-focused content types include Interactive Video, Course Presentation, Question Sets, Dialog Cards, and Timeline.
- When embedding, wrap iframes in a responsive container and apply safe, minimal styling.
Templates
snordian(default): Linting + i18n scaffolding + modern webpack config.vanilla: Official minimal boilerplate structure.editor: H5P editor widget boilerplate (H5PEditor.*).
Additional Upstream Options (Not Bundled)
h5p/h5p-boilerplatebranches likequestion-typeandquestion-type-vuefor specialized starting points.otacke/h5p-editor-boilerplatefor building custom H5P editor widgets.NDLA-H5P/generator-h5p-content-typeif you prefer a Yeoman-based generator workflow.tarmoj/h5p-react-boilerplatefor a React-based starter (note: appears stale).
Troubleshooting
- If machine name is invalid, use
H5P.YourContentType. - For editor widgets, use
--kind editorand aH5PEditor.YourWidgetmachine name. - If versioning is unclear, start with
1.0.0and update later. - If build fails, ensure
nodeandnpmare installed and runnpm install. - If import errors mention
content/ not allowed, missingpreloadDependenciesinh5p.json, or invalidlicenseinh5p.json, you are importing a content package into a library upload flow. - If Drupal 11.x (H5P 2.0.0 beta) rejects the upload with "File 'dist/' not allowed" or "File 'language/' not allowed", the
.h5pzip contains directory entries. Repack usingscripts/pack.sh --dir <library-dir>which creates a zip without directory entries.