Skip to content

BC Atlas CLI reference ​

Every command, option, default, and configuration setting of bca, grouped by feature area. Run bca --help for the overview, bca help <command> or bca <command> --help for one command, and bca help --format json for the same information as JSON.

Command-line values override values loaded from .bca.json. An omitted [app-root] means the current directory.

Command overview ​

AreaCommandPurpose
Get startedsetupSet up a project interactively, or with --yes: .bca.json, Git hooks, pipelines, schedules.
Get startedsetup planDetect the project and list setup questions with recommended answers.
Get startedsetup applyWrite .bca.json, Git hooks, and a pipeline from setup answers.
Get startedsetup agentAdd a /bca-setup command for Claude Code, Copilot, or Cursor.
AnalyzecheckScore architecture health and fail CI on cycles, policy violations, architecture violations, or diagnostics.
AnalyzearchitectureFind a target architecture, list every dependency that points the wrong way with how to resolve it, and enforce it with a baseline.
Analyzerefactor moveMove an AL object to another component, with its file, namespace, and the usings of referencing files.
Analyzerefactor surfaceLock the public surface of components: Access = Internal for what nobody outside uses, exposes for what others use.
ExportexportWrite files: the BC Atlas pages as one offline HTML file, the Markdown report, the 3D explorer, the object catalog, a diagram, or the resolved model as JSON.
Exportdocs listList documented UI-test scenarios.
Exportdocs showShow one scenario, its prerequisites, and its diagnostics.
Exportdocs validateValidate IDs, tags, links, and prerequisite cycles.
Exportdocs generateGenerate user guides or test cases as Markdown, HTML, DITA, Azure DevOps CSV, or BPMN.
Exportdocs setAdd or replace documentation metadata in AL source.
Exportdocs unsetRemove documentation metadata from AL source.
Exportdocs automationPrint a CI pipeline that keeps generated guides in sync.
Exportdocs glossaryList supported documentation tags and prerequisite types.
IntegraterunRun the features configured for a trigger and sync their output.
IntegrateupdateCheck for a new version, show the release notes, and update BC Atlas and the generated setup files.
IntegratemcpStart the MCP stdio server for AI agents (also installed as bca-mcp).
text
bca setup [app-root] [--yes] [--dry-run]
bca setup plan [app-root] [options]
bca setup apply [app-root] [options]
bca setup agent [app-root] [options]
bca check [app-root] [options]
bca architecture [app-root] [options]
bca refactor move [app-root] --object <selector> --to <component> [--apply]
bca refactor surface [app-root] [--component <component>] [--apply]
bca export [app-root] [--view <what>] [-o <path>] [options]
bca docs <command> <test-root> [options]
bca docs glossary [options]
bca run [app-root] [options]
bca update [app-root] [options]
bca mcp
bca help [<command>] [--format json]

Earlier commands ​

Several commands are now part of export and the VS Code extension:

BeforeNow
bca initbca setup (it writes .bca.json), or bca setup apply --hooks none --ci none --editor none --schedule none for the file alone
bca reportbca export --view report (--output-dir is now -o)
bca graph, bca <app-root>bca export --view <view>
bca watchbca export --view <view> --watch, or the VS Code extension, which updates itself
bca explorebca export --view explorer, or the Dependencies page in VS Code
bca inspectbca export --view <view> --format json (stdout)
bca codegraphbca export --view catalog (--output-dir is now -o)
bca capabilitiesbca help --format json

Exit codes ​

CodeMeaning
0Success.
1Operation failed, or a check (check, architecture, docs validate) found blocking issues.
2Invalid usage: unknown command, unknown option, invalid enum value, or missing required value.

Global flags: -h, --help shows help; -V, --version shows the version.

Get started ​

setup ​

text
bca setup [app-root] [--yes] [--dry-run]

Asks which features to automate, which Git hooks and pipeline to use, when to run on a schedule, and how generated files stay in sync. It then shows the planned changes and applies them after confirmation. Needs an interactive terminal; use --yes to accept the recommendations. See Guided setup.

