FMSonar

Ping your FileMaker solution — every reference echoes back.
One engine, two interfaces: an explorer for you, a queryable index for your AI.

free · open source (MIT) · runs entirely in your browser · nothing is uploaded

Open FMSonar Set up your AI Source on GitHub
TL;DR
What
An explorer for FileMaker Database Design Reports — the full cross-reference map of a solution, alive in your browser.
For
FileMaker developers asking "where is this used?", "what breaks if I change it?", "what's dead weight?" — and their AI assistants, which get the same answers as a queryable SQLite index.
Input
The DDR XML export (FileMaker Pro: Tools → Database Design Report → XML) — single files or whole multi-file solutions.
Privacy
Parsing happens inside your browser. No server, no upload, works offline once loaded. Your client's schema never leaves your machine.
Cost
Free. MIT-licensed, engine and app both open source.

#How it works

1Your .fmp12open in FileMaker Pro (advanced tools on)
2Export the DDRTools → Database Design Report → XML, all files
3Drop the folderon fmsonar.com — a 400 MB solution parses in seconds
4Explorereferences, scripts, call chains, health — instantly
416 MB parsed in-browser in ~7 s (M-series Mac) 148k references, 98.8% resolved on a 9-file solution 0 bytes uploaded

#For your AI, too

The same engine builds a SQLite index designed for AI tools — with an instruction file (AGENTS.md) and a Claude Code skill that teach any assistant the schema, the query patterns, and the honesty rules. Install once (needs Python 3.10+ and pipx), ask from any project:

pipx install git+https://github.com/oogi-io/fm-ddr-analyzer
fm-ddr install-skill   # Claude Code: global skill

Then simply: "analyze the DDR on my desktop — which scripts write to CTC::email?" The first question builds the index once into a local cache (seconds, even for huge solutions). Every question after that — today, next week, from any project — answers instantly against the same index, with SQL-backed evidence and the caveats an honest analysis needs. Re-export the DDR when the solution changes, and the next question rebuilds automatically.

#What you can do in the browser

Where-used, answered properly

Click anything — see every reference grouped by what references it: scripts, layouts, relationships, value lists. Writes distinguishable from reads.

Read whole scripts

Full step text with block indentation, comments dimmed. Copy a line, a selection, or the whole script.

Call chains, visually

Full-depth caller/callee graph — PSoS and triggers marked, hover to trace lineage, drag to untangle, export PNG or Mermaid.

Search inside the code

Full-text search across every calculation and script step — catches what structure can't, like ExecuteSQL strings.

Solution health report

Unused-field and orphan-script candidates, unresolved references, hotspots, biggest scripts — each list a CSV download.

Copy back into FileMaker

Any script copies as a real FileMaker clipboard snippet — paste it straight into Script Workspace (one-time helper install).

Share one insight

Any entity exports as a tiny self-contained HTML — steps, chain, references — safe to Slack or mail without sharing the schema.

Deep links

Put a full report on a shared drive and link colleagues to the exact script: report.html#e12345.

#Strengths & limits

Why the index beats reading the raw XML: parse once (~26 s for a 9-file solution), then every question answers in milliseconds. Aggregations become possible — hotspots, orphan candidates, blast radius by kind — which raw scanning fundamentally can't do. And the resolution logic (table occurrences, cross-file references, ambiguity) is computed once by tested code instead of re-derived per question.

Where its model ends: the index deliberately extracts entities, references, calculations and script steps — not auto-enter/validation details, layout geometry, custom-menu internals, or import/export orders. Those answers are still in your DDR XML; for them, read it directly. And the index is a snapshot: change the solution, re-export, rebuild.

Blind spots

Static analysis can't see everything: field names inside ExecuteSQL strings, calculated script and layout names, and anything that happens outside the DDR (Data API, OData, users running scripts from menus). The full matrix is in COVERAGE.md. Ambiguous matches are flagged, and the AI instructions require a full-text check before anything is called "unused" — treat those lists as candidates to review, never as delete lists.

#Get it

fmsonar.com — the app, no install.  ·  GitHub — engine, CLI, docs, MIT.

OOGI
FileMaker and Claris are trademarks of Claris International Inc. FMSonar is an independent tool, not affiliated with or endorsed by Claris.