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) or content-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.json defines the editor form schema and validation rules.
- Non-runnable dependency libraries (often
H5P.* or H5PApi.*) 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.json and semantics.json
src/entries, src/scripts, src/styles
README.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 core then h5p setup <library>
- Run local editor/server:
h5p server
- Pack library for install:
h5p pack <library> [my-library.h5p] (see h5p help pack)
- Install this package in the platform's library/content-type upload flow.
- For library packages, keep
library.json at the package root and avoid top-level h5p.json or content/.
- 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-boilerplate when you want the simplest baseline.
- Prefer vanilla JS for community maintainability.
- Use
h5p-cli to 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-boilerplate branches like question-type and question-type-vue for specialized starting points.
otacke/h5p-editor-boilerplate for building custom H5P editor widgets.
NDLA-H5P/generator-h5p-content-type if you prefer a Yeoman-based generator workflow.
tarmoj/h5p-react-boilerplate for a React-based starter (note: appears stale).
Troubleshooting
- If machine name is invalid, use
H5P.YourContentType.
- For editor widgets, use
--kind editor and a H5PEditor.YourWidget machine name.
- If versioning is unclear, start with
1.0.0 and update later.
- If build fails, ensure
node and npm are installed and run npm install.
- If import errors mention
content/ not allowed, missing preloadDependencies in h5p.json, or invalid license in h5p.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
.h5p zip contains directory entries. Repack using scripts/pack.sh --dir <library-dir> which creates a zip without directory entries.
1---2name: h5p-type-scaffold3description: Scaffold and guide creation of H5P content types. Use when asked "build an H5P type", "create an H5P content type", "scaffold an H5P library", or "start a new H5P".4---56# H5P Content Type Scaffolder78Create a modern H5P content type starting from established boilerplates, with a minimal build pipeline and editor semantics.910## How It Works11121. Choose package intent: `library-install` (default) or `content-import` (advanced).132. Collect metadata (title, machine name, version, author, license).143. Generate a boilerplate (default: SNORDIAN) that aligns with current H5P best practices.154. Provide starter `library.json`, `semantics.json`, and JS/CSS entrypoints.165. Outline build and packaging steps using `h5p-cli`.1718## Concepts1920- Content types are runnable libraries under `H5P.*` (`runnable: 1`).21- Editor widgets are non-runnable libraries under `H5PEditor.*` (`runnable: 0`).22- `semantics.json` defines the editor form schema and validation rules.23- Non-runnable dependency libraries (often `H5P.*` or `H5PApi.*`) are used as shared building blocks.2425See `references/CONCEPTS.md` for details and official links.2627## Packaging Intent (Required)2829- `library-install` (default): Upload libraries/content types to platform library installers.30- `content-import` (advanced): Import an authored content instance (`h5p.json` + `content/content.json`) into content import flows.31- This skill scaffolds libraries. It does not generate `content/content.json`.32- Validate unpacked packages before upload:3334```bash35bash /mnt/skills/user/h5p-type-scaffold/scripts/validate-package.sh --mode library-install --dir /path/to/unpacked36bash /mnt/skills/user/h5p-type-scaffold/scripts/validate-package.sh --mode content-import --dir /path/to/unpacked37```3839## Usage4041```bash42bash /mnt/skills/user/h5p-type-scaffold/scripts/scaffold.sh \43 --title "My Content Type" \44 --machine "H5P.MyContentType" \45 --kind "content" \46 --version "1.0.0" \47 --description "Short description" \48 --author "Your Name" \49 --license "MIT" \50 --template "snordian" \51 --out /path/to/output52```5354Editor widget example:5556```bash57bash /mnt/skills/user/h5p-type-scaffold/scripts/scaffold.sh \58 --title "My Editor Widget" \59 --machine "H5PEditor.MyWidget" \60 --kind "editor" \61 --out /path/to/output62```6364## Output6566- `library.json` and `semantics.json`67- `src/entries`, `src/scripts`, `src/styles`68- `README.md` (templates)69- `DEV.md` (templates, dev harness)70- Build config and lint config (varies by template)71- Templates live under `assets/templates/`7273## Build & Package (h5p-cli)7475- Install deps: `npm install`76- Build assets: `npm run build`77- Set up dev environment: `h5p core` then `h5p setup <library>`78- Run local editor/server: `h5p server`79- Pack library for install: `h5p pack <library> [my-library.h5p]` (see `h5p help pack`)80- Install this package in the platform's library/content-type upload flow.81- For library packages, keep `library.json` at the package root and avoid top-level `h5p.json` or `content/`.82- Use `h5p.json` + `content/` only for content-instance export/import flows.83- Run package validation before upload with `scripts/validate-package.sh`.8485### Strict-validator packaging (Drupal 11.x H5P 2.0.0+)8687Some platforms (notably Drupal 11.x with the H5P 2.0.0 beta module) reject88zip directory entries such as `dist/` or `language/` because they lack an89allowed file extension. Use `scripts/pack.sh` instead of `h5p pack` to produce90a `.h5p` archive that omits directory entries:9192```bash93bash /mnt/skills/user/h5p-type-scaffold/scripts/pack.sh \94 --dir /path/to/built-library \95 --out MyLibrary.h5p96```9798Add `--strict` to abort if any packaged file lacks an allowed extension.99100## Dev Harness (h5p-cli)101102- Manual steps: `references/DEV-HARNESS.md`103- Helper script: `scripts/h5p-dev.sh`104105## xAPI Integration106107- Guidance: `references/XAPI.md` (emit + listen + platform notes)108109See `references/H5P-CLI.md` for a fuller command overview and `references/CONTENT-TYPE-AUTHORING.md` for authoring essentials.110111## Guidance (2024/2025 Best Practices)112113- Default to the SNORDIAN boilerplate for linting, i18n scaffolding, and CI-ready conventions.114- Use the official `h5p/h5p-boilerplate` when you want the simplest baseline.115- Prefer vanilla JS for community maintainability.116- Use `h5p-cli` to pack and manage libraries.117- Validate semantics and editor UX early with a minimal field set.118119## Related Community Patterns (Incorporated)120121- H5P content is often embedded via iframe in LMS or CMS platforms.122- Common education-focused content types include Interactive Video, Course Presentation, Question Sets, Dialog Cards, and Timeline.123- When embedding, wrap iframes in a responsive container and apply safe, minimal styling.124125## Templates126127- `snordian` (default): Linting + i18n scaffolding + modern webpack config.128- `vanilla`: Official minimal boilerplate structure.129- `editor`: H5P editor widget boilerplate (`H5PEditor.*`).130131## Additional Upstream Options (Not Bundled)132133- `h5p/h5p-boilerplate` branches like `question-type` and `question-type-vue` for specialized starting points.134- `otacke/h5p-editor-boilerplate` for building custom H5P editor widgets.135- `NDLA-H5P/generator-h5p-content-type` if you prefer a Yeoman-based generator workflow.136- `tarmoj/h5p-react-boilerplate` for a React-based starter (note: appears stale).137138## Troubleshooting139140- If machine name is invalid, use `H5P.YourContentType`.141- For editor widgets, use `--kind editor` and a `H5PEditor.YourWidget` machine name.142- If versioning is unclear, start with `1.0.0` and update later.143- If build fails, ensure `node` and `npm` are installed and run `npm install`.144- If import errors mention `content/ not allowed`, missing `preloadDependencies` in `h5p.json`, or invalid `license` in `h5p.json`, you are importing a content package into a library upload flow.145- If Drupal 11.x (H5P 2.0.0 beta) rejects the upload with **"File 'dist/' not allowed"** or **"File 'language/' not allowed"**, the `.h5p` zip contains directory entries. Repack using `scripts/pack.sh --dir <library-dir>` which creates a zip without directory entries.