Skip to content
@missing-elements

Missing Elements

Missing pieces for your web projects

Missing Elements

Useful web elements that work everywhere on the web.

Missing Elements builds standalone, framework-agnostic web components for capabilities the web platform does not provide out of the box.

Each component is built on browser standards and works with React, Vue, Svelte, Angular, server-rendered HTML, or no framework at all. They are designed to be easy to embed, safe to self-host, and useful in applications with strict Content Security Policies.

Components

Component What it does Status
pdfjs‑viewer A self-hostable custom element for displaying PDF documents, powered by PDF.js. ✅ Released
h5p‑offline‑player A browser-only H5P player that plays .h5p packages from a URL or local file without server-side extraction. It can also power a fully offline PWA. ✅ Released
office‑viewer A read-only browser-based viewer for DOCX, XLSX, and PPTX files, built on @silurus/ooxml. 🚧 In development

Principles

  • Browser-native — Prefer platform APIs, standard web components, and small integration surfaces over framework lock-in.
  • Framework-agnostic — Use the same component in React, Vue, Svelte, Angular, or plain HTML.
  • Self-hostable — Host assets yourself without depending on a third-party viewer service or CDN.
  • CSP-conscious — Support deployments with restrictive Content Security Policies and clear asset boundaries.
  • Encapsulated — Keep component styles and behavior isolated from the surrounding application.
  • Practical — Solve real document and learning-content viewing problems with a small, understandable API.

Quick start

The common model is simple: load a component once, then use its custom element in your page.

<script type="module" src="/path/to/component.js"></script>

<!-- The exact element and attributes depend on the component. -->
<your-element src="/files/example"></your-element>

See each repository for installation instructions, browser requirements, demos, API documentation, and self-hosting guidance.

Why self-hosting?

Many viewer integrations send documents or learning content to a third-party service, require a backend conversion step, or rely on an external CDN at runtime.

Missing Elements components are intended to give hosts control over:

  • where viewer code is served from;
  • which origins a page can contact;
  • how documents and packages are stored and loaded;
  • whether an experience can work without a network connection.

Self-hosting does not make untrusted content automatically safe. Host applications should still apply an appropriate Content Security Policy, validate inputs where applicable, and choose a security policy that fits their users and content sources.

Support the project

If these components are useful to you, you can support their development:

Buy Me a Coffee

Pinned Loading

  1. office-viewer office-viewer Public

    A standalone, read-only browser-based Office Open XML viewer Web Component for DOCX, XLSX, and PPTX

    TypeScript

  2. pdfjs-viewer pdfjs-viewer Public

    A standalone, isolated, self-hostable, plug-in custom element for viewing PDF files, based on the PDF.js viewer

    JavaScript 80 4

Repositories

Showing 4 of 4 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…