Skip to content

[E-OWL-1] Core Owlbear extension scaffold and marketplace submission #973

@alxjrvs

Description

@alxjrvs

Part of #945

Phase 1: Core Owlbear extension scaffold and marketplace submission

Updated 2026-03-24: The codebase has @randsum/dice-ui (in packages/dice-ui), not @randsum/component-library. Use @randsum/dice-ui components or purpose-built components.

Scope

A working Owlbear Rodeo extension that renders a dice roller panel inside an iframe. Users can type notation, roll, and see results with modifier breakdown. Submit to the Owlbear marketplace as soon as functional.

Acceptance Criteria

  • apps/owlbear workspace package scaffolded with Vite + @vitejs/plugin-react — private, deploys as a static site
  • Extension metadata correct: name "randsum Dice", icon, category "Dice"
  • OBR.onReady() initializes the extension; iframe loads from the hosted HTTPS origin
  • Notation input renders inside the extension panel, validates using isDiceNotation
  • Roll button executes roll() and displays results with modifier breakdown
  • UI is functional and usable at 320px width
  • HTTPS hosting configured with frame-ancestors CSP header allowing Owlbear to embed the iframe
  • Extension submitted to the Owlbear marketplace
  • @owlbear-rodeo/sdk pinned to a major version in package.json

Implementation Notes

  • The iframe is a standard React webpage — standard Vite + React bundling
  • Local dev requires HTTPS: use vite --https with a self-signed cert or ngrok/Cloudflare Tunnel
  • Submit to marketplace as soon as Phase 1 is functional — don't wait for roll history
  • CSP: add Content-Security-Policy: frame-ancestors https://*.owlbear.rodeo to hosting config

Out of Scope

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestphaseA phase within an epic

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions