SPFx web part to embed SAP Signavio process diagrams in SharePoint with adjustable size.
SharePoint's built-in embed web part only renders iframes, which leaves no way to control
how large an embedded SAP Signavio diagram appears on the page. spfx-procview is a
SharePoint Framework web part that takes the "Simple image" link of a shared Signavio
diagram and displays it directly — no iframe — at a configurable size, with an optional
caption, an optional link to the Signavio Collaboration Hub, optional zoom and a full-screen
view; it follows the page and section theme, works as a Microsoft Teams tab and speaks
English, German, French and Spanish. It is built to be deployed tenant-wide by IT and
designed so that further process tools can be supported later.
Open source under the Apache-2.0 licence, built with SharePoint Framework 1.23.2. The screenshots come from the local workbench; on SharePoint pages the web part looks the same.
- The diagram as an image — no iframe, no sign-in for readers; the link shows the diagram as it currently is in SAP Signavio
- Size you control — width in pixels or percent of the column, height in pixels, or automatic; never wider than the column, never distorted; aligned left, centred or right
- Caption and Collaboration Hub link — optional text below the diagram and a link to the interactive diagram in SAP Signavio, below the diagram or on it
- Zoom and full screen — optional zoom with mouse, keyboard and touch; a full-screen view of the diagram alone
- Readable everywhere — a colour behind the transparent diagram, colours that follow the site and section theme, and the Teams theme in a Teams tab
- Clear messages — editors see what is wrong and how to fix it, readers a short note
- Accessible and multilingual — keyboard and screen-reader support; texts in English, German, French and Spanish
- Privacy-friendly — no cookies, no telemetry, no API of its own; image requests send no referrer
Released: the latest release
carries the solution package spfx-procview.sppkg, its SHA-256 checksum and the third-party
notices; IT deploys it as described in docs/deployment.md. All planned
features are implemented — display and sizing, caption, Collaboration Hub link, empty and error
states, texts in English, German, French and Spanish, theme colours per section, zoom and pan,
full-screen view, a background behind the diagram, and Microsoft Teams tabs. What each release
changed is in CHANGELOG.md; the roadmap is in PROGRESS.md.
- Get the link in SAP Signavio: select the diagram, then Share → Embed diagram. If the options are disabled, click "Share diagram for read-only access". Copy the link from the "Simple image" tab — not the embed code.
- Add "Process diagram (ProcView)" to a SharePoint page (group "Planning and process"). Click Configure in the web part (or its edit button) and paste the link into Diagram → Image link. The diagram appears right away.
- Adjust it if needed — alternative text, size, caption, hub link, zoom and full screen; see Settings. Then republish the page.
Shared "Simple image" links are readable by anyone who has them — embed only diagrams that are approved for that kind of sharing.
The property pane lists the settings in the order editors work through them. Every default also applies to web parts saved before the setting existed.
| Group | Setting | Values | Default | Notes |
|---|---|---|---|---|
| Diagram | Image link | The "Simple image" link from SAP Signavio | — | Checked while you type; the embed code and other links are rejected with a hint (see Messages) |
| Diagram | Alternative text | Text | "Process diagram" | Read by screen readers instead of the image — describe what the diagram shows |
| Size and alignment | Maximum size | Information only | — | The diagram's natural size, shown once it has loaded, e.g. "Maximum size: 720 × 457 px" |
| Size and alignment | Width | Pixels (800), percent of the column (50%) or empty |
Automatic | 1–10,000 pixels or 1–100 %; never wider than the column; with only a width set, the height follows the proportions |
| Size and alignment | Height | Pixels (600) or empty |
Automatic | 1–10,000 pixels, no percent (a column has no fixed height); with a fixed height the diagram is fitted into the box, never distorted |
| Size and alignment | Alignment | Left, centre, right | Centre | Positions a diagram that is narrower than its column |
| Caption | Text | Text | Empty (no caption) | Shown below the diagram |
| Caption | Alignment | Left, centre, right | Centre | Applies to the caption only |
| Collaboration Hub link | Show link to the Collaboration Hub | On, off | Off | A link to the interactive diagram, derived from the image link; opens in a new tab. Readers need access to SAP Signavio to open it |
| Collaboration Hub link | Link text | Text | "Open in Signavio" | Shown while the link is on |
| Collaboration Hub link | Position | Below the diagram, on the diagram (bottom right) | Below the diagram | On the diagram, the link is always visible, not only on hover |
| Collaboration Hub link | Alignment | Left, centre, right | Right | Only for the position below the diagram |
| Viewing | Offer zoom | On, off | Off | Zoom controls on the diagram — see Zoom and full screen |
| Viewing | Offer full screen | On, off | On | A button on the diagram that opens it alone on a dark layer |
| Viewing | Background behind the diagram | On, off | On | A colour exactly behind the diagram — Signavio images are transparent and hard to read on dark or coloured sections. Applies in full screen too; switched off, the diagram stays transparent there as well |
| Viewing | Background color | The browser's colour picker | White | Shown while the background is on |
| About | Source code and documentation on GitHub | Link | — | Opens this repository; the web part's version (e.g. "Version 1.0.0") is shown below it |
Width or height larger than the maximum size enlarge the image beyond its natural size, and it becomes blurry. The group Visibility ("Show in mobile and email view") at the end of the pane belongs to SharePoint, not to this web part.
Readers use these controls; editors switch them on under Viewing. Zoom is available while the diagram is shown noticeably smaller than its natural size, and it stops at the natural size, so the diagram stays sharp. The keys work while the diagram has the keyboard focus (reach it with Tab).
| Action | Mouse | Keyboard | Touch |
|---|---|---|---|
| Zoom in, zoom out | + and − top right on the diagram; Ctrl (Cmd on a Mac) + mouse wheel | + (or =), - |
Two-finger pinch |
| Fit to the frame | Fit to frame button | 0 |
Pinch until the diagram fits |
| Move while zoomed in | Drag with the left mouse button | Arrow keys | Drag with one finger |
| Open full screen | Full screen button top right on the diagram | Tab to the button, Enter or Space | Tap the button |
| Close full screen | Close button top right, or a click next to the diagram | Escape | Tap Close or next to the diagram |
- The plain mouse wheel and one-finger swipes keep scrolling the page while the diagram is shown at its configured size. The zoom buttons appear only while zooming is possible.
- Full screen shows nothing but the diagram on a dark layer — at its natural size, or smaller to fit the window. When it had to be made smaller, it can be zoomed there too, even with "Offer zoom" switched off. Otherwise a pinch magnifies the page as usual.
Editors see what is wrong and how to fix it, with a Configure button that opens the settings. Readers see a short message — or nothing at all while no link is set.
| Situation | Editors see | Readers see | What to do |
|---|---|---|---|
| No link yet | "Add a process diagram" with the steps in SAP Signavio, and Configure | Nothing — the web part stays empty | Paste the "Simple image" link |
| The link cannot be used (e.g. the embed code, an incomplete link, a link from another tool) | "This link cannot be displayed" with the reason, and Configure | "The diagram is currently unavailable." | Copy the link again from the "Simple image" tab in SAP Signavio |
| The image could not be loaded | "The diagram could not be loaded" with the possible causes — sharing turned off in SAP Signavio, an incomplete or outdated link, a network, firewall or proxy blocking the Signavio domain — and Configure | "The diagram could not be loaded." — plus the Collaboration Hub link, if it is switched on | Check the read-only sharing in SAP Signavio, copy the link again, or ask IT to allow the Signavio host (see For IT) |
| A security policy of the site blocks the image | "Images from host are blocked" — a security policy of this site prevents loading the diagram | "The diagram could not be loaded." — plus the Collaboration Hub link, if it is switched on | Ask the SharePoint administrator to allow the domain |
A failed load counts only for the link it happened with: changing the link, or entering it again, loads the diagram again.
The property pane also checks the fields while you type and names the problem below them:
- Image link — the embed code instead of the link, an image link that is not the "Simple
image" link, a missing or invalid access key or diagram id, an address that does not start
with
https://, a Signavio address that is not supported, or a link from a tool other than SAP Signavio. Each message says what to copy instead. - Width and height — anything other than pixels, a percentage (width only) or empty; more than 10,000 pixels; a percentage outside 1–100 %.
All colours follow the site theme and the section the web part sits in — also on a coloured or dark section background (messages, the "Configure" button, links and the focus outline take the section's colours). Everything is reachable with the keyboard with a visible focus outline; the diagram has an alternative text (default "Process diagram"), links to Signavio announce that they open a new tab, and Windows high-contrast mode and "reduce motion" are respected.
The web part shows its texts (settings, messages, toolbox entry) in the language SharePoint uses for the page — English, German, French or Spanish; any other language falls back to English. Instructions name the Signavio menu items as Signavio shows them in that language (German: Freigeben → Diagramm einbetten, tab "Einfaches Bild", taken from the German Signavio UI). French uses the labels of the machine-translated French SAP Signavio user guide (Partager → Incorporer un diagramme, tab "Image simple") and Spanish the English labels (no Spanish Signavio documentation exists) — neither is verified against the Signavio UI. Have the French and Spanish texts reviewed by native speakers before production use. Texts that editors enter (caption, alternative text, link text) are shown as entered — translate them with SharePoint's multilingual pages if needed.
- Where: as a tab in a Teams channel — the settings appear when the tab is added. The web part is not offered as a personal Teams app: personal apps show no settings, so no diagram link could ever be entered.
- Themes: in Teams' dark and high-contrast themes the web part switches to matching colours (via the Teams SDK that SPFx provides); in Teams' default (light) theme it keeps the SharePoint site theme. The background behind the diagram keeps it readable in every theme.
- Limits: full screen covers the tab, not the whole Teams window.
Requirements: SharePoint Online with modern pages, and Microsoft Teams channel tabs. The package asks for no API permissions and needs no sign-in to SAP Signavio; the readers' browsers load the diagram directly from the Signavio host of the link.
Deployment: the step-by-step guide for IT is docs/deployment.md — download and checksum verification, first deployment, Microsoft Teams, updates, removal, network and privacy, and a check on the first page. In short:
- Package:
spfx-procview.sppkgfrom the latest release, with its SHA-256 checksum. Releases are immutable and carry a signed release attestation —gh release verify-assetshows that a downloaded package is the one GitHub published. The package can also be built from source withjust build(see Development). - Deploy: upload the package to the tenant (or a site collection) App Catalog. The
solution uses
skipFeatureDeployment, so it can be made available to all sites at once. - Teams: select Add to Teams while uploading, or later for the app on the Manage apps page; the app then shows up in Teams under the organisation's apps.
- Updates: every release has a higher version — the App Catalog only treats a package as an update when its version is higher. Upload the new package with the same file name and replace the old one; pages keep their settings (CHANGELOG.md lists what changed).
Firewall and proxy: the readers' browsers need HTTPS access to the SAP Signavio host your organisation uses. The web part accepts links from exactly these hosts:
| Host | Region |
|---|---|
editor.signavio.com |
Europe |
app-us.signavio.com |
United States |
app-au.signavio.com |
Australia |
app-ca.signavio.com |
Canada |
app-jp.signavio.com |
Japan |
app-kr.signavio.com |
South Korea |
app-sgp.signavio.com |
Singapore |
The diagram is loaded from https://<host>/p/model/<diagram id>/png?authkey=…; the
Collaboration Hub link opens https://<host>/p/portal#/model/<diagram id>.
Privacy: see Privacy — shared "Simple image" links are readable by anyone who has them.
The web part stores only its own settings (e.g. the diagram link) in the SharePoint page. It sets no cookies, sends no telemetry and calls no API of its own. To display a diagram, each visitor's browser loads the image directly from the configured process tool (for Signavio: the SAP Signavio host of the shared link) — like any embedded image, that request reveals the visitor's IP address and browser details to the tool's provider. Image requests and the Collaboration Hub link send no referrer, so the tool does not learn which SharePoint page embeds the diagram. Shared "Simple image" links are readable by anyone who has them; embed only diagrams approved for that kind of sharing.
Why not SharePoint's own Embed web part? It shows iframes only, and their size cannot be controlled from the page. This web part shows the diagram as an image, at the size you choose.
Why the "Simple image" link and not the embed code? One clear input: the embed code's viewer shows the very same image. If you paste the embed code, the pane says what to copy instead.
Does the diagram change when it changes in SAP Signavio? Yes — the link shows the diagram as it currently is in SAP Signavio, and the page loads it fresh every time.
Do readers need a Signavio account? Not to see the diagram. To open the Collaboration Hub link, they need access to SAP Signavio.
The diagram looks blurry. Its width or height is set larger than the maximum size shown in the pane, which enlarges the image. Set at most the maximum size, or offer zoom instead.
There are no zoom buttons. "Offer zoom" is off by default. Switched on, the buttons appear only while the diagram is shown noticeably smaller than its natural size.
Can I use it with process tools other than SAP Signavio? Not yet — the provider interface
in src/providers/ is prepared for further tools.
Does it work on classic pages or in SharePoint Server? No — modern pages in SharePoint Online and Teams channel tabs only.
In the local workbench, the web part says "Add a process diagram" although a link is entered. A known bug of SPFx Local Workbench 0.2.0 — see Testing locally.
Toolchain is pinned via mise; everything else follows from it:
mise install # toolchain (incl. just, lefthook, gitleaks)
just setup # dependencies + git hooks
just check # full gate: format check, lint, types, tests
| Recipe | Purpose |
|---|---|
just setup |
Install dependencies and git hooks |
just dev |
Run the project locally |
just test |
Run the test suite |
just lint |
Static analysis |
just format |
Auto-format the codebase |
just check |
The full gate — must be green before every commit |
just build |
Production build |
Built with SharePoint Framework 1.23.2 (Heft toolchain, no UI framework) on Node 22.
Node 22 via mise. The recipes call npx, so they run on whatever Node your shell
provides. Either activate mise in your shell (eval "$(mise activate zsh)" in ~/.zshrc) or
prefix commands with mise exec -- (e.g. mise exec -- just check).
This project does not use the SharePoint online workbench — Microsoft deprecated it with SPFx 1.23 and retires it on 2026-12-01. The web part is viewed locally with a VS Code extension, and on real SharePoint pages with the SPFx Debug Toolbar.
One-time setup:
- Install the VS Code extension SPFx Local Workbench
(
m365pnp.pnp-spfx-local-workbench, community/PnP, MIT). - Trust the development certificate once per machine — the dev server runs on
https://localhost:4321:mise exec -- npx heft trust-dev-cert(asks for your admin password; the self-signed certificate is valid forlocalhostonly; remove it withmise exec -- npx heft untrust-dev-cert). Without a trusted certificate, starting the dev server opens that admin-password prompt on its own.
Daily use: Command Palette → "SPFx Local Workbench: Start SPFx Serve and Open
Workbench". The project's .vscode/settings.json makes the extension serve via mise
(Node 22). Alternatively run just dev and use "SPFx Local Workbench: Open Local
Workbench". Add "Process diagram (ProcView)" to the canvas and configure it in the property
pane.
Known issue in SPFx Local Workbench 0.2.0: it turns every text value containing a colon —
every URL — into a Dynamic-Data object before it reaches the web part, so a pasted image link
arrives as "empty" and the web part shows "Add a process diagram" instead of the diagram.
SharePoint itself is not affected. Until a fixed extension release exists, a local patch
helps: in the extension's dist/webview/webview.js, the condition
if(typeof r!="string"||!r.includes(":"))return r; (applied to properties not declared as
dynamic) becomes a plain return r;, so text values with a colon stay text — keep a copy of
the file, and note that an extension update undoes the patch.
Testing themes: the workbench's theme picker passes the chosen theme to the web part, just as SharePoint passes a section's colours — a dark theme such as "Dark Teal" shows how messages, buttons, links and the focus outline look on a dark section. With only a diagram on the canvas little changes (the image itself is not themed); add the hub link or clear the image link to see the themed elements. Real section backgrounds exist only in SharePoint.
Testing a language: stop the dev server, run just dev de-de (any file name from
src/webparts/procView/loc/) in a terminal, then use "SPFx Local Workbench: Open Local
Workbench" — the extension reuses a dev server that is already running. The server then
serves only that language file. The toolbox entry (title and description from the manifest)
stays English in the local workbench; check it on a SharePoint page.
The dev server picks up code changes while running, but not changes to loc/*.js (the
texts): after editing them, restart it — otherwise the workbench shows technical field
names or "undefined" for new texts.
just check and just build clean and rewrite the same build folders the dev server serves
from (and just build writes hashed production bundles). Stop the dev server first, or
restart it afterwards — otherwise the workbench may fail with "Failed to load …" (404).
Microsoft Teams cannot be simulated in the local workbench — check Teams tabs in a test tenant.
For a final check under real conditions (your tenant's themes, policies and network), test in a site you may edit — typically a test site provided by IT:
- Start the dev server:
just dev. - Open a modern page of that site and append
?loadSPFX=true&debugManifestsFile=https://localhost:4321/temp/build/manifests.jsto its URL. SharePoint asks to allow debug scripts and then shows the Debug Toolbar; in edit mode the locally served web part is available in the toolbox. - For debugging from VS Code, edit
{tenantDomain}(and the page path) in.vscode/launch.jsononce and start "SharePoint page (Debug Toolbar)".
- Package:
just buildcreatessharepoint/solution/spfx-procview.sppkg; deploying it is described in For IT. - Teams app icons:
teams/<web part id>_color.png(192 × 192) and_outline.png(32 × 32, white on transparent) are own artwork generated byscripts/teams-icons.mjs(Node built-ins only). Change the motif there and runjust icons;just checkfails when the files no longer match the script. The file names must stay — SPFx packages the icons only under them. - README images:
docs/images/holds the screenshots of this README, taken in the local workbench; they carry no metadata except the colour profile.
- One version:
package.jsonholds it (x.y.z, Semantic Versioning).scripts/sync-version.mjswrites it intoconfig/package-solution.jsonasx.y.z.0, for the solution and its feature;just checkfails when the two differ. The property pane shows the version under "About". - Changes are noted under "Unreleased" in CHANGELOG.md as they are made.
- Cutting a release: stop the dev server (
just checkcleans the folders it serves from), then runjust release x.y.zon a cleanmain.scripts/release.mjsfirst fetchesoriginwith its tags — no release without the network, so its checks see GitHub's state. It refuses a version that is notx.y.z(no leading zeros) or not higher than the latestvx.y.ztag, an existing tag (also one that exists only on GitHub), another branch, amainthat lacks commits oforigin/main(behind or diverged — pull first; being ahead is fine), uncommitted changes, an empty "Unreleased" section and a commit email that is not a GitHub noreply address. It then sets the version (npm versionforpackage.jsonand its lock, the sync for the solution) and moves "Unreleased" under## [x.y.z] - date. The recipe runsjust check, commitschore(release): x.y.zand tagsvx.y.z; it does not push, it prints the push command. Ifjust checkfails, nothing is committed —git restore .undoes the changes. - Publishing: pushing
mainand the tag together (git push --atomic origin main vx.y.z— either both arrive or neither) starts the release workflow (.github/workflows/release.yml). Itsbuildjob, with read access only, checks that the tag matchespackage.jsonand that the tagged commit is onmain, runsjust checkandjust build, and collects the package, its SHA-256 checksum,THIRD-PARTY-NOTICES.mdand the release notes — the version's CHANGELOG section (node scripts/release.mjs --notes x.y.z). Thepublishjob, the only one that may write and only for a pushed tag, then creates the GitHub release with these files usinggh; it runs no project code, so the token that may publish never meetsnpm ciand the install scripts of dependencies. - Immutable releases: the repository publishes immutable releases — once published, a
release's files and its tag cannot be changed, and GitHub attaches a signed release attestation
(
gh release verify-asset vx.y.z spfx-procview.sppkgchecks a downloaded file against it). A published version can never be published again, not even after deleting its release: a broken release is replaced by the next patch version. If publishing fails, delete a leftover draft release of the tag, if there is one, and re-run the failed job — no new tag is needed. - Dry run: start the workflow by hand ("Run workflow" under Actions, or
gh workflow run release.yml) — on a branch or a tag, it does everything but publish, with the "Unreleased" changes (on a tag: that version's section) as notes, and keeps the files as a workflow artifact for seven days. - Higher than the last release: the App Catalog only treats a package as an update when its
version is higher, so a release is compared with the latest tag, not with
package.json. The first release is 1.0.0, the versionpackage.jsonhas had during development. dataVersion(ProcViewWebPart.ts) is the version of the stored settings, not of the release. It stays 1.0 as long as every stored value keeps its meaning — new settings bring a code fallback for pages saved before them. Raise it only when the meaning of a stored value changes, together with the code that converts the old values.
SPFx releases dictate their toolchain (TypeScript, ESLint, Heft, webpack) and the supported
Node major, so an upgrade is always one deliberate task — Renovate only lists new SPFx
releases on its Dependency Dashboard and never bumps the toolchain on its own
(renovate.json, ADR-0001).
- Generate an upgrade report, e.g. with the CLI for Microsoft 365:
npx -p @pnp/cli-microsoft365 m365 spfx project upgrade --shell bash --output md. - Apply all steps together — SPFx packages, toolchain packages,
mise.tomlNode major,enginesinpackage.json,Noderule inrenovate.json, and the SPFx version named in this README. just checkandjust buildmust be green; re-checknpm auditagainst ADR-0001 and ADR-0002 (drop theqsoverride once the toolchain ships a fixed version).
Deadline: SPFx 1.23 supports Node 22 only, and Node 22 reaches end of life on 2027-04-30 — an upgrade to an SPFx release on a newer Node must land before then.
REQUIREMENTS.md— intent (transitional; dissolved intoPROGRESS.md)PROGRESS.md— roadmap and task list;PROGRESS-ARCHIVE.md— finished tasks with detailsCHANGELOG.md— changes per releasedocs/adr/— architecture decisions (ADR-0001: SPFx platform licences and toolchain advisories; ADR-0002: thenode-forgetoolchain advisory)CODING-STANDARDS.md— binding coding rulesHOW-TO-CODE-WITH-CLAUDE.md— development workflow (Claude Code + coding-kit skills)CONTRIBUTING.md,SECURITY.md,AI-DISCLOSURE.md— governance
Apache-2.0 — see LICENSE. The solution package also contains small third-party
helpers compiled into the bundle; their licences are listed in
THIRD-PARTY-NOTICES.md. just check rejects any dependency that is
not under a permissive licence (scripts/licence-check.mjs, ADR-0001 exceptions).
ProcView (spfx-procview) is an independent open-source project. It is not affiliated with, endorsed by, sponsored by, or connected to SAP SE, SAP Signavio, Microsoft, or any of their affiliates. SAP, SAP Signavio and Signavio are trademarks or registered trademarks of SAP SE or its affiliates; Microsoft, SharePoint and Microsoft Teams are trademarks of the Microsoft group of companies. All trademarks are the property of their respective owners and are used only for nominative identification of the supported process tool and platform.





