This spec set describes Pen as it exists in the monorepo today. It is package-centric and current-state oriented rather than roadmap-driven.
Start with the charter docs if you want the durable architectural rules:
charter/architecture.mdcharter/document-model.mdcharter/mutation-pipeline.mdcharter/package-map.md
Then read package specs by layer:
- Runtime authority:
packages/core.md,packages/types.md - Rendering:
packages/rendering/dom.md,packages/rendering/react.md,packages/rendering/vue.md - Editing and extensions:
packages/extensions/search.md,packages/extensions/undo.md,packages/extensions/history.md,packages/extensions/multiplayer.md - AI and tooling:
packages/extensions/ai.md,packages/extensions/document-ops.md,packages/shared/content-ops.md - Import/export:
packages/extensions/import-markdown.md,packages/extensions/import-html.md,packages/extensions/export-json.md,packages/extensions/export-xml.md
charter/contains cross-cutting architectural invariants.packages/mirrors the workspace package and app layout.- Package specs stay close to real package boundaries instead of grouping work by milestone or wave.
- Runtime authority lives with
@pen/coreand theEditorAPI. DocumentOp[]andeditor.apply(...)remain the canonical mutation path.@pen/typesis the shared contract layer, not a hidden runtime layer.- Renderer packages bind to the editor runtime but do not own document truth.
- JSON is the canonical machine-readable format. XML is an interoperability surface layered on top of that model.
- React is the primary documented renderer. Vue is a shipped renderer proof built on the shared DOM engine.
- Private apps such as
@pen/docsand@pen/playgroundare specified because they are part of the workspace, but they are not publishable runtime packages.
- Historical wave docs and planning notes were removed.
- Specs now describe the workspace as shipped today.
- The highest-value packages now have deeper runtime notes, boundaries, and architecture diagrams rather than just metadata summaries.