The .bca.json it writes is pre-filled from what BC Atlas detects: the app name from app.json, test folders (excluded from analysis), a source-link template for GitHub, GitLab, or Azure DevOps remotes, and check and report sections with the default thresholds.

OptionValueDescription
--yesflagAccept every recommendation without asking.
--dry-runflagShow the planned files without writing them.

setup plan ​

text
bca setup plan [app-root] --format json

Prints detected facts (app, Git host, UI tests, translations, existing hooks and pipelines), every question with its flag, options, and recommendation, and a ready apply command.

OptionValueDescription
--formattext or jsonOutput mode. Default: text.

setup apply ​

text
bca setup apply [app-root] [answers] [--dry-run] [--force] [--format json]

Omitted answers use the recommendation. Lists are comma-separated; none means empty.

OptionValueDescription
--featureslistFeatures to automate: check, report, docs, codegraph.
--testspathFolder with AL UI tests for the docs feature, relative to the app.
--docs-exportlistmarkdown, html, dita, ado-csv, bpmn.
--docs-asguide or testcaseDocumentation type.
--languagetagDocumentation language, e.g. de-DE.
--hookshusky, git, noneGit hook manager.
--pre-commitlistFeatures before each commit, or none.
--pre-pushlistFeatures before each push, or none.
--hook-syncverify, stage, noneHow hooks keep generated files in sync.
--editorvscode, noneAdd BC Atlas: tasks to .vscode/tasks.json for the local development loop.
--updatesdependabot, nonePropose new BC Atlas versions as Dependabot pull requests. Needs --hooks husky, which keeps the version in package.json.
--from-configflagStart from the answers in the existing .bca.json instead of the recommendations. bca update uses it to regenerate files for a new version.
--cigithub, azure-devops, nonePipeline provider.
--ci-syncverify, artifact, noneWhat pull requests and pushes do with generated files.
--schedulecronFive-field cron expression in UTC, or none.
--schedule-syncpull-request, commit, artifact, verify, noneWhat scheduled runs do with generated files. pull-request needs GitHub.
--dry-runflagList planned files without writing them.
--forceflagReplace pipeline files that were not generated by bca setup.
--formattext or jsonOutput mode. Default: text.

setup agent ​

text
bca setup agent [app-root] --agent claude|copilot|cursor|generic

Writes a /bca-setup command that lets your AI agent run the guided setup through the CLI: .claude/commands/bca-setup.md, .github/prompts/bca-setup.prompt.md, or .cursor/commands/bca-setup.md. generic prints the prompt.

OptionValueDescription
--agentclaude, copilot, cursor, genericAgent to prepare. Default: generic.
--printflagPrint the instructions instead of writing a file.
--forceflagReplace an existing command file.

Analyze ​

architecture ​

text
bca architecture [app-root] [options]

Checks the target architecture in the architecture section of .bca.json, or proposes one from today's dependencies when there is none. Lists every dependency that points the wrong way, grouped into work items with a resolution strategy, plus data ownership, checks of the architecture, and clean-architecture metrics per component. Exits with 1 when the configured architecture has violations that are not in the baseline. --extract plans moving one component into an app of its own instead. See Clean architecture and Split a monolith.

text
bca architecture ./app --propose --format markdown -o architecture.md
bca architecture ./app --propose --write --update-baseline
bca architecture ./app --format json
bca architecture ./app --extract Sales --format markdown -o extract-sales.md
OptionValueDescription
-f, --formatformattext, markdown, or json. Default: text.
-o, --outputpathWrite the report to a file instead of stdout.
--proposeflagPropose an architecture even when .bca.json defines one.
--group-bymodeauto, coupling, namespace, folder, module, or app. Default auto: modules (or apps), and any that is still too large split by namespace. coupling: namespaces that are tightly coupled to each other.
--depthintegerNamespace or folder segments per component. Default: split until no component holds more than 15% of the objects.
--min-objectsintegerMerge smaller groups into the component they depend on most. Default: 1.
--extractcomponentPlan extracting this component as an app: blockers, dependencies, app.json, tables whose data moves, and steps. Never fails the command.
--writeflagSave the architecture to the architecture section of .bca.json.
--update-baselineflagAccept today's violations in .bca-architecture-baseline.json; only new ones fail afterwards.
--update-surfaceflagRecord each component's public surface in .bca-surface.json (architecture.surface names another file); bca check then reports changes that break the components that use it.
--pathspath or globOnly analyze AL files in these folders. Repeatable.
--namespace, --type, --include, --excludeglobFilters, as for export.
--project-rootpathAnalyze a wider workspace.
--configpathConfiguration file.
--compilermodeauto, off, or a path; see AL toolchain. Default: auto.

refactor move ​

text
bca refactor move [app-root] --object <selector> --to <component> [options]

Moves an AL object to another component of the architecture (from .bca.json, or the proposal): its file goes to the component's folder, or the object is cut out of a file it shares into <Name>.<Type>.al; its namespace becomes the component's, and files that reference it get the using they need. Without --apply it prints the diff and writes nothing. Warns when the object changes apps (dependencies, ID ranges, table data). Work items of bca architecture --format json carry the command for the moves they suggest.

text
bca refactor move ./app --object codeunit:50100 --to Sales
bca refactor move ./app --object tableextension:50001 --to Sales --apply
OptionValueDescription
--objectselectorRequired. codeunit:50100, table:"Sales Doc", or a name.
--tocomponentTarget component.
--folderpathTarget folder relative to the project root. Default: the component's folder: selector, else the folder most of its objects are in.
--namespacenamespaceTarget namespace. Default: the component's namespace: selector, else the namespace most of its objects use.
--applyflagWrite the changes. Refuses when a file changed since the analysis.
--formatformattext or json. Default: text.
--pathspath or globOnly analyze AL files in these folders. Repeatable.
--project-rootpathAnalyze a wider workspace.
--configpathConfiguration file.

refactor surface ​

text
bca refactor surface [app-root] [--component <component>] [options]

Locks the public surface of every component (or one): codeunits without events, queries, and enums that are not extensible, which no other component uses, get Access = Internal; the objects other components use go into the component's exposes in .bca.json, so bca check reports any new use of something else (internal-access). Tables, interfaces, extensible enums, and codeunits that publish events stay public. Without --apply it prints the diff.

text
bca refactor surface ./app --component Core
bca refactor surface ./app --apply
OptionValueDescription
--componentcomponentOnly this component. Default: every component.
--internaltrue, falseSet Access = Internal. Default: true.
--exposestrue, falseWrite exposes to .bca.json. Default: true.
--applyflagWrite the changes.
--formatformattext or json. Default: text.
--pathspath or globOnly analyze AL files in these folders. Repeatable.
--project-rootpathAnalyze a wider workspace.
--configpathConfiguration file.

check ​

text
bca check [app-root] [options]

Analyzes the project view and evaluates health rules: diagnostics, forbidden dependencies, dependency cycles, fan-in/fan-out hot spots, orphan objects, and unresolved references. With Microsoft's AL toolchain installed, the AL compiler and code analyzers (CodeCop, UICop, AppSourceCop, PerTenantExtensionCop) add their findings. Exits with 1 when a finding reaches --fail-on. See Architecture health checks and AL toolchain.

text
bca check ./app
bca check ./app --analyzers CodeCop,UICop --fail-on warning
bca check ./app --format sarif -o bca.sarif
bca check ./app --compiler off --compiler-log .output/errorlogs
OptionValueDescription
--fail-onlevelerror, warning, info, or never. Default: error.
-f, --formatformattext, json, markdown, or sarif (SARIF 2.1.0 for GitHub code scanning and Azure DevOps). Default: text.
-o, --outputpathWrite the report to a file; the result line goes to stderr.
--max-fan-inintegerWarn when more distinct objects depend on one object. Default: 25.
--max-fan-outintegerWarn when one object depends on more distinct objects. Default: 25.
--analyzerslistCode analyzers for the AL compile: CodeCop, UICop, AppSourceCop, PerTenantExtensionCop, or DLL paths. Default: al.codeAnalyzers when al.enableCodeAnalysis is on.
--compilermodeauto (the AL Language extension's compiler or the AL Development Tools when installed), off, or a path to alc, al, or an AL extension folder. Default: auto.
--compiler-logpathImport diagnostics from an AL compiler error log file or folder (alc /errorlog, al workspace compile --errorlogdirectory, AL-Go, BcContainerHelper).
--namespace, --type, --include, --excludeglobFilters, as for export.
--project-rootpathAnalyze a wider workspace.
--configpathConfiguration file.
--strictflagShortcut for --fail-on warning.

Export ​

export ​

text
bca export [app-root] [--view <what>] [-o <path>] [options]

Writes what the VS Code extension shows as files. --view selects what:

--viewWritesDefault outputFormats
app (default)The BC Atlas pages as one self-contained, offline HTML file to share: every page, the report diagrams, the 3D explorer, and the docs.bc-atlas.htmlhtml
reportMarkdown report: README.md with an at-a-glance table, one section and diagram per view, the health summary, and a regeneration command. See Architecture reports.docs/atlassvg or d2 diagrams
explorerThe interactive 3D dependency explorer, or its graph document. See Dependency explorer.bc-atlas-explorer.htmlhtml or json
catalogOne linked Markdown page per AL object. See Code Graph.docs/codegraphMarkdown
project, module, object, data, call, boundary, contracts, events, ui, workflowOne diagram view, or its resolved model as JSON. See Architecture diagrams.bc-atlas-<view>.svgsvg, d2, json, png, pdf
text
bca export ./app -o atlas.html
bca export ./app --view report --codegraph
bca export ./workspace --view explorer --history -o dependencies.html
bca export ./workspace --view explorer --history-by releases -o releases.html
bca export ./app --view module -o modules.svg
bca export ./app --view workflow --entry ProcessDocument -o workflow.svg --watch
bca export ./app --view project --format json > model.json
bca export ./app --view catalog -o docs/codegraph

Output ​

OptionValueDescription
--viewwhatapp, report, explorer, catalog, or a diagram view. Default: app.
-o, --outputpathOutput file or folder (defaults above). - writes JSON to stdout.
-f, --formatformathtml, d2, json, svg, png, or pdf, as the view allows. Inferred from the output extension when omitted.
--titletextTitle of the report, explorer, or diagram.
--watchflagWrite again whenever AL source, app.json, or .bca.json changes. Stop with Ctrl+C.
--debouncemillisecondsDelay before writing again with --watch. Default: 250.
  • A diagram view with --format json and no --output prints the resolved model to stdout (progress goes to stderr), for scripts.
  • D2, JSON, and SVG use bundled functionality; PNG and PDF require the d2 executable on PATH.
  • If --format conflicts with the extension, the format wins: -o calls.d2 --format svg writes calls.svg and keeps calls.d2.
  • Rendered diagrams always keep the generated .d2 source next to them.
  • The object catalog replaces its folder atomically; BC Atlas refuses to replace a non-empty folder that has no generated index.md.

Report ​

OptionValueDescription
--viewslistComma-separated views: project, module, data, contracts, events, ui, call. Default: all except call.
--codegraphflagAlso write the linked object catalog to <output>/objects.
--jsonflagAlso write the resolved project model to model.json.

--format svg (default) or d2 selects the diagram format; d2 skips SVG rendering.

Explorer and timeline ​

OptionValueDescription
--lenslensRelationship family. Default and currently only value: dependency.
--proposeflagShow a proposed target architecture (components, layers) when .bca.json defines none. With an architecture section, the explorer always shows it.
--group-bymodeWith --propose: how the proposal groups objects, auto (default), namespace, folder, module, or app.
--historyflagReplay Git history, one frame per step that changed AL files or app.json. Also for --view app.
--history-bymodecommits (default), prs (one frame per merged pull request), or releases (one frame per release tag, plus unreleased commits). Implies --history.
--lastintegerOnly the last n steps.
--max-commitsintegerMost frames to replay; older steps are sampled evenly. Default: 60.
--sincedateOnly replay commits after this date (git log --since syntax).

View selection ​

OptionValueDescription
--objectselectorRequired by the object view. Object name, ID, key, or typed selector such as codeunit:50100.
--object-inbound-depthinteger ≥ 0Incoming depth for the object view. Default: 1.
--object-outbound-depthinteger ≥ 0Outgoing depth for the object view. Default: 1.
--memberslistFocused-object members: fields, actions, triggers, events, procedures.
--scopeselectorBoundary scope: namespace:, folder:, app:, or object:. Repeatable; required by boundary.
--focustextRestrict the contracts, events, or ui view to matching names.
--group-bymodeDiagram views: namespace, folder, type, or role. Project view defaults to role; others to namespace.
--module-depthinteger or autoNamespace segments kept by the module view. Default: auto.
--folder-depthintegerFolder segments in a folder-grouped module view. Default: 1.

Filters ​

OptionValueDescription
--namespaceglobInclude matching namespaces. Repeatable.
--typetypesInclude object types. Comma-separated and repeatable.
--includeglobInclude matching file paths or object selectors. Repeatable.
--excludeglobExclude matching file paths or object selectors. Repeatable.
--pathspath or globOnly analyze AL files in these folders (or matching these globs), relative to the project root. Repeatable. Speeds up large repositories such as BCApps.

Call view ​

OptionValueDescription
--include-unresolved-callsflagInclude unresolved calls and isolated procedures.
--root-procedureselectorStart a focused call subgraph at a procedure name, Owner.Procedure, signature, or key. Repeatable.
--call-depthinteger ≥ 0Traversal depth from each root. Default: 3.
--call-directiondirectionincoming, outgoing, or both. Default: outgoing.
--expand-proceduresflagShow procedure nodes instead of owning-object aggregates.
--expand-framework-callsflagShow individual framework and standard-library calls.

Workflow view ​

OptionValueDescription
--entryselectorEntry procedure, trigger, action, or event publisher. Repeatable.
--workflow-depthintegerMaximum traversal depth. Default: 8.
--workflow-max-nodesintegerMaximum workflow nodes. Default: 100.
--workflow-edge-typeslistcalls, events, writes, reads. Default: calls,events,writes.

Selectors accept an exact name such as ProcessDocument, an owner-qualified name such as Posting.ProcessDocument, * and ? globs, and an optional procedure:, trigger:, action:, or event: prefix. Without entries, roots are inferred from actions, triggers, event publishers, and procedures without inbound calls. Direct call and mutation order is labelled definite; event dispatch and collapsed paths are labelled inferred.

Rendering ​

OptionValueDescription
--max-edgesintegerDiagram edge cap. Default: 500. Also caps workflow edges unless workflow.maxEdges is configured.
--directionvalueright, down, left, or up. Default: right.
--no-legendflagHide edge-kind and confidence legends.
--detailsflagShow member counts in nodes.
--no-externalflagHide external and unresolved nodes. Unresolved edges remain in JSON.
OptionValueDescription
--source-urltemplateNode-link template with {file}, {line}, and {ref}. {file} is project-root-relative.
--source-reftextCommit, tag, or branch for {ref}. Default: main.
--source-path-prefixpathRepository path prepended to {file} when the project root is below the repository root.

General ​

OptionValueDescription
--project-rootpathAnalyze this app or multi-app workspace; the positional path becomes the focus.
--configpathConfiguration file. Default: <app-root>/.bca.json when present.
--strictflagFail when analysis produces warning or error diagnostics.
--compilermodeauto, off, or a path: the AL compiler resolves calls for the call and workflow views and the explorer. See AL toolchain. Default: auto.
--compiler-logpathImport diagnostics from an AL compiler error log file or folder.

docs commands ​

AL UI-test files are the only persisted scenario source. See Documentation from AL UI tests.

OptionCommandsValueDescription
--formatalltext or jsonHuman-readable or pipe-safe output. Default: text.
--idshow, generate, set, unsetdocument IDSelects a scenario by stable [DOC-ID]. Required for show, set, unset. With generate, writes one Markdown file.
--exportgenerateformatsComma-separated markdown, html, dita, ado-csv, bpmn. Default: markdown.
--asgenerateguide or testcaseUser guide or test case with an action/expected-result table. Default: guide.
--appgeneratepathAL app source for real captions, tooltips, and page coverage.
--languagegeneratetagWording and captions in this language, e.g. de-DE; captions come from the app's .xlf files. Default: en-US.
--titlegeneratetextTitle of the index, HTML page, and DITA map. Default: the app name.
--proceduregeneratenameTest procedure; required when a file contains several tests.
--output-dirgenerate, automationpathMarkdown directory. Default: docs/generated.
--strictvalidateflagTreat warnings as failures.
--tagset, unsettagMetadata tag. Required.
--valueset, unsettextTag value (required for set); matching value for unset.
--qualifierset, unsettypeTyped [GIVEN] qualifier.
--expected-hashset, unsetSHA-256Reject the write when the AL file changed after reading.
--dry-runset, unsetflagPreview without writing AL.
--providerautomationgithub or azure-devopsPipeline format. Default: github.

docs list, docs show, docs glossary ​

text
bca docs list test/UITest --format json
bca docs show test/UITest --id partner-create
bca docs glossary

docs validate ​

text
bca docs validate test/UITest --strict

Exits with 1 on errors, or on warnings with --strict.

docs generate ​

text
bca docs generate test/UITest --output-dir docs/generated
bca docs generate test/PartnerUITest.Codeunit.al --procedure PartnersList_NewPartner_PersistsGeneralFields
text
bca docs generate test/UITest --app app --export markdown,html,dita,ado-csv,bpmn
bca docs generate test/UITest --app app --as testcase --language de-DE --export html

[WHEN] comments become numbered phases. Reachable local helpers containing TestPage operations are expanded with cycle and depth protection. Directory generation writes, per format:

FormatFiles
markdown<document-id>.md, use-case-<feature>.md, index.md, journey.d2, journey.svg, diagrams/<id>.svg (scenario flows and use-case processes)
htmlindex.html with every diagram inlined
dita<document-id>.dita, documentation.ditamap
ado-csvtest-cases.csv
bpmnuse-case-<feature>.bpmn (BPMN 2.0 with diagram layout; scenarios are sub-processes)

--id and --procedure write a single Markdown file and cannot be combined with other formats.

docs set and docs unset ​

text
bca docs set test/UITest --id partner-create --tag GIVEN \
  --qualifier MASTER-DATA --value "A posting group exists." --dry-run
bca docs unset test/UITest --id partner-create --tag RELATED --value partner-edit

docs automation ​

text
bca docs automation test/UITest --provider github --output-dir docs/generated

Prints a pipeline that validates in strict mode, regenerates the Markdown, and fails when the committed output differs. --format json returns checks, commands, target filename, and pipeline content.

Integrate ​

run ​

text
bca run [app-root] --trigger pre-commit|pre-push|ci|schedule|manual
bca run [app-root] --tasks check,report [--sync verify]

Runs the tasks configured for a trigger in .bca.json and syncs their output. Git hooks, schedules, pipelines, and the GitHub Action all call this command. See Automation.

OptionValueDescription
--triggerpre-commit, pre-push, ci, schedule, manualTrigger whose tasks and sync mode are used. Default: manual.
--taskslistRun these tasks instead: check, report, docs, codegraph, diagrams.
--syncnone, verify, stage, artifact, pull-request, commitOverride the sync mode.
--configpathConfiguration file.
--formattext or jsonOutput mode. Default: text.

Exits with 1 when a task fails, check finds blocking issues, or verify finds outdated generated files.

update ​

text
bca update [app-root] [--check] [--yes] [--dry-run] [--format json]

Asks the npm registry for the latest version and shows the release notes between the installed and the latest version. After confirmation it:

  1. updates the installation: the bc-atlas dependency in the project's package.json when it declares one (npm install --save-dev bc-atlas@^x), otherwise the global installation (npm install --global bc-atlas@x);
  2. runs bca setup apply --from-config with the new version, so hooks, VS Code tasks, pipelines, and agent commands reference it.

A source checkout is not changed; update it with git pull and npm ci.

OptionValueDescription
--checkflagOnly report; exit code 1 when an update is available.
--yesflagUpdate without asking. Without a terminal and without --yes, nothing is installed.
--dry-runflagShow the commands an update would run.
--formattext or jsonOutput mode. Default: text.

Other commands print a one-line notice in interactive terminals when a newer version exists. The check runs at most once a day in the background. It is off in CI, Git hooks, bca run, --format json, and when BCA_NO_UPDATE_CHECK or NO_UPDATE_NOTIFIER is set.

help ​

text
bca help [<command>]
bca help --format json

--format json writes only UTF-8 JSON: schemaVersion, version, exit codes, invocation conventions, feature areas, views, and every command with its argv template, area, options (CLI token, type, enum, default, required, repeatable), output contract, rules, and examples. Agents must pass arguments as an array, parse stdout only after exit code 0, and run docs set or docs unset with --dry-run before writing.

mcp ​

text
bca mcp
bca-mcp

Starts the Model Context Protocol server on stdio. See Agent integration.

Configuration file ​

.bca.json at the input root is loaded automatically; --config selects another file. bca setup creates a starter file. The root accepts the camelCase form of every export diagram option: view, output, format, object, scope, focus, projectRoot, namespaces, types, include, exclude, groupBy, moduleDepth, folderDepth, includeUnresolvedCalls, rootProcedure, callDepth, callDirection, expandProcedures, expandFrameworkCalls, maxEdges, objectInboundDepth, objectOutboundDepth, members, direction, title, sourceUrl, sourceRef, sourcePathPrefix, noLegend, details, noExternal, strict, and debounce.

Configuration-only settings:

PropertyDescription
roleMappingsMaps a role label to object globs (type, type:name, namespace:type:name, or file path). First match wins.
layoutD2 layout engine: dagre or elk for SVG; any D2 layout for PNG/PDF.
themeD2 theme ID.
forbiddenDependenciesDependency policy rules; see Configuration.
workflowWorkflow defaults: entries, depth, maxNodes, maxEdges, edgeTypes, phases, stop, collapse.
checkHealth-check defaults: failOn, cycles (error, warning, info, off), maxFanIn, maxFanOut.
automationhooks, ci, and triggers (pre-commit, pre-push, ci, schedule), each with tasks, sync, and for schedule a cron. Written by bca setup.
docsSettings for the docs task of bca run: tests, app, export, as, language, title, outputDir.
codegraphoutputDir for the codegraph task.
diagramsList of export diagram option objects with a view and an output, rendered by the diagrams task.
reportReport defaults: outputDir, views, format, codegraph, json, title.
alMicrosoft's AL toolchain: compiler (auto, off, or a path), analyzers, errorLog, callGraph (false keeps calls source-level), workspaceFile. See AL toolchain.
json
{
  "view": "workflow",
  "workflow": {
    "entries": ["ProcessDocument", "action:Release"],
    "depth": 8,
    "maxNodes": 100,
    "maxEdges": 250,
    "edgeTypes": ["calls", "events", "writes"],
    "phases": {
      "Validation": ["Validate*", "*.Check*"],
      "Posting": ["Post*", "Finalize*"]
    },
    "stop": ["FinalizeDocument", "event:OnCompleted"],
    "collapse": ["*Telemetry*", "*FeatureFlag*"]
  }
}
Workflow propertyDescription
entriesEntry selectors. entry is also accepted.
depthMaximum traversal depth.
maxNodesMaximum projected nodes.
maxEdgesMaximum projected edges.
edgeTypesAllowed calls, events, writes, and reads edges.
phasesMaps phase labels to selectors; matching nodes are grouped under that label.
stopSelectors that stay visible but are not expanded. stopConditions is also accepted.
collapseUtility selectors bypassed with inferred edges. collapseUtilities is also accepted.

BC Atlas resolves the complete projectRoot before it applies a folder, namespace, or include focus. References that cross the focus become aggregated boundary nodes with a boundaryCategory of microsoft-base-app, declared-dependency, same-app-outside-focus, or unknown. Dependency symbols are loaded from .app files under .alpackages and in every al.packageCachePath of .vscode/settings.json or the .code-workspace file; an unreadable package produces a symbol-package-error diagnostic.

See .bca.example.json for a complete example.

Released under the MIT License.