From 32d1478ac99c1ed2440fd5c9806b0e6ba3c5b5d3 Mon Sep 17 00:00:00 2001 From: Liam Randall Date: Fri, 29 May 2026 15:17:01 -0400 Subject: [PATCH] DRAFT Doc pages linked back to community pages Signed-off-by: Liam Randall --- docs/runtime/creating-host-plugins.mdx | 79 ++++++++++++++++ src/styles/index.css | 1 + src/styles/theme/_community-callout.css | 45 ++++++++++ .../components/community-calls/index.tsx | 66 ++++++++++++++ .../community-calls/styles.module.css | 90 +++++++++++++++++++ src/theme/wasmcloud/index.ts | 4 + 6 files changed, 285 insertions(+) create mode 100644 src/styles/theme/_community-callout.css create mode 100644 src/theme/wasmcloud/components/community-calls/index.tsx create mode 100644 src/theme/wasmcloud/components/community-calls/styles.module.css diff --git a/docs/runtime/creating-host-plugins.mdx b/docs/runtime/creating-host-plugins.mdx index 8dec5080e..2af767695 100644 --- a/docs/runtime/creating-host-plugins.mdx +++ b/docs/runtime/creating-host-plugins.mdx @@ -6,12 +6,91 @@ toc_max_heading_level: 2 description: 'Create wasmCloud host plugins that extend the runtime with new capabilities — implement WASI interfaces and ship custom integrations to any Wasm host.' --- +import CommunityCalls from '@theme/wasmcloud/components/community-calls'; + ### Extend wasmCloud hosts with additional capabilities. The `wash-runtime` crate includes [built-in support](../overview/hosts/plugins.mdx) for common WASI interfaces like HTTP, key-value, and configuration. When you need to provide capabilities that aren't covered by the built-ins—such as integrating with a proprietary database, exposing specialized hardware, or implementing a custom protocol—you can create a custom plugin. A host plugin is primarily responsible for implementing a specific WIT world as a collection of imports and exports that will be directly linked to the workload's `wasmtime::component::Linker`. +{/* ===================== POC: "Discussed in community meetings" info-bar ===================== + Three takes shown stacked for comparison. Keep ONE and delete the others (and these + comment markers + the "POC — Take N" labels) once a design is chosen. ============== */} + +**POC — Take 1: native admonition (pure markdown, no component)** + +:::info[Discussed in community meetings] + +- [wasmCloud V2: The Wasm Component Model & a Simplified Host](/community/2025-09-17-community-meeting/) — Sep 17, 2025 + - [12:12 — wRPC layer as an opt-in host plugin](https://youtu.be/vTbKtMkWxBQ?t=732) + - [32:30 — Host plugins in the Wasmtime linker](https://youtu.be/vTbKtMkWxBQ?t=1950) +- [wasmCloud Runtime Crate: Embedding Wasmtime](/community/2025-10-15-community-meeting/) — Oct 15, 2025 + - [17:00 — Host plugins: extending the host without capability providers](https://youtu.be/3DlUjl8gQVs?t=1020) +- [wasmCloud v2 on Kubernetes: Runtime Operator & wash host](/community/2025-11-05-community-meeting/) — Nov 5, 2025 + - [31:25 — Transport plugins, wRPC, and host plugins as providers](https://youtu.be/FbLNlZgzWOU?t=1885) +- [Endive Java Wasm Host, JCO WASI P3 & the Component Model](/community/2026-05-27-community-meeting/) — May 27, 2026 + - [29:22 — Plugin-vs-service decision framework](https://youtu.be/QyVyD37cvrw?t=1762) + +::: + +**POC — Take 2: branded `` component** + + + +**POC — Take 3: compact collapsible strip** + +
+📺 This topic was discussed in 4 community calls + +- [wasmCloud V2: The Wasm Component Model & a Simplified Host](/community/2025-09-17-community-meeting/) — Sep 17, 2025 + - [12:12 — wRPC layer as an opt-in host plugin](https://youtu.be/vTbKtMkWxBQ?t=732) + - [32:30 — Host plugins in the Wasmtime linker](https://youtu.be/vTbKtMkWxBQ?t=1950) +- [wasmCloud Runtime Crate: Embedding Wasmtime](/community/2025-10-15-community-meeting/) — Oct 15, 2025 + - [17:00 — Host plugins: extending the host without capability providers](https://youtu.be/3DlUjl8gQVs?t=1020) +- [wasmCloud v2 on Kubernetes: Runtime Operator & wash host](/community/2025-11-05-community-meeting/) — Nov 5, 2025 + - [31:25 — Transport plugins, wRPC, and host plugins as providers](https://youtu.be/FbLNlZgzWOU?t=1885) +- [Endive Java Wasm Host, JCO WASI P3 & the Component Model](/community/2026-05-27-community-meeting/) — May 27, 2026 + - [29:22 — Plugin-vs-service decision framework](https://youtu.be/QyVyD37cvrw?t=1762) + +
+ +{/* ===================== END POC info-bar ===================== */} + ### The `HostPlugin` trait ```rust diff --git a/src/styles/index.css b/src/styles/index.css index 270ef045a..91f3ca227 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -7,6 +7,7 @@ @import url('./theme/_hubspot.css'); @import url('./theme/_search.css'); @import url('./theme/_admonition.css'); +@import url('./theme/_community-callout.css'); @import url('./theme/_announcement-bar.css'); @import url('./theme/_sidebar.css'); @import url('./_shiki.css'); diff --git a/src/styles/theme/_community-callout.css b/src/styles/theme/_community-callout.css new file mode 100644 index 000000000..c6598cf0f --- /dev/null +++ b/src/styles/theme/_community-callout.css @@ -0,0 +1,45 @@ +/* Take 3 — compact collapsible "Discussed in community meetings" strip. + Applied to a native
in MDX. */ + +details.community-calls-compact { + margin: 0 0 1.5rem; + padding: 0.4rem 0.9rem; + border: 1px solid rgba(var(--wasmcloud-color-base-brand-green) / 0.3); + border-left: 4px solid var(--wasmcloud-color-brand-green); + border-radius: 8px; + background: rgba(var(--wasmcloud-color-base-brand-green) / 0.05); +} + +details.community-calls-compact > summary { + cursor: pointer; + font-weight: 600; + font-size: 0.9rem; + list-style: none; + display: flex; + align-items: center; + gap: 0.5rem; +} + +details.community-calls-compact > summary::-webkit-details-marker { + display: none; +} + +details.community-calls-compact > summary::before { + content: '▸'; + color: var(--wasmcloud-color-brand-green); + font-weight: 700; +} + +details.community-calls-compact[open] > summary::before { + content: '▾'; +} + +details.community-calls-compact[open] > summary { + margin-bottom: 0.5rem; +} + +/* tighten the nested meeting/chapter list inside the compact strip */ +details.community-calls-compact ul { + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} diff --git a/src/theme/wasmcloud/components/community-calls/index.tsx b/src/theme/wasmcloud/components/community-calls/index.tsx new file mode 100644 index 000000000..e5b9eafd4 --- /dev/null +++ b/src/theme/wasmcloud/components/community-calls/index.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import Link from '@docusaurus/Link'; +import styles from './styles.module.css'; + +type Chapter = { t: number; label: string }; +type Meeting = { + title: string; + date: string; + url: string; + videoId: string; + chapters: Chapter[]; +}; + +function formatTime(t: number): string { + const h = Math.floor(t / 3600); + const m = Math.floor((t % 3600) / 60); + const s = t % 60; + const pad = (n: number) => String(n).padStart(2, '0'); + return h > 0 ? `${h}:${pad(m)}:${pad(s)}` : `${m}:${pad(s)}`; +} + +export default function CommunityCalls({ + meetings, + title = 'This topic was discussed in our community calls', +}: { + meetings: Meeting[]; + title?: string; +}): JSX.Element { + return ( + + ); +} diff --git a/src/theme/wasmcloud/components/community-calls/styles.module.css b/src/theme/wasmcloud/components/community-calls/styles.module.css new file mode 100644 index 000000000..3f44e8ade --- /dev/null +++ b/src/theme/wasmcloud/components/community-calls/styles.module.css @@ -0,0 +1,90 @@ +.callout { + margin: 0 0 1.5rem; + padding: 0.9rem 1.1rem; + border: 1px solid rgba(var(--wasmcloud-color-base-brand-green) / 0.3); + border-left: 4px solid var(--wasmcloud-color-brand-green); + border-radius: 8px; + background: rgba(var(--wasmcloud-color-base-brand-green) / 0.06); +} + +.header { + display: flex; + align-items: center; + gap: 0.5rem; + margin: 0 0 0.65rem; + font-weight: 700; + font-size: 0.95rem; +} + +.icon { + font-size: 1.1rem; + line-height: 1; +} + +.meetings { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.7rem; +} + +.meetingRow { + display: flex; + align-items: baseline; + gap: 0.5rem; + flex-wrap: wrap; +} + +.meetingTitle { + font-weight: 600; +} + +.date { + font-size: 0.72rem; + color: var(--ifm-color-emphasis-700); + background: rgba(var(--wasmcloud-color-base-brand-gunmetal) / 0.1); + border-radius: 999px; + padding: 0.05rem 0.55rem; + white-space: nowrap; +} + +.chapters { + list-style: none; + margin: 0.25rem 0 0; + padding: 0 0 0 0.15rem; + display: flex; + flex-direction: column; + gap: 0.1rem; +} + +.chapter { + display: inline-flex; + align-items: baseline; + gap: 0.55rem; + padding: 0.1rem 0; + text-decoration: none; +} + +.chapter:hover { + text-decoration: none; +} + +.chapter:hover .label { + text-decoration: underline; +} + +.time { + flex: none; + font-variant-numeric: tabular-nums; + font-weight: 600; + font-size: 0.8rem; + color: var(--wasmcloud-color-brand-green); + white-space: nowrap; +} + +.label { + color: var(--ifm-font-color-base); + font-size: 0.9rem; +} diff --git a/src/theme/wasmcloud/index.ts b/src/theme/wasmcloud/index.ts index e68c92f31..e09a29945 100644 --- a/src/theme/wasmcloud/index.ts +++ b/src/theme/wasmcloud/index.ts @@ -2,6 +2,10 @@ declare module '@theme/wasmcloud/components/video-modal' { export * from '@site/src/theme/wasmcloud/components/video-modal'; } +declare module '@theme/wasmcloud/components/community-calls' { + export { default } from '@site/src/theme/wasmcloud/components/community-calls'; +} + declare module '@theme/wasmcloud/hooks/use-body-scroll-lock' { export * from '@site/src/theme/wasmcloud/hooks/use-body-scroll-lock'; }