Adom Wiki
Public Made by Adomby adom
How the Adom Wiki (wiki.adom.inc) works and how to drive it with the adom-wiki CLI: the two storage layers (git page repo vs package registry), hosting source by pushing files (not a tarball), making packages, cutting per-platform releases, and the three-tier skill layout (user skills ship, dev-skills/ and publish-skills/ stay source-only). adom-wiki is the current tool; adompkg is deprecated. Read this first before publishing or installing.
Render registered ::tag{} widgets inline in the page as first-class citizens, not in a sandboxed iframe
Ask. Render registered ::tag{} widgets inline in the README page, as first-class citizens, instead of in a sandboxed iframe.
The intended concept. A plain README.md renders inline in the page; a readme.html is the sandboxed, untrusted escape hatch. Registered widgets were meant to be on the trusted side of that line. Only Adom employees can add them, through the org-owned, reviewed registry (adom/widgets). That review is what makes them safe, so they shouldn't need the sandbox that untrusted page HTML needs.
What runs today. #152 shipped the tag into "the same sandboxed frame contract the readme already uses": an <iframe sandbox="allow-scripts"> with a CSP sandbox and an opaque origin. So a reviewed, first-party widget is treated exactly like an untrusted page author's HTML. That costs us:
- Private pages break. The opaque frame is a third-party context, so browsers that block third-party cookies (Safari always, Chrome with that setting) drop the session cookie.
::adom-videocannot load a private page's video in a real browser, though it passes in pup (#228). Any widget that needs a private file hits the same wall. - No fullscreen (#226), no modals, and storage throws.
- Glue code everywhere. Height has to be reported to the parent and can stick at a scrollbar equilibrium. The cross-highlight bus has to relay through
postMessage. Keyboard focus starts outside the widget. Nested WebGL renders black. - One frame per tag, each with its own document and script load.
Proposal
- Registry widgets render inline: the page loads
/widget-script/<name>.jsonce (registry-gated, as today), and the tag becomes the custom element in the README's DOM. Widgets already use Shadow DOM, so styles stay isolated. - The registry stays the gate, and that is the whole trust model: org-owned, edited only by Adom employees, reviewed. Keep the attribute allowlist and escaping. Add the widget-script route to the page's script CSP.
readme.htmland declared section HTML stay sandboxed. They are page-author code, and that is where the sandbox belongs.
Effect. #228 (signed media URLs) and #226 (fullscreen) mostly go away for registry widgets. ::adom-video would play private videos with the reader's normal session, with seeking, in every browser. Widgets get simpler (no height reporter, no relay), and private data works without per-file tokens.
Wiki widgets are an Adom-employee domain, permanently. An inline widget script runs with the reader's session, so a registry entry is as trusted as wiki code. That is why only Adom employees build and register widgets. There is no third-party widget tier, now or later. Page authors who want their own code on a page already have readme.html and section HTML, which stay sandboxed.