@mdwrk/mdwrkcom-content-pack 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/content/pages/answers/does-mdwrk-require-a-server.md +27 -0
- package/content/pages/answers/how-do-mdwrk-theme-packs-work.md +27 -0
- package/content/pages/answers/how-does-mdwrk-store-markdown-locally.md +27 -0
- package/content/pages/answers/index.md +39 -0
- package/content/pages/answers/what-is-a-local-first-markdown-workspace.md +27 -0
- package/content/pages/answers/what-is-an-offline-markdown-editor.md +27 -0
- package/content/pages/blog/launch.md +42 -0
- package/content/pages/compare/index.md +39 -0
- package/content/pages/compare/local-first-markdown-editors.md +27 -0
- package/content/pages/compare/mdwrk-vs-obsidian.md +27 -0
- package/content/pages/compare/mdwrk-vs-typora.md +27 -0
- package/content/pages/compare/mdwrk-vs-vscode-markdown.md +27 -0
- package/content/pages/docs/extensions.md +34 -0
- package/content/pages/docs/quickstart.md +48 -0
- package/content/pages/docs/theme-packs.md +34 -0
- package/content/pages/es/docs/quickstart.md +50 -0
- package/content/pages/features/extension-runtime.md +25 -0
- package/content/pages/features/github-sync.md +25 -0
- package/content/pages/features/index.md +42 -0
- package/content/pages/features/indexeddb-markdown-storage.md +25 -0
- package/content/pages/features/live-preview.md +25 -0
- package/content/pages/features/pwa-markdown-editor.md +25 -0
- package/content/pages/index.md +45 -0
- package/content/pages/markdown/basic-markdown-syntax.md +29 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/benefits.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/best-practices.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/checklist.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/examples.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/for-developers.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/for-teams.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/use-cases.md +31 -0
- package/content/pages/markdown/generated/local-first-markdown-workspace/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-blogging/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-documentation/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-editor/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-extension-workflows/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-for-developers/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-for-teams/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-knowledge-base/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-notes/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-preview/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-project-docs/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-readme/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-theme-packs/workflow.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/benefits.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/best-practices.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/checklist.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/examples.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/for-developers.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/for-teams.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/use-cases.md +31 -0
- package/content/pages/markdown/generated/markdown-writing-workflow/workflow.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/benefits.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/best-practices.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/checklist.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/examples.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/for-developers.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/for-teams.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/use-cases.md +31 -0
- package/content/pages/markdown/generated/offline-markdown-editor/workflow.md +31 -0
- package/content/pages/markdown/how-to-write-markdown.md +29 -0
- package/content/pages/markdown/index.md +40 -0
- package/content/pages/markdown/markdown-vs-html.md +29 -0
- package/content/pages/markdown/what-is-a-markdown-editor.md +29 -0
- package/content/pages/markdown/what-is-markdown-used-for.md +29 -0
- package/content/pages/markdown/what-is-markdown.md +29 -0
- package/content/pages/packages/extension-runtime.md +33 -0
- package/content/pages/packages/index.md +42 -0
- package/content/pages/packages/markdown-editor-react.md +33 -0
- package/content/pages/packages/markdown-renderer-core.md +33 -0
- package/content/pages/packages/markdown-renderer-react.md +33 -0
- package/content/pages/packages/theme-contract.md +33 -0
- package/content/pages/privacy.md +41 -0
- package/content/pages/proof/browser-support.md +22 -0
- package/content/pages/proof/markdown-support.md +22 -0
- package/content/pages/proof/package-surfaces.md +22 -0
- package/content/pages/security.md +38 -0
- package/content/pages/trust/privacy-boundary.md +22 -0
- package/data/article-metadata.schema.json +111 -0
- package/data/content-sitemap.yaml +31 -0
- package/data/content.ts +55 -0
- package/data/docs.ts +111 -0
- package/data/markdown/AGENTS.md +10 -0
- package/data/markdown/blog/client-split-out-backstory.md +97 -0
- package/data/markdown/blog/desktop-release-and-android-verification.md +65 -0
- package/data/markdown/blog/docs-surface-realignment.md +70 -0
- package/data/markdown/blog/extension-compatibility-and-publish-gates.md +59 -0
- package/data/markdown/blog/extension-host-rollout.md +92 -0
- package/data/markdown/blog/governed-releases-and-package-docs.md +69 -0
- package/data/markdown/blog/markdown-workspace-launch.md +75 -0
- package/data/markdown/blog/pwa-install-and-zoom-controls.md +64 -0
- package/data/markdown/blog/responsive-authoring-and-export.md +64 -0
- package/data/markdown/blog/retained-client-versions-and-desktop-shell.md +59 -0
- package/data/markdown/blog/screenshot-matrix-and-browser-sidebars.md +57 -0
- package/data/markdown/blog/settings-simplification-for-daily-flow.md +54 -0
- package/data/markdown/blog/workspace-files-and-git-ops-packages.md +53 -0
- package/data/markdown/docs/authoring/authoring-overview.md +59 -0
- package/data/markdown/docs/authoring/extension-authoring-guide.md +69 -0
- package/data/markdown/docs/authoring/extensions.md +93 -0
- package/data/markdown/docs/authoring/language-packs.md +81 -0
- package/data/markdown/docs/authoring/theme-packs.md +81 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-logseq.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-marktext.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-notion.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-obsidian.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-standard-markdown-editors.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-typora.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-vs-code.md +49 -0
- package/data/markdown/docs/comparisons/mdwrk-vs-zettlr.md +49 -0
- package/data/markdown/docs/extensions/extension-platform.md +64 -0
- package/data/markdown/docs/extensions/theme-studio-and-host-surfaces.md +54 -0
- package/data/markdown/docs/getting-started/browser-use.md +59 -0
- package/data/markdown/docs/getting-started/configuration.md +82 -0
- package/data/markdown/docs/getting-started/installation.md +74 -0
- package/data/markdown/docs/getting-started/local-setup.md +94 -0
- package/data/markdown/docs/getting-started/pwa-installation.md +62 -0
- package/data/markdown/docs/getting-started/standalone-modules.md +87 -0
- package/data/markdown/docs/github-sync.md +51 -0
- package/data/markdown/docs/product/desktop-app-boundary.md +57 -0
- package/data/markdown/docs/product/developer-documentation.md +52 -0
- package/data/markdown/docs/product/extension-host.md +52 -0
- package/data/markdown/docs/product/local-first-markdown-workspace.md +52 -0
- package/data/markdown/docs/product/markdown-file-manager.md +52 -0
- package/data/markdown/docs/product/markdown-preview-editor.md +52 -0
- package/data/markdown/docs/product/markdown-profile-architecture.md +51 -0
- package/data/markdown/docs/product/offline-markdown-editor.md +52 -0
- package/data/markdown/docs/product/privacy-first-markdown-editor.md +52 -0
- package/data/markdown/docs/product/theme-packs.md +52 -0
- package/data/markdown/docs/product/uix-responsive-contract.md +51 -0
- package/data/markdown/docs/usage/advanced-formatting.md +181 -0
- package/data/markdown/docs/usage/checkbox-autocomplete.md +51 -0
- package/data/markdown/docs/usage/editor-basics.md +138 -0
- package/data/markdown/docs/usage/rendering-and-preview.md +157 -0
- package/data/markdown/docs/usage/text-wrap-previewer.md +45 -0
- package/data/markdown/docs/usage/ui-refresh-1-3-28.md +43 -0
- package/data/markdown/docs/usage/ui-refresh-1-3-29.md +44 -0
- package/data/markdown/docs/usage/view-toolbar.md +47 -0
- package/data/markdown/legal/privacy.md +21 -0
- package/data/markdown/legal/terms.md +19 -0
- package/data/markdown-topic-matrix.json +169 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/generated/cache-header-manifest.json +6558 -0
- package/generated/content-index.json +3689 -0
- package/generated/content-registry.json +15203 -0
- package/generated/jsonld-graph.json +21815 -0
- package/generated/llms-full.txt +1769 -0
- package/generated/llms.txt +225 -0
- package/generated/robots.txt +28 -0
- package/generated/semantic-index.json +7595 -0
- package/generated/sitemap.xml +1114 -0
- package/generated/sitemap.xsl +59 -0
- package/package.json +57 -0
- package/public/blog/media/extension-manager-pane.jpg +0 -0
- package/public/blog/media/lander-blog-list.png +0 -0
- package/public/blog/media/lander-docs-dark.png +0 -0
- package/public/blog/media/lander-home-light.png +0 -0
- package/public/blog/media/language-pack-studio-pane.jpg +0 -0
- package/public/blog/media/mdwrk-git-pane.png +0 -0
- package/public/blog/media/mdwrk-settings-visual.png +0 -0
- package/public/blog/media/mdwrk-workspace-editor.png +0 -0
- package/public/blog/media/mdwrk-workspace-split.png +0 -0
- package/public/blog/media/settings-github-configurations.jpg +0 -0
- package/public/blog/media/theme-selector-modal.jpg +0 -0
- package/public/blog/media/theme-studio-pane.jpg +0 -0
- package/public/favicon.svg +10 -0
- package/public/llms.txt +85 -0
- package/public/og-image.png +0 -0
- package/public/og-image.svg +12 -0
- package/public/robots.txt +4 -0
- package/public/semantic-index.json +1627 -0
- package/public/sitemap.xml +342 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/packages/extension-runtime/"
|
|
4
|
+
title: "Extension Runtime Package | MdWrk"
|
|
5
|
+
description: "The @mdwrk/extension-runtime package provides portable runtime utilities for governed MdWrk extension behavior."
|
|
6
|
+
h1: "@mdwrk/extension-runtime"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "extension runtime package"
|
|
9
|
+
contentType: "package"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Use the extension runtime package when building governed commands, panes, settings, and integration surfaces."
|
|
13
|
+
parent: "/packages/"
|
|
14
|
+
related:
|
|
15
|
+
- "/packages/"
|
|
16
|
+
- "/packages/theme-contract/"
|
|
17
|
+
- "/proof/package-surfaces/"
|
|
18
|
+
faqs:
|
|
19
|
+
- question: "What is @mdwrk/extension-runtime?"
|
|
20
|
+
answer: "It is the portable package for MdWrk extension runtime behavior, lifecycle, and host-facing contracts."
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
`@mdwrk/extension-runtime` provides portable runtime utilities for governed MdWrk extension behavior. It supports the package-level extension model behind commands, panes, settings, and integrations.
|
|
24
|
+
|
|
25
|
+
Install:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @mdwrk/extension-runtime
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Use this package when extension behavior needs to stay explicit, inspectable, and compatible with MdWrk host surfaces.
|
|
32
|
+
|
|
33
|
+
The runtime package keeps extension behavior out of undocumented client patches. A package author can reason about lifecycle, host context, compatibility, and trust policy as stable surfaces that can be documented, validated, and reused across delivery targets.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/packages/"
|
|
4
|
+
title: "MdWrk Packages | Reusable Markdown Editor And Renderer Packages"
|
|
5
|
+
description: "Explore MdWrk packages for Markdown rendering, React integration, editor components, theme contracts, and extension runtime behavior."
|
|
6
|
+
h1: "Packages"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "mdwrk packages"
|
|
9
|
+
contentType: "docs"
|
|
10
|
+
updatedAt: "2026-05-12"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
displayAuthor: false
|
|
13
|
+
subtitle: "Use the packages hub to find the reusable MdWrk modules behind rendering, editing, theme contracts, and extension behavior."
|
|
14
|
+
parent: "/"
|
|
15
|
+
related:
|
|
16
|
+
- "/features/"
|
|
17
|
+
- "/answers/"
|
|
18
|
+
- "/proof/package-surfaces/"
|
|
19
|
+
faqs:
|
|
20
|
+
- question: "What are MdWrk packages?"
|
|
21
|
+
answer: "MdWrk packages are reusable modules for Markdown rendering, editor behavior, theme contracts, extension runtime behavior, and related adoption paths."
|
|
22
|
+
- question: "Why does MdWrk separate packages from the product site?"
|
|
23
|
+
answer: "The package section makes reusable module boundaries explicit so teams can evaluate adoption without treating every capability as an app-only feature."
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
MdWrk packages are the reusable module surfaces behind the broader MdWrk product story. They help teams adopt rendering, editing, theming, and extension behavior without pulling in the full MdWrk application shell.
|
|
27
|
+
|
|
28
|
+
## Current public package pages
|
|
29
|
+
|
|
30
|
+
- [@mdwrk/markdown-renderer-core](/packages/markdown-renderer-core/) is the self-contained Markdown parsing and rendering surface for HTML output and preview pipelines.
|
|
31
|
+
- [@mdwrk/markdown-renderer-react](/packages/markdown-renderer-react/) provides React bindings for MdWrk-aligned Markdown rendering.
|
|
32
|
+
- [@mdwrk/markdown-editor-react](/packages/markdown-editor-react/) exposes React editor components for embedding MdWrk-style authoring surfaces.
|
|
33
|
+
- [@mdwrk/theme-contract](/packages/theme-contract/) documents the governed token and compatibility contract for editor, preview, extension, and lander styling.
|
|
34
|
+
- [@mdwrk/extension-runtime](/packages/extension-runtime/) covers the reusable runtime boundary for extension lifecycle and host-facing behavior.
|
|
35
|
+
|
|
36
|
+
## Broader package families in the repo
|
|
37
|
+
|
|
38
|
+
The public package pages cover only part of the current workspace package surface. The broader repo also includes the packaged workspace app, editor and renderer families, extension packages, shared utilities, lander packages, and the MdWrk content pack.
|
|
39
|
+
|
|
40
|
+
## How to use this section
|
|
41
|
+
|
|
42
|
+
Start here if you are evaluating MdWrk as a package platform rather than only as an end-user application. The package pages clarify install surfaces, public APIs, and how each reusable module fits into the broader Markdown workflow.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/packages/markdown-editor-react/"
|
|
4
|
+
title: "Markdown Editor React Package | MdWrk"
|
|
5
|
+
description: "The @mdwrk/markdown-editor-react package provides React Markdown editor components for embedding MdWrk-style authoring surfaces."
|
|
6
|
+
h1: "@mdwrk/markdown-editor-react"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "markdown editor react package"
|
|
9
|
+
contentType: "package"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Use the React editor package when another product needs a reusable Markdown authoring surface."
|
|
13
|
+
parent: "/packages/"
|
|
14
|
+
related:
|
|
15
|
+
- "/packages/"
|
|
16
|
+
- "/packages/markdown-renderer-react/"
|
|
17
|
+
- "/packages/theme-contract/"
|
|
18
|
+
faqs:
|
|
19
|
+
- question: "What is @mdwrk/markdown-editor-react?"
|
|
20
|
+
answer: "It is the React editor package for embedding MdWrk-style Markdown authoring surfaces."
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
`@mdwrk/markdown-editor-react` provides React components for Markdown authoring. It is part of the package family that lets MdWrk behavior travel outside the main workspace client.
|
|
24
|
+
|
|
25
|
+
Install:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @mdwrk/markdown-editor-react
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Use this package when a product needs editor behavior directly and does not need to adopt the entire MdWrk application shell.
|
|
32
|
+
|
|
33
|
+
The editor package is part of the split package story. A consuming product can pair it with renderer packages, theme contracts, and its own content model while MdWrk continues to use the same family inside the flagship workspace.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/packages/markdown-renderer-core/"
|
|
4
|
+
title: "Markdown Renderer Core Package | MdWrk"
|
|
5
|
+
description: "The @mdwrk/markdown-renderer-core package provides self-contained Markdown parsing and rendering utilities for package-level preview and HTML output."
|
|
6
|
+
h1: "@mdwrk/markdown-renderer-core"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "markdown renderer core package"
|
|
9
|
+
contentType: "package"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Use the renderer core package when a product needs Markdown parsing and HTML rendering without adopting the full MdWrk client."
|
|
13
|
+
parent: "/packages/"
|
|
14
|
+
related:
|
|
15
|
+
- "/packages/"
|
|
16
|
+
- "/packages/markdown-renderer-react/"
|
|
17
|
+
- "/proof/package-surfaces/"
|
|
18
|
+
faqs:
|
|
19
|
+
- question: "What is @mdwrk/markdown-renderer-core?"
|
|
20
|
+
answer: "It is the package-level Markdown parsing and rendering surface used by MdWrk renderer workflows."
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
`@mdwrk/markdown-renderer-core` provides Markdown parsing and rendering utilities for package-level preview and HTML output. It is useful when a product needs MdWrk-aligned Markdown behavior without adopting the full workspace client.
|
|
24
|
+
|
|
25
|
+
Install:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @mdwrk/markdown-renderer-core
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The package belongs to the reusable renderer family. The lander presents it as part of MdWrk product truth, while the portable lander packages only render the package-page shape, metadata, FAQ, and schema.
|
|
32
|
+
|
|
33
|
+
Use this surface when the implementation needs Markdown behavior that can be tested, documented, and reused without importing the full client. The package keeps renderer adoption explicit, which helps product teams separate content parsing, HTML output, and application-specific presentation.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/packages/markdown-renderer-react/"
|
|
4
|
+
title: "Markdown Renderer React Package | MdWrk"
|
|
5
|
+
description: "The @mdwrk/markdown-renderer-react package provides React bindings for rendering Markdown through the same package family used by MdWrk."
|
|
6
|
+
h1: "@mdwrk/markdown-renderer-react"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "markdown renderer react package"
|
|
9
|
+
contentType: "package"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Use the React renderer package when a product needs MdWrk-aligned Markdown rendering inside React."
|
|
13
|
+
parent: "/packages/"
|
|
14
|
+
related:
|
|
15
|
+
- "/packages/"
|
|
16
|
+
- "/packages/markdown-renderer-core/"
|
|
17
|
+
- "/packages/markdown-editor-react/"
|
|
18
|
+
faqs:
|
|
19
|
+
- question: "What is @mdwrk/markdown-renderer-react?"
|
|
20
|
+
answer: "It is the React binding package for rendering Markdown through MdWrk's renderer family."
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
`@mdwrk/markdown-renderer-react` gives React applications a package-level route into MdWrk-aligned Markdown rendering. It pairs with the renderer core package and keeps rendering behavior reusable outside the full workspace client.
|
|
24
|
+
|
|
25
|
+
Install:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @mdwrk/markdown-renderer-react
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Use this package when a product needs a React Markdown preview surface that can stay aligned with MdWrk examples, docs, and client behavior.
|
|
32
|
+
|
|
33
|
+
The React package is intentionally described as a reusable surface instead of a hidden implementation detail. That makes package adoption clear for teams that need preview behavior inside another application while keeping MdWrk-specific product positioning in the content pack.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/packages/theme-contract/"
|
|
4
|
+
title: "Theme Contract Package | MdWrk"
|
|
5
|
+
description: "The @mdwrk/theme-contract package defines theme token and compatibility contracts for MdWrk editor, preview, extension, and lander surfaces."
|
|
6
|
+
h1: "@mdwrk/theme-contract"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "theme contract package"
|
|
9
|
+
contentType: "package"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Use the theme contract package when styling needs to target governed tokens instead of private UI internals."
|
|
13
|
+
parent: "/packages/"
|
|
14
|
+
related:
|
|
15
|
+
- "/packages/"
|
|
16
|
+
- "/answers/how-do-mdwrk-theme-packs-work/"
|
|
17
|
+
- "/packages/extension-runtime/"
|
|
18
|
+
faqs:
|
|
19
|
+
- question: "What is @mdwrk/theme-contract?"
|
|
20
|
+
answer: "It is the package that defines governed theme tokens and compatibility surfaces for MdWrk packages and apps."
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
`@mdwrk/theme-contract` defines theme token and compatibility contracts for MdWrk surfaces. It helps themes travel across editor, preview, extension, and lander experiences without patching private implementation details.
|
|
24
|
+
|
|
25
|
+
Install:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @mdwrk/theme-contract
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This package anchors the difference between reusable visual shape and MdWrk-specific styling truth. Product theme packs can supply identity while generic packages keep stable token names.
|
|
32
|
+
|
|
33
|
+
The contract matters for portability because themes should not depend on private app selectors. A product-specific theme can express its own visual system while editor, preview, extension, and lander packages continue to consume documented tokens.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/privacy/"
|
|
4
|
+
title: "MdWrk privacy policy for local-first Markdown workflows"
|
|
5
|
+
description: "MdWrk privacy documentation explains the local-first storage model, explicit sharing boundaries, GitHub integration expectations, and extension trust policy."
|
|
6
|
+
h1: "Privacy policy"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "MdWrk privacy policy"
|
|
9
|
+
contentType: "privacy"
|
|
10
|
+
updatedAt: "2026-05-04"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "MdWrk is documented as a privacy-first Markdown workspace that keeps authoring local by default and treats sync, export, integrations, and extensions as explicit user choices."
|
|
13
|
+
faqs:
|
|
14
|
+
- question: "Does MdWrk upload documents by default?"
|
|
15
|
+
answer: "The public documentation should not imply default uploads. It should describe local storage and identify workflows that intentionally use networked services."
|
|
16
|
+
parent: "/"
|
|
17
|
+
related:
|
|
18
|
+
- "/security/"
|
|
19
|
+
tags:
|
|
20
|
+
- privacy
|
|
21
|
+
- local-first
|
|
22
|
+
- policy
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
MdWrk's privacy policy is written around the local-first Markdown model. Public documentation should make clear that writing and previewing Markdown do not require a hosted document account as the default assumption.
|
|
26
|
+
|
|
27
|
+
## Local Content Boundary
|
|
28
|
+
|
|
29
|
+
Markdown documents, workspace state, and editor preferences should be described in terms of local control. If a workflow stores data in browser-managed storage, IndexedDB, filesystem-backed surfaces, or another local mechanism, the docs should say so plainly.
|
|
30
|
+
|
|
31
|
+
## Explicit Sharing
|
|
32
|
+
|
|
33
|
+
Export, GitHub sync, package installation, and extension workflows are deliberate actions. The privacy documentation should explain that these actions may cross the local boundary and should describe which external service or package is involved.
|
|
34
|
+
|
|
35
|
+
## Extension Trust
|
|
36
|
+
|
|
37
|
+
Extensions can add useful capabilities, but they also need trust and compatibility rules. MdWrk documents extension manifests, package identity, runtime expectations, and the idea that extension behavior should not be treated as automatically trusted.
|
|
38
|
+
|
|
39
|
+
## Public Documentation
|
|
40
|
+
|
|
41
|
+
The public privacy page is statically generated, indexable when policy allows, and mirrored into machine-readable artifacts. That makes the privacy posture inspectable before deployment.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/proof/browser-support/"
|
|
4
|
+
title: "Browser Support Proof | MdWrk"
|
|
5
|
+
description: "MdWrk documents browser and PWA behavior as governed public product surfaces with static lander evidence."
|
|
6
|
+
h1: "Browser support proof"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "mdwrk browser support proof"
|
|
9
|
+
contentType: "docs"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Browser support proof connects product claims to static pages, package surfaces, and verification artifacts."
|
|
13
|
+
faqs:
|
|
14
|
+
- question: "How does MdWrk present browser support?"
|
|
15
|
+
answer: "MdWrk presents browser and PWA behavior through static pages, package documentation, and governed verification artifacts."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Browser support proof connects MdWrk's public product claims to static pages, package surfaces, and verification artifacts. The lander is expected to produce crawlable HTML, Markdown mirrors, sitemap entries, robots policy, LLM files, content indexes, and JSON-LD graph data.
|
|
19
|
+
|
|
20
|
+
This page is intentionally a proof page rather than a marketing claim alone. It points readers toward the artifacts that make browser and PWA support inspectable.
|
|
21
|
+
|
|
22
|
+
The reusable lander package owns proof-page rendering shape. MdWrk owns the browser support facts and the evidence language.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/proof/markdown-support/"
|
|
4
|
+
title: "Markdown Support Proof | MdWrk"
|
|
5
|
+
description: "MdWrk aligns Markdown editing and preview behavior with reusable renderer and editor package surfaces."
|
|
6
|
+
h1: "Markdown support proof"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "mdwrk markdown support proof"
|
|
9
|
+
contentType: "docs"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Markdown support proof keeps the product page, renderer package, editor package, and static examples aligned."
|
|
13
|
+
faqs:
|
|
14
|
+
- question: "How does MdWrk prove Markdown support?"
|
|
15
|
+
answer: "MdWrk links Markdown support claims to renderer and editor packages, examples, documentation, and generated public artifacts."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Markdown support proof keeps MdWrk's product page, renderer package, editor package, and static examples aligned. The public site should not make Markdown claims that are disconnected from package behavior.
|
|
19
|
+
|
|
20
|
+
The renderer and editor package families are the most important reusable surfaces for Markdown behavior. They let the product, docs, examples, and future integrations rely on a common implementation story.
|
|
21
|
+
|
|
22
|
+
This proof page is product-specific. The portable lander package only supplies the proof matrix and page rendering shape.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/proof/package-surfaces/"
|
|
4
|
+
title: "Package Surfaces Proof | MdWrk"
|
|
5
|
+
description: "MdWrk exposes reusable package surfaces separately from the MdWrk-specific marketing and documentation content pack."
|
|
6
|
+
h1: "Package surfaces proof"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "mdwrk package surfaces proof"
|
|
9
|
+
contentType: "docs"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "Package surface proof explains the split between generic lander packages and MdWrk-specific content truth."
|
|
13
|
+
faqs:
|
|
14
|
+
- question: "What does package surface proof show?"
|
|
15
|
+
answer: "It shows that reusable packages own shape and behavior while MdWrk content owns product claims, positioning, pages, and proof language."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Package surfaces proof explains the split between generic lander packages and MdWrk-specific content truth. The reusable package family owns contracts, compiler behavior, React sections, schema builders, SEO utilities, theme tokens, and Markdown/frontmatter bridging.
|
|
19
|
+
|
|
20
|
+
MdWrk owns product name, positioning, claims, features, FAQs, comparison facts, package descriptions, proof language, screenshots, CTAs, and docs links. That separation makes the lander package reusable across other product websites.
|
|
21
|
+
|
|
22
|
+
This proof page is also a guardrail. Future product packs should be able to reuse the lander engine without inheriting MdWrk-specific prose or package claims.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/security/"
|
|
4
|
+
title: "MdWrk security notes for packages, extensions, and static docs"
|
|
5
|
+
description: "MdWrk security notes explain package boundaries, extension trust, static content verification, robots policy, and deployable artifact checks."
|
|
6
|
+
h1: "Security notes"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "MdWrk security documentation"
|
|
9
|
+
contentType: "security"
|
|
10
|
+
updatedAt: "2026-05-04"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "MdWrk security documentation focuses on package boundaries, extension trust, static build verification, link integrity, and public artifacts that can be inspected before deployment."
|
|
13
|
+
parent: "/"
|
|
14
|
+
related:
|
|
15
|
+
- "/privacy/"
|
|
16
|
+
tags:
|
|
17
|
+
- security
|
|
18
|
+
- verification
|
|
19
|
+
- extensions
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
MdWrk security documentation explains how the public lander and product surfaces should be reviewed. The static compiler is part of that posture because it verifies source content and generated artifacts before deployment.
|
|
23
|
+
|
|
24
|
+
## Package Boundaries
|
|
25
|
+
|
|
26
|
+
Reusable packages should have clear responsibilities. Editor, renderer, extension host, theme contract, and static lander surfaces should not blur into one unreviewable runtime.
|
|
27
|
+
|
|
28
|
+
## Extension Trust
|
|
29
|
+
|
|
30
|
+
Extensions need explicit trust policy. The documentation should describe manifest metadata, compatibility expectations, package identity, and how users can reason about what an extension is allowed to do.
|
|
31
|
+
|
|
32
|
+
## Static Artifact Verification
|
|
33
|
+
|
|
34
|
+
The public lander build verifies HTML, links, JSON-LD, sitemap output, robots policy, LLM index files, Markdown mirrors, and the content registry. These checks help prevent empty app shells or hidden primary content from being treated as deployable.
|
|
35
|
+
|
|
36
|
+
## Deployment Smoke Checks
|
|
37
|
+
|
|
38
|
+
Production URL checks are post-deploy smoke checks. They should verify that the deployed response contains expected content, but they should not be required to create a valid deployable artifact.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: "mdwrk.page.v1"
|
|
3
|
+
slug: "/trust/privacy-boundary/"
|
|
4
|
+
title: "Privacy Boundary | MdWrk"
|
|
5
|
+
description: "MdWrk keeps normal authoring local-first and makes sync, export, repository movement, and hosted integrations explicit boundaries."
|
|
6
|
+
h1: "Privacy boundary"
|
|
7
|
+
entity: "MdWrk"
|
|
8
|
+
intent: "mdwrk privacy boundary"
|
|
9
|
+
contentType: "privacy"
|
|
10
|
+
updatedAt: "2026-05-05"
|
|
11
|
+
author: CobyCloud
|
|
12
|
+
subtitle: "The privacy boundary explains what stays local by default and when content intentionally crosses into an integration."
|
|
13
|
+
faqs:
|
|
14
|
+
- question: "What is MdWrk's privacy boundary?"
|
|
15
|
+
answer: "MdWrk keeps normal Markdown authoring local-first and treats sync, export, repository movement, and hosted integrations as explicit boundaries."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
MdWrk's privacy boundary starts with local-first authoring. Normal Markdown writing, preview, and workspace organization should be understandable without requiring a hosted authoring backend.
|
|
19
|
+
|
|
20
|
+
That does not mean every workflow is offline-only. Sync, export, repository movement, package discovery, and deployment can cross a network boundary, but those paths should be visible choices rather than hidden defaults.
|
|
21
|
+
|
|
22
|
+
This trust page belongs to the MdWrk content pack. The reusable lander engine renders trust and proof pages without knowing this specific privacy position.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://mdwrk.com/schemas/article-metadata.schema.json",
|
|
4
|
+
"title": "MdWrk Article Metadata Header",
|
|
5
|
+
"description": "Frontmatter metadata schema for MdWrk documentation and product update articles.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"oneOf": [
|
|
8
|
+
{
|
|
9
|
+
"title": "Documentation article metadata",
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": [
|
|
12
|
+
"title",
|
|
13
|
+
"slug",
|
|
14
|
+
"section",
|
|
15
|
+
"sectionOrder",
|
|
16
|
+
"order",
|
|
17
|
+
"toc",
|
|
18
|
+
"date",
|
|
19
|
+
"status",
|
|
20
|
+
"excerpt"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"title": { "$ref": "#/$defs/nonEmptyString" },
|
|
24
|
+
"subtitle": { "$ref": "#/$defs/subtitle" },
|
|
25
|
+
"slug": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^[a-z0-9][a-z0-9/-]*$"
|
|
28
|
+
},
|
|
29
|
+
"section": { "$ref": "#/$defs/nonEmptyString" },
|
|
30
|
+
"sectionOrder": { "$ref": "#/$defs/numericString" },
|
|
31
|
+
"order": { "$ref": "#/$defs/integerString" },
|
|
32
|
+
"toc": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"enum": ["true", "false"]
|
|
35
|
+
},
|
|
36
|
+
"date": { "$ref": "#/$defs/isoDate" },
|
|
37
|
+
"status": { "$ref": "#/$defs/articleStatus" },
|
|
38
|
+
"excerpt": { "$ref": "#/$defs/excerpt" },
|
|
39
|
+
"author": { "$ref": "#/$defs/nonEmptyString" },
|
|
40
|
+
"displayAuthor": { "type": "boolean" },
|
|
41
|
+
"featuredImage": { "$ref": "#/$defs/imagePath" },
|
|
42
|
+
"featuredImageAlt": { "$ref": "#/$defs/nonEmptyString" },
|
|
43
|
+
"relatedApis": { "$ref": "#/$defs/commaList" }
|
|
44
|
+
},
|
|
45
|
+
"additionalProperties": false
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"title": "Product update article metadata",
|
|
49
|
+
"type": "object",
|
|
50
|
+
"required": [
|
|
51
|
+
"title",
|
|
52
|
+
"date",
|
|
53
|
+
"status",
|
|
54
|
+
"author",
|
|
55
|
+
"excerpt"
|
|
56
|
+
],
|
|
57
|
+
"properties": {
|
|
58
|
+
"title": { "$ref": "#/$defs/nonEmptyString" },
|
|
59
|
+
"subtitle": { "$ref": "#/$defs/subtitle" },
|
|
60
|
+
"date": { "$ref": "#/$defs/isoDate" },
|
|
61
|
+
"status": { "$ref": "#/$defs/articleStatus" },
|
|
62
|
+
"author": { "$ref": "#/$defs/nonEmptyString" },
|
|
63
|
+
"excerpt": { "$ref": "#/$defs/excerpt" },
|
|
64
|
+
"featuredImage": { "$ref": "#/$defs/imagePath" },
|
|
65
|
+
"featuredImageAlt": { "$ref": "#/$defs/nonEmptyString" }
|
|
66
|
+
},
|
|
67
|
+
"additionalProperties": false
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"$defs": {
|
|
71
|
+
"nonEmptyString": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"minLength": 1
|
|
74
|
+
},
|
|
75
|
+
"excerpt": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"minLength": 40,
|
|
78
|
+
"maxLength": 280
|
|
79
|
+
},
|
|
80
|
+
"subtitle": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"minLength": 20,
|
|
83
|
+
"maxLength": 280
|
|
84
|
+
},
|
|
85
|
+
"isoDate": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
88
|
+
},
|
|
89
|
+
"integerString": {
|
|
90
|
+
"type": "string",
|
|
91
|
+
"pattern": "^\\d+$"
|
|
92
|
+
},
|
|
93
|
+
"numericString": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"pattern": "^\\d+(?:\\.\\d+)?$"
|
|
96
|
+
},
|
|
97
|
+
"articleStatus": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"enum": ["draft", "published"]
|
|
100
|
+
},
|
|
101
|
+
"commaList": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"minLength": 1
|
|
104
|
+
},
|
|
105
|
+
"imagePath": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"minLength": 1,
|
|
108
|
+
"pattern": "^(https?://|/)[^\\s]+$"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
content:
|
|
2
|
+
- id: legal/privacy
|
|
3
|
+
file: ./markdown/legal/privacy.md
|
|
4
|
+
- id: legal/terms
|
|
5
|
+
file: ./markdown/legal/terms.md
|
|
6
|
+
- id: blog/client-split-out-backstory
|
|
7
|
+
file: ./markdown/blog/client-split-out-backstory.md
|
|
8
|
+
- id: blog/markdown-workspace-launch
|
|
9
|
+
file: ./markdown/blog/markdown-workspace-launch.md
|
|
10
|
+
- id: blog/responsive-authoring-and-export
|
|
11
|
+
file: ./markdown/blog/responsive-authoring-and-export.md
|
|
12
|
+
- id: blog/pwa-install-and-zoom-controls
|
|
13
|
+
file: ./markdown/blog/pwa-install-and-zoom-controls.md
|
|
14
|
+
- id: blog/governed-releases-and-package-docs
|
|
15
|
+
file: ./markdown/blog/governed-releases-and-package-docs.md
|
|
16
|
+
- id: blog/extension-compatibility-and-publish-gates
|
|
17
|
+
file: ./markdown/blog/extension-compatibility-and-publish-gates.md
|
|
18
|
+
- id: blog/screenshot-matrix-and-browser-sidebars
|
|
19
|
+
file: ./markdown/blog/screenshot-matrix-and-browser-sidebars.md
|
|
20
|
+
- id: blog/retained-client-versions-and-desktop-shell
|
|
21
|
+
file: ./markdown/blog/retained-client-versions-and-desktop-shell.md
|
|
22
|
+
- id: blog/desktop-release-and-android-verification
|
|
23
|
+
file: ./markdown/blog/desktop-release-and-android-verification.md
|
|
24
|
+
- id: blog/workspace-files-and-git-ops-packages
|
|
25
|
+
file: ./markdown/blog/workspace-files-and-git-ops-packages.md
|
|
26
|
+
- id: blog/extension-host-rollout
|
|
27
|
+
file: ./markdown/blog/extension-host-rollout.md
|
|
28
|
+
- id: blog/docs-surface-realignment
|
|
29
|
+
file: ./markdown/blog/docs-surface-realignment.md
|
|
30
|
+
- id: blog/settings-simplification-for-daily-flow
|
|
31
|
+
file: ./markdown/blog/settings-simplification-for-daily-flow.md
|
package/data/content.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { parseMarkdown } from '../utils/markdownParser';
|
|
2
|
+
import { isPublishedMetadata } from '../utils/publication';
|
|
3
|
+
import sitemapRaw from './content-sitemap.yaml?raw';
|
|
4
|
+
|
|
5
|
+
interface ContentSitemapEntry {
|
|
6
|
+
id: string;
|
|
7
|
+
file: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const parseContentSitemap = (raw: string): ContentSitemapEntry[] => {
|
|
11
|
+
const entries: ContentSitemapEntry[] = [];
|
|
12
|
+
const lines = raw.split('\n').map(line => line.trim()).filter(Boolean);
|
|
13
|
+
|
|
14
|
+
let current: Partial<ContentSitemapEntry> = {};
|
|
15
|
+
|
|
16
|
+
for (const line of lines) {
|
|
17
|
+
if (line.startsWith('- id:')) {
|
|
18
|
+
if (current.id && current.file) {
|
|
19
|
+
entries.push({ id: current.id, file: current.file });
|
|
20
|
+
}
|
|
21
|
+
current = { id: line.replace('- id:', '').trim() };
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (line.startsWith('file:')) {
|
|
26
|
+
current.file = line.replace('file:', '').trim();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (current.id && current.file) {
|
|
31
|
+
entries.push({ id: current.id, file: current.file });
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return entries;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const rawContentFiles = import.meta.glob('./markdown/**/*.md', {
|
|
38
|
+
eager: true,
|
|
39
|
+
query: '?raw',
|
|
40
|
+
import: 'default'
|
|
41
|
+
}) as Record<string, string>;
|
|
42
|
+
|
|
43
|
+
const sitemapEntries = parseContentSitemap(sitemapRaw);
|
|
44
|
+
|
|
45
|
+
export const contentFiles = sitemapEntries.reduce<Record<string, string>>((acc, entry) => {
|
|
46
|
+
const content = rawContentFiles[entry.file];
|
|
47
|
+
if (content) {
|
|
48
|
+
const { metadata } = parseMarkdown(content);
|
|
49
|
+
if (!isPublishedMetadata(metadata)) {
|
|
50
|
+
return acc;
|
|
51
|
+
}
|
|
52
|
+
acc[entry.id] = content;
|
|
53
|
+
}
|
|
54
|
+
return acc;
|
|
55
|
+
}, {});
|