What Cr_oss is and how it's shaped
A first pass for someone new to the repo: the product, then the code-verified topology and source layout.
System topology
There is no server-side component. The production manifest points Outlook at a static Vercel deployment; the dev manifest points at a local HTTPS Vite server.
flowchart LR
subgraph Outlook["Outlook (web / new / classic desktop)"]
Draft["Compose draft body"]
Pane["Task pane (iframe/webview)"]
end
subgraph Static["Static hosting"]
Vercel["cr-oss-track.vercel.app<br/>(prod, manifest.xml)"]
Local["https://localhost:5173<br/>(dev, manifest.dev.xml)"]
end
CDN["appsforoffice.microsoft.com<br/>office.js"]
Pane -->|loads index.html| Vercel
Pane -.->|dev sideload| Local
Pane -->|script src| CDN
Pane <-->|"getAsync / setAsync<br/>getSelectedDataAsync"| Draft
- The two manifests carry different add-in IDs so prod and dev can be
sideloaded side by side:
a1b2c3d4-…(manifest.xml:9) vsb2c3d4e5-…(manifest.dev.xml:9). - Both request only
ReadWriteItempermission, Mailbox requirement set 1.1, and activate only on compose (FormType="Edit"rule,manifest.xml:34,41). - Office.js is loaded synchronously from Microsoft's CDN before the module
script (
index.html);officeReady()wrapsOffice.onReady()and React mounts only after it resolves (src/main.tsx,src/outlook/officeReady.ts:7). Outside a compose context the UI renders but controls are disabled (src/App.tsx:14-15) — there is no standalone browser mode.