Dataverse Table Spec Exporter is a read-only Power Platform ToolBox tool that turns one Dataverse table’s metadata into a compact, deterministic specification for architecture reviews, development planning, code generation, and ChatGPT-assisted schema discussions.
- Uses the active ToolBox Dataverse connection without handling credentials.
- Lists lightweight table metadata, searchable by display, logical, or schema name; custom tables are shown by default.
- Loads columns, choices, relationships, and alternate keys only after table selection.
- Produces the versioned
dataverse-table-spec1.0 contract as JSON or readable Markdown. - Filters standard columns and system relationships by default.
- Normalizes Dataverse
*Typediscriminators and filters virtual/companion display columns from AI-focused exports. - Provides compact, detailed, and technical-reference presets.
- Supports structured business context, completeness reporting, privacy review, localized labels, preview navigation, counts, copy, copy-with-prompt, and host-native save.
- Anonymizes the environment name by default and excludes known sensitive connection fields.
Sanitized screenshots of the table selector, metadata options, and JSON/Markdown preview will be added before registry submission. See the screenshot checklist.
- Node.js 20.19 or newer
- Current Power Platform ToolBox desktop app
- A Dataverse connection with metadata read privileges
npm install
npm run devThe Vite page can be viewed during UI work, but ToolBox APIs are available only inside the host.
npm run check # strict TypeScript
npm run lint # ESLint
npm test # Vitest unit/integration tests
npm run build # type check and ToolBox-compatible dist build
npm run validate # official @pptb/validate package
npm run format:check # Prettier verification
npm run community:check # community metadata and repository readiness
npm run release:check # complete non-publishing release gate
npm run finalize-package # release gate plus npm shrinkwrapThe build command also verifies that dist/index.html uses relative asset URLs required by the ToolBox file:// loader.
- Run
npm run build(ornpm run build -- --watch). - In Power Platform ToolBox, open Settings, enable Show Debug Menu, and save.
- Open Debug → Load Local Tool → Browse.
- Select this repository root (the directory containing
package.json) and load it. - Use Help → Toggle Tool Dev Tools for breakpoints and console inspection. Rebuild and reopen the tool after changes.
dist/ contains index.html, the IIFE application bundle, CSS, icon, and a manifest synchronized from the root package.json. Run npm run release:check before packaging. Run npm run finalize-package only when preparing a publishable package. These commands verify the package but do not publish or submit anything.
The public package uses the @avi-spl scope and links its manifest metadata to this GitHub repository. The maintainable source, tests, release tooling, and community documentation are included here.
See Community publication and submission for identity setup, evidence, live-host testing, npm publication, and registry submission steps. Recommended registry categories are Data, Development, and Documentation.
React components own presentation and interaction. Services isolate host connections, targeted Dataverse metadata reads, export orchestration, and file saving. Raw OData shapes are separate from the normalized contract. A single normalizer feeds both formatters. See architecture decisions.
The metadata adapter uses these documented read-only methods:
window.toolboxAPI.connections.getActiveConnection()window.toolboxAPI.events.on/off()for connection changeswindow.dataverseAPI.getAllEntitiesMetadata()window.dataverseAPI.getEntityMetadata()window.dataverseAPI.getEntityRelatedMetadata()for attributes (including derived type casts), relationships, and keyswindow.toolboxAPI.utils.copyToClipboard()andshowNotification()window.toolboxAPI.fileSystem.saveFile()
No direct HTTP client, OAuth library, browser download workaround, or CSP exception is used.
Table identity, ownership, primary columns, major feature flags, text/memo, numeric, currency, boolean, date/time, choice/multi-choice, lookup/customer/owner, GUID, file, image, status/state columns, calculated/rollup indicators when exposed, local/global options, 1:N/N:1/N:N relationships, cascades, and alternate keys. Type-specific details are retrieved only for relevant selected-table attributes; partial categories remain exportable and visibly marked.
{
"format": "dataverse-table-spec",
"formatVersion": "1.0",
"profile": "ai-discussion",
"exportedAt": "2026-08-03T20:54:00.000Z",
"source": { "environmentName": "Anonymized", "solutionUniqueName": null },
"table": { "logicalName": "contoso_project", "displayName": "Project" },
"columns": [],
"relationships": { "manyToOne": [], "oneToMany": [], "manyToMany": [] },
"alternateKeys": [],
"businessContext": { "purpose": "", "usage": "", "knownConstraints": [], "developmentGoal": "" },
"exportNotes": []
}# Dataverse Table Spec: Project
## Table
| Property | Value |
| ------------ | ----------------- |
| Logical name | `contoso_project` |Complete representative artifacts derived from the test fixture are in examples/.
Exports never intentionally include tokens, connection IDs, environment URLs, tenant/user/application IDs, authentication configuration, or records. Environment name anonymization is on by default. Metadata can still reveal confidential business terminology, logical names, labels, descriptions, relationships, and architecture. Always review an export before sharing it. See SECURITY.md.
- One table per export; AI Discussion is the only profile.
- Read-only metadata operation; no creation, deployment, comparison, or multi-table solution export.
- No forms, views, dashboards, charts, business rules, workflows, plug-ins, security roles, or record data.
- Calculated and rollup formulas may not be fully available through metadata.
- Metadata depends on Dataverse permissions and API behavior; managed and virtual tables can be incomplete or unusual.
- User/organization language identifiers are not exposed by the APIs used. Label selection prefers
UserLocalizedLabel, then English, then the first label. - Local ToolBox debug loading and a live-environment smoke test require the desktop host and cannot be automated by unit tests.
- No connection: select or create one in ToolBox, then refresh.
- 401/session expired: re-authenticate the ToolBox connection.
- 403/privileges: request metadata/customization read privileges.
- Table disappeared: refresh the list; it may have been deleted during the session.
- Unexpected metadata: inspect expandable technical details and confirm the table type is supported.
- Save returns no path: the save dialog was cancelled; no error is shown.
Solution-aware exports, multi-table context, schema comparison, richer formula availability notes, export-size planning, persisted harmless preferences, and host-driven automated smoke tests.
See CONTRIBUTING.md, SUPPORT.md, and CODE_OF_CONDUCT.md. Licensed under the MIT License.