Uitgebreide toolkit om je als Mendix ontwikkelaar bij TOF verder mee te helpen
  • TypeScript 55.8%
  • JavaScript 32.3%
  • CSS 5.8%
  • HTML 5.8%
  • PowerShell 0.3%
Find a file
Chendo de Langen 3410d8c9ed
All checks were successful
CI / build-and-test (push) Successful in 3m55s
Element N6: frame F's small wins, and the 0.119.0 notes
- The page-tools bar states the Esc rule where the tools are ("Esc stopt er
  telkens één"), which is what ADR-0034 has always done but never said out loud.
- On Design ▸ Stijl the status strip carries the inventory figures — colours,
  tokens, !important — instead of the traffic counters, the way frame F shows it.
  Same mechanism as the Element line from N5.
- prefsync's node suite pinned the old default rail order and had been red for two
  commits: I ran smoke but not npm test after reordering the rail. The DoD says
  all suites.
- Release notes and DEV-NOTES for 0.119.0. The bigger gaps the other frames show
  (Stijl's palette as rows per hue family, Overzicht's lenses and its App-review
  card) are written up as a delta table in the brain story instead of squeezed in
  here — they are work of their own, not a by-product.

Verified: tsc, lint, build, node 24/24, smoke 89/89, dist-advanced rebuilt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YT9Y8FQ2yofH3dE2sphN4g
2026-09-04 11:29:15 +02:00
.claude Add repo agents; fix our own injected CSS counting as app CSS 2026-09-01 19:20:50 +02:00
.forgejo/workflows Release workflow: take release tooling from main, build stays pinned to the tag 2026-08-19 08:34:37 +02:00
app Element N6: frame F's small wins, and the 0.119.0 notes 2026-09-04 11:29:15 +02:00
docs docs: volwaardige README (features, werking, preview) + DEV-NOTES eindstand 2026-07-04 15:22:34 +02:00
extension Element N6: frame F's small wins, and the 0.119.0 notes 2026-09-04 11:29:15 +02:00
scripts Redesign M1: warm A+ tokens, split accent, embedded JetBrains Mono (v0.118.0) 2026-09-03 21:22:18 +02:00
store store/EDGE.md: registration requires an MSA, not a work account 2026-08-19 09:30:20 +02:00
tests Element N6: frame F's small wins, and the 0.119.0 notes 2026-09-04 11:29:15 +02:00
.gitattributes M5: polish & release — docs, release notes, README, zip packaging 2026-07-03 15:59:43 +02:00
.gitignore CWS upload zip: strip manifest key, carry key.pem on first upload 2026-08-18 14:41:52 +02:00
CLAUDE.md v0.114.1: resolve all our own AMO linter warnings (19 -> 12) 2026-08-18 18:09:02 +02:00
DEV-NOTES.md Element N6: frame F's small wins, and the 0.119.0 notes 2026-09-04 11:29:15 +02:00
eslint.config.js chore: add ESLint + knip as a permanent quality gate; fix the findings 2026-07-15 08:57:23 +02:00
knip.json chore: add ESLint + knip as a permanent quality gate; fix the findings 2026-07-15 08:57:23 +02:00
LICENSE Accountability: SECURITY.md, THIRD-PARTY.md, CycloneDX SBOM, LICENSE 2026-07-06 18:19:31 +02:00
package-lock.json chore: add ESLint + knip as a permanent quality gate; fix the findings 2026-07-15 08:57:23 +02:00
package.json Element N1: three real columns with their own chrome (frame G, v0.119.0) 2026-09-04 11:02:16 +02:00
PRIVACY.md Correct the store mailbox: chromestore@theorangeforce.com (was a typo) 2026-08-18 14:13:21 +02:00
README.md v0.114.1: resolve all our own AMO linter warnings (19 -> 12) 2026-08-18 18:09:02 +02:00
sbom.cdx.json fix: resolve the CodeRabbit whole-repo review findings (v0.89.0) 2026-07-21 18:47:51 +02:00
SECURITY.md fix: resolve the CodeRabbit whole-repo review findings (v0.89.0) 2026-07-21 18:47:51 +02:00
THIRD-PARTY.md Redesign M1: warm A+ tokens, split accent, embedded JetBrains Mono (v0.118.0) 2026-09-03 21:22:18 +02:00
tsconfig.json M1: scaffold v5.0 rebuild (Preact + Vite, MAIN-world injection) 2026-07-03 15:16:19 +02:00
updates.json Firefox update feed: v0.113.0 2026-08-18 12:21:16 +00:00
vite.config.ts feat: build isolation + Laag B B1 unauthenticated-access test (ADR-0021, v0.101.0) 2026-08-11 21:39:56 +02:00

TOFfe Dev Tools 🧡

A developer, designer & security panel for any running Mendix app — no Studio Pro, no source access.

Browser extension by The Orange Force. It injects a panel into a running, deployed Mendix app and shows you the model, the data, the traffic, the design and the security posture — built entirely from what the Mendix client already exposes, and always within the logged-in user's rights (the runtime enforces its rules; that is exactly what you test).

Mendix 10/11 React client (classic Dojo: traffic capture only). Bilingual (EN default, NL in ⚙). Open it via the floating orb, the extension popup, or a shortcut (default Alt+Shift+T); jump anywhere with the command palette (Alt+Shift+P).

What it does

  • Overview — a one-screen app review: session, domain model, Web Vitals, traffic + errors, accessibility and access. Attention points, an HTML report and a support-bundle JSON.
  • Data — one entity, five lenses: Schema, Records (query & edit with your rights), Graph (instance explorer), Access (the read/create rights matrix per role), and State (live client memory + uncommitted-changes inspector).
  • Security — surfaces common Mendix configuration mistakes a developer can fix, each mapped to a public standard (OWASP · OWASP Low-Code · the S-Unit Top 10): over-broad entity access, unused-but-readable attributes, secrets in client constants or browser storage, sensitive fields on published services, exposed service docs, an end-of-life runtime, missing headers, and more. Observed as your session, same-origin and read-only. (It reports what your configuration allows — it does not break anything. Not a full audit.)
  • Microflows & Pages — run microflows (entity + primitive params), a test console with object-diff & history, open pages.
  • Network & console — decoded XAS traffic, per-operation totals, a timeline, Web Vitals, N+1 & error diagnostics, request replay, and the console.
  • API — discover and try published REST / OData / SOAP services.
  • Design — accessibility audit + client-ready report, page-wide contrast scan, design-token hygiene, CSS source locations (file:line), inline-style detection 🚔, HTML viewer, freeze tool 🧊, colour-blindness simulation, tab-order and a live theme playground.

The panel docks bottom/right, or ⧉ moves to its own window (app on one screen, tools on the other). Reads and writes go through the runtime; destructive actions confirm first.

Use it on your own apps, and use it responsibly.

Trust & security

For whoever approves installing this at a client — about the normal (Web Store) build:

  • Runs locally in your browser. No telemetry, no analytics, zero external calls. Outbound requests target the Mendix app's own origin only, on explicit user action.
  • Sees only what the Mendix client already exposes to the logged-in user. Server-side security always applies. Writes are off by default and confirm-gated.
  • Permissions: scripting + storage (a few UI prefs) + activeTab + host access. No debugger, tabs, cookies.
  • Two runtime libraries (preact, MIT) + axe-core (MPL-2.0, on demand).

There is a separate, sideloaded Advanced build (never in the Web Store) that adds the Chrome debugger tooling and — for authorized security testing of your own apps — active confirmation tests, behind a per-target authorisation you sign and a local audit log. The offensive code is compiled out of the normal build entirely.

Full statement: SECURITY.md · inventory: THIRD-PARTY.md · SBOM: sbom.cdx.json · license: LICENSE (proprietary, The Orange Force).

Install

npm install && npm run build      # → dist/

Chrome → chrome://extensions → Developer mode → Load unpacked → pick dist/. npm run release → zips for colleagues (Chrome + Firefox). npm run build:advanced → the sideloaded Advanced build (dist-advanced/, debugger + active tests).

Chrome Web Store (submitted, pending review)

Public CWS publication (lead's call 2026-08-18, supersedes the earlier unlisted plan) prepared in store/: listing texts + permission justifications (store/LISTING.md), runbook (store/PUBLISH.md), privacy policy. Extension id pinned via manifest key (endcpckmhcpgbedeeknpgfeobnfajkgg) — unpacked and store version share storage. Private key (store/*.pem, gitignored) belongs in the team vault.

Firefox (140+)

Distributed via the public AMO listing (listed channel): install from the add-on's page on addons.mozilla.org; AMO hosts the file and serves updates automatically. The release workflow submits each tagged version (scripts/sign-firefox.mjs, fire-and-forget; needs the AMO_JWT_ISSUER/AMO_JWT_SECRET repo secrets) and AMO publishes it after review. Manifest is patched per build (event-page background, gecko id chromestore@theorangeforce.com; via scripts/firefox-manifest.mjs). Runbook: store/AMO.md.

Legacy: v0.113.0 was self-distributed as a signed .xpi with an updates.json feed on main — that feed stays frozen at 0.113.0; reinstall from the AMO page to get back on auto-updates. Dev/test: the release's …-firefox.zip (unsigned) still loads via about:debuggingLoad Temporary Add-on… (gone after restart).

Host permissions are opt-in — grant on first use, then reload the page.

Develop

npm run dev                       # vite build --watch → dist/
npm test                          # data-layer tests (repo-safe fixture)
npm run smoke                     # jsdom UI suites (needs a fresh build)
npm run verify                    # the release gate: typecheck + lint + build + smoke + tests

Per milestone: tsc --noEmit + build clean, all suites green. CI runs the same on every push (ci.yml). Conventions: CLAUDE.md; engineering log per version: DEV-NOTES.md. Releases: pushing a v* tag builds the zips and cumulative notes (see releases).

Credits

Built by Chendo de Langen at The Orange Force, paired with Claude (Anthropic).