embed-my Test your activities here

The player

Every activity on Embed My plays in h5p-offline-player, an open-source H5P player that runs entirely in the browser. It reads the .h5p archive in place through a Service Worker and hands the files to the H5P runtime: nothing is unpacked on a server, and there is no server at all. Embed My is a front for it: the page that writes the snippet, and a frame that runs the player on its own address.

What it does

  • Plays any .h5p package from a URL, or from a file picked on the device, with no upload.
  • Starts a large package after a few kilobytes on a host that answers Range requests, and streams its video.
  • Plays exports that ship without their libraries from a pack of the H5P hub's libraries, downloading only the ones a package needs. A package that carries older versions plays the pack's newer ones, its content upgraded first with each library's own upgrade steps, and content made for a version newer than the hub's plays at the newest one there is.
  • Plays packages you did not make as data, with untrusted: none of their own code runs, and their content is checked against its libraries' field definitions, as the H5P plugins check an upload.
  • Shows H5P's own toolbar on request: rights of use, download, fullscreen. Its buttons and dialogs come in more than fifty languages, in the language the package declares, so they match its text.
  • Emits xAPI statements and the content's saved state as events, for a page or an LMS to collect, and runs as a cmi5 unit or, packed by h5p-embed, as a SCORM 1.2 or 2004 activity.
  • Ships as one web component, <h5p-player>, plus its workers; the H5P runtime is a package of its own.

Where it is

Source and documentation github.com/missing-elements/h5p-offline-player
Setup guide Setting up the player: with a bundler, with no build step, or as an embed page in an iframe
The player on npm @missing-elements/h5p-offline-player (MIT)
The H5P runtime on npm @missing-elements/h5p-runtime (GPL-3.0), the core the frame loads
Libraries for bare exports @missing-elements/h5p-libraries, every hub content type's libraries, for packages that ship without their own
Self-hosted embeds @missing-elements/h5p-embed (MIT), the embed page as a static site for a domain of your own, and a package as a SCORM zip for an LMS
Making packages @missing-elements/h5p-author (MIT), a package of any hub content type from a short JSON source
VS Code extension H5P Preview, which plays .h5p files in an editor tab, offline; Cursor and VSCodium install it from Open VSX
Demo site h5p-offline-player.vercel.app
Agent skills skills.sh/missing-elements/h5p-offline-player, for Claude Code, Cursor, Copilot, Codex and the rest
Issues github.com/missing-elements/h5p-offline-player/issues, for anything about how a package plays

Tools that come with it

  • npx @missing-elements/h5p-verify course.h5p plays a package in a real browser runtime and reports missing libraries, start-up errors and a screenshot, before you share it. With --preview it opens the package in the real player in your own browser instead, for a person to play through.
  • npx @missing-elements/h5p-normalize course.h5p rewrites a package once so that its video starts at once instead of after the whole file has downloaded.
  • npx @missing-elements/h5p-author build rivers.json rivers.h5p builds a playable package from a short JSON source that holds only what differs from the content type's defaults, checking every field as H5P's editor would. The h5p-author agent skill writes that source from a prompt or a lesson.
  • npx @missing-elements/h5p-embed --scorm course.h5p writes a package as a SCORM zip that reports the score, the time and the learner's place to an LMS such as Moodle; its page does the same in the browser, with nothing uploaded.

Run it yourself

For embeds an organisation controls, write the same embed page as a static site with h5p-embed and deploy it to a domain of your own. Snippets then point at that domain, and no third party sits between your learners and your content. It can also limit which hosts packages come from and which sites may frame it.

npx @missing-elements/h5p-embed@latest h5p-player

To put the player straight into your own pages instead, the setup guide covers each way to do it. Your packages stay as they are either way. Embed My's own player origin is h5p-embed's page.

Licences

The player, its workers and its tools are MIT. The H5P core runtime it loads inside the frame comes from h5p-php-library and is GPL-3.0, published as a package of its own with its licence and notices served beside it. The content inside a package carries its own licence. Embed My is independent of H5P Group; ā€œH5Pā€ is a trademark of H5P Group.