alwasp CLI Reference v0.6.0

25 commandsCLI guide ↗

Overview

ALWasp - AL symbol package restore and multi-project build tool for Business Central. Run 'alwasp config init' to get started, or 'alwasp --help' for available commands.

Reference for ALWasp v0.6.0. Browse commands, filter by an option or description, or copy command syntax. Read the CLI guide for workflows and examples.

Root options

OptionDescription
-?, -h, --helpShow help and usage information
--versionShow version information

restore

alwasp restore

Restore AL symbol packages from NuGet feeds. Reads dependencies from app.json in the current directory.

alwasp restore [<appJsonPath>] [options]

Arguments

ArgumentDescription
<appJsonPath>

Options

OptionDescription
--latestUse latest dependency versions rather than locked versions
--output <output>Output folder for symbol packages (default: .alpackages)
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

artifacts

Business Central artifact commands

alwasp artifacts download

Resolve, download, and verify a Business Central Insider artifact

alwasp artifacts download [options]

Options

OptionDescription
--bc-target <bc-target>Business Central Insider target: next-minor or next-major
--bc-version <bc-version>Pinned concrete Business Central version
--bc-country <bc-country>Business Central artifact country code (default: W1), for example DE
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp artifacts resolve

Resolve Business Central versions and artifact URLs without downloading anything

alwasp artifacts resolve [options]

Options

OptionDescription
--bc-target <bc-target>Business Central target to resolve: current, next-minor, or next-major (default: all three)
--bc-version <bc-version>Pinned concrete Business Central version
--bc-country <bc-country>Business Central artifact country code (default: W1), for example DE
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp artifacts prune

Remove cached Business Central artifacts: superseded builds, unused ones, and abandoned downloads

alwasp artifacts prune [options]

Options

OptionDescription
--allRemove every cached artifact that no running ALWasp process is using
--older-than <older-than>Remove artifacts not used for this many days (default: 14)
--dry-runReport what would be removed without deleting anything
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

build

alwasp build

Compile the AL project. With alwasp.json: config-driven multi-project build using targets and profiles. With --project or --project-root: direct build of discovered projects and their local dependencies, without alwasp.json. Otherwise: single-project build from app.json using alc.

alwasp build [<targetOrPath>] [options]

Arguments

ArgumentDescription
<targetOrPath>With alwasp.json: a target or profile name to build (default: defaultTarget from alwasp.json). Without alwasp.json: path to app.json for single-project build (default: ./app.json).

Options

OptionDescription
--packages <packages>Path to the .alpackages symbol folder (default: .alpackages)
--restoreRun incremental symbol restore before build (default behavior)
--cleanRemove ALWasp package-cache and output artifacts before building (also log and manifest artifacts for config-driven builds)
--latestUse latest dependency versions when restoring
--out <out>Output .app file path. Cannot be combined with --outfolder.
--outfolder <outfolder>Folder for the output .app file. Cannot be combined with --out.
--warnaserrorTreat all warnings as errors
--nowarn <nowarn>Warning codes to suppress (e.g. AL0001). Repeat to suppress multiple.
--errorlog <errorlog>Write all diagnostics to this file
--ruleset <ruleset>Ruleset file that overrides diagnostic severities
--target <target>Compilation target (e.g. Cloud, OnPrem)
--parallelEnable parallel compilation
--max-parallelism <max-parallelism>Maximum number of parallel compilation tasks (implies --parallel)
--define <define>Preprocessor symbols to define. Repeat to define multiple.
--features <features>Feature flags to enable. Repeat to enable multiple.
--codecopEnable the CodeCop analyzer
--appsourcecopEnable the AppSourceCop analyzer
--ptecopEnable the PerTenantExtensionCop analyzer
--uicopEnable the UICop analyzer
--custom-analyzers <custom-analyzers>Paths to custom analyzer assemblies. Repeat to add multiple.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--profile <profile>Profile name in alwasp.json to build (config-driven mode)
--manifest <manifest>Write a config-driven build manifest to this path after the build. Specify a path or omit to use the default: .alwasp/build-manifest.json. Also settable via manifest in alwasp.json workspace or profile section.
--continue-on-errorContinue building remaining groups/profiles after a failure (overrides workspace.continueOnError in alwasp.json)
--diagnostic, --diagnosticsList the individual compiler findings (errors and analyzer warnings such as CodeCop/AppSourceCop/UICop) after each compile; the summary always counts them per analyzer (also settable via workspace.diagnostics in alwasp.json)
--changed-since <changed-since>Git reference: 'latest' (newest local tag), 'latest:<pattern>' (newest local tag matching a glob, e.g. 'latest:v*'), 'latest-merge:<text>' (nearest first-parent merge whose message contains the text), or an explicit tag/branch/commit. Config-driven mode: restricts 'versioning.applyTo: changedOnly' to projects changed since it and overrides 'changeDetection.base' in alwasp.json. With --project-root: builds only apps changed since it plus the apps that depend on them, and compiles their local dependencies.
--plan <plan>Build exactly the projects selected by a previously generated plan file. Cannot be combined with targetOrPath or --profile. Can be combined with --changed-since, which still only affects 'versioning.applyTo: changedOnly' resolution - it does not alter which projects the plan selects.
--include-dependentsWith --project-root and --changed-since, also build the apps that (transitively) depend on a changed app (default: only changed apps and the local dependencies they need to compile).
--project <project>Single AL project directory (direct mode; needs no alwasp.json). Cannot be combined with a positional target/path, --profile, --plan, --config, or --project-root.
--project-root <project-root>Root directory in which AL projects are discovered recursively and built in dependency order (direct mode; needs no alwasp.json). Cannot be combined with a positional target/path, --profile, --plan, --config, or --project.
--app <app>With --project-root: build only this app, given by name, app ID, or project path relative to --project-root. Repeat for multiple apps. Required local dependencies are still compiled, as dependency-only apps.
--bc-target <bc-target>Business Central target: current (latest released artifact), next-minor, or next-major (Insider artifact); the artifact supplies symbols, compiler and analyzers. Omit --bc-target and --bc-version to keep Microsoft symbols and compiler from NuGet. Not available with a positional app.json build.
--bc-version <bc-version>Pinned Business Central version, for example 27.5; mutually exclusive with --bc-target next-minor/next-major.
--bc-country <bc-country>Exactly one Business Central country code (default: restore.country from alwasp.json, else W1), for example DE. A comma-separated list is not supported by build.
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

plan

alwasp plan

Create a deterministic changed-only build and test plan without compiling projects.

alwasp plan [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Target or profile to plan (default: defaultTarget from alwasp.json).

Options

OptionDescription
--changed-since <changed-since>Git base reference used to select changed projects. Supports explicit refs, 'latest:<pattern>', and 'latest-merge:<text>'. Overrides changeDetection.base.
--plan-file <plan-file>Plan output path (default: .alwasp/alwasp-plan.json).
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

check

alwasp check

Verify the selected AL projects against every configured ALWasp gate: configuration, restore, build, compiler diagnostics, compatibility, and translations. Test apps are compiled, not run.

alwasp check [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Target or profile to check (default: defaultTarget from alwasp.json).

Options

OptionDescription
--profile <profile>Profile name in alwasp.json to check. Cannot be combined with targetOrProfile.
--changed-since <changed-since>Check only the projects 'alwasp plan' would select for changes since this git reference (changed projects, dependents, affected test apps, and compile prerequisites). Supports explicit refs, 'latest:<pattern>', and 'latest-merge:<text>'. With --plan, it must resolve to the plan's own base.
--plan <plan>Check exactly the projects selected by a previously generated plan file. The plan is validated first and a stale plan fails the check. Cannot be combined with targetOrProfile or --profile.
--continue-on-errorContinue building remaining groups/profiles after a failure, so every build failure is reported in one run (overrides workspace.continueOnError in alwasp.json)
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

config

Configuration file creation and validation

alwasp config init

Create an alwasp.json config file in the current directory. Scans direct child folders and classifies AL source; confirmed tests require --include-tests. Run 'alwasp config validate' after editing to confirm the config is correct.

alwasp config init [options]

Options

OptionDescription
--forceOverwrite alwasp.json if it already exists in the current directory
--include-testsInclude confirmed source-classified test projects in the tests section. Mixed or unknown projects remain in apps and require review.
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp config validate

Validate alwasp.json and print all errors. Exits 0 when the config is valid, 1 when errors are found. Use --config to validate a file at a non-default path.

alwasp config validate [options]

Options

OptionDescription
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

version

Application version commands

alwasp version resolve

Calculate each selected project's next version from its own current version and report it. Read-only: it writes nothing, so what it prints is exactly what 'version apply' would write. Select projects with alwasp.json (target/profile) or, without it, with --project/--project-root.

alwasp version resolve [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Target or profile name in alwasp.json to resolve versions for (default: defaultTarget from alwasp.json).

Options

OptionDescription
--profile <profile>Profile name in alwasp.json to version (config-driven mode)
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--changed-since <changed-since>Version only projects changed since this git reference: 'latest' (newest local tag), 'latest:<pattern>' (newest local tag matching a glob, e.g. 'latest:v*'), 'latest-merge:<text>' (nearest first-parent merge whose message contains the text), or an explicit tag/branch/commit. With alwasp.json it restricts 'versioning.applyTo: changedOnly' and overrides 'changeDetection.base'; with --project/--project-root it restricts the run to the changed apps.
--project <project>Single AL project directory (direct mode; needs no alwasp.json). Cannot be combined with a positional target/profile, --profile, --config, or --project-root.
--project-root <project-root>Root directory in which AL projects are discovered recursively (direct mode; needs no alwasp.json). Cannot be combined with a positional target/profile, --profile, --config, or --project.
--app <app>With --project-root: version only this app, given by name, app ID, or project path relative to --project-root. Repeat for multiple apps.
--include-dependentsWith --project/--project-root and --changed-since, also version the apps that (transitively) depend on a changed app (default: only the changed apps).
--release-type <Dev|None|Preview|Release>How the next version is derived: Release, Preview, Dev, or None (keep the version). Default: Release without alwasp.json, else versioning.releaseType. Overrides 'versioning.releaseType'.
--version-source <AppJson|Explicit|Nuget>Where each project's current version comes from: AppJson (default) or Nuget (latest published version on the configured feeds, falling back to app.json). Overrides 'versioning.source'.
--no-dependency-updateDo not update the dependency entries that reference other selected projects (overrides 'versioning.includeDependencies').
--dependency-update-scope <AllVersioned|DirectlyChanged>Which internal versions are written into dependency entries: DirectlyChanged (default) or AllVersioned (overrides 'versioning.dependencyUpdateScope').
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp version apply

Calculate each selected project's next version from its own current version and PERMANENTLY write it to app.json (never commits). Select projects with alwasp.json (target/profile) or, without it, with --project/--project-root. Unlike 'build', this does not restore symbols, compile, or touch git - it only updates app.json.

alwasp version apply [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Target or profile name in alwasp.json to resolve versions for (default: defaultTarget from alwasp.json).

Options

OptionDescription
--profile <profile>Profile name in alwasp.json to version (config-driven mode)
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--changed-since <changed-since>Version only projects changed since this git reference: 'latest' (newest local tag), 'latest:<pattern>' (newest local tag matching a glob, e.g. 'latest:v*'), 'latest-merge:<text>' (nearest first-parent merge whose message contains the text), or an explicit tag/branch/commit. With alwasp.json it restricts 'versioning.applyTo: changedOnly' and overrides 'changeDetection.base'; with --project/--project-root it restricts the run to the changed apps.
--project <project>Single AL project directory (direct mode; needs no alwasp.json). Cannot be combined with a positional target/profile, --profile, --config, or --project-root.
--project-root <project-root>Root directory in which AL projects are discovered recursively (direct mode; needs no alwasp.json). Cannot be combined with a positional target/profile, --profile, --config, or --project.
--app <app>With --project-root: version only this app, given by name, app ID, or project path relative to --project-root. Repeat for multiple apps.
--include-dependentsWith --project/--project-root and --changed-since, also version the apps that (transitively) depend on a changed app (default: only the changed apps).
--release-type <Dev|None|Preview|Release>How the next version is derived: Release, Preview, Dev, or None (keep the version). Default: Release without alwasp.json, else versioning.releaseType. Overrides 'versioning.releaseType'.
--version-source <AppJson|Explicit|Nuget>Where each project's current version comes from: AppJson (default) or Nuget (latest published version on the configured feeds, falling back to app.json). Overrides 'versioning.source'.
--no-dependency-updateDo not update the dependency entries that reference other selected projects (overrides 'versioning.includeDependencies').
--dependency-update-scope <AllVersioned|DirectlyChanged>Which internal versions are written into dependency entries: DirectlyChanged (default) or AllVersioned (overrides 'versioning.dependencyUpdateScope').
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

compare

alwasp compare

Compare public symbols in two compiled .app packages

alwasp compare <baseline> <current> [options]

Arguments

ArgumentDescription
<baseline>Previous compiled .app package
<current>Current compiled .app package

Options

OptionDescription
--json <json>Write the compatibility report as JSON
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

validate

Source validation commands

alwasp validate compatibility

Compile current source with AppSourceCop against a previous .app baseline. Discovery skips confirmed test apps; mixed/unknown and explicit selections remain eligible

alwasp validate compatibility [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Configured target or profile to validate

Options

OptionDescription
--project <project>Single AL project directory (direct mode)
--project-root <project-root>Root directory in which AL projects are discovered recursively
--workspace <workspace>VS Code workspace file; selects only folders directly containing app.json
--app <app>Select an app by name, ID, or project path relative to --project-root or the workspace file directory. Repeat for multiple apps; also applies to --get-baseline-symbols
--baseline <baseline>Previous compiled .app package (required in direct mode)
--baseline-directory <baseline-directory>Directory containing baseline and historical dependency .app packages
--get-baseline-symbols <get-baseline-symbols>Download latest stable baseline symbols (default: Microsoft AppSourceSymbols); optional feed URL. Defaults --project-root to the current directory when app.json exists
--changed-since <changed-since>Validate only apps changed since this git reference (--project-root/--workspace mode only): 'latest' (newest local tag), 'latest:<pattern>', 'latest-merge:<text>', or an explicit tag/branch/commit. Unchanged apps needed only as local dependencies are still compiled, without AppSourceCop. Apps that depend on a changed app are not validated unless --include-dependents is passed.
--include-dependentsWith --changed-since, also validate apps that (transitively) depend on a changed app (default: only apps that changed themselves)
--packages <packages>Current dependency package folder (default: .alpackages)
--ruleset <ruleset>Ruleset file that overrides diagnostic severities
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--profile <profile>Profile name in alwasp.json to build (config-driven mode)
--bc-target <bc-target>Business Central validation target: current (default), next-minor, or next-major. A comma-separated list such as current,next-minor,next-major validates each target (and each --bc-country) in its own isolated run
--bc-version <bc-version>Pinned concrete Business Central version for validation
--bc-country <bc-country>Business Central country code (default: W1), for example DE. A comma-separated list such as de,us,w1 validates each country in its own isolated run
--max-parallel-processing <max-parallel-processing>Target and country combinations validated concurrently when --bc-target or --bc-country is a list (default: all of them, at most half the logical processors; 1 runs them sequentially). Apps within a combination are never compiled in parallel
--fail-on-nextWhen --bc-target includes current, also fail the run on a next-minor or next-major failure (by default those are reported as warnings). A run without current always fails on any failure
--keep-artifactsKeep the Business Central artifacts this run used. By default, a run with next-minor or next-major removes Insider artifacts afterwards (a new build appears almost daily), plus superseded and 14-day-unused ones. ALWASP_ARTIFACT_CLEANUP=off disables this cleanup
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp validate translations

Check that every translatable string is covered by the apps' translation files

alwasp validate translations [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Configured target or profile whose projects are checked

Options

OptionDescription
--project <project>Single AL project directory (default: current directory when there is no alwasp.json)
--project-root <project-root>Root directory in which AL projects are discovered recursively
--workspace <workspace>VS Code workspace file; selects only folders directly containing app.json
--languages <languages>Language tags every checked app must ship, e.g. --languages da-DK --languages de-DE. Overrides translations.languages in alwasp.json.
--fail-on <fail-on>Failure threshold: none, missing-language, missing-unit, untranslated, needs-review (default: untranslated). Findings below the threshold are reported as warnings.
--min-coverage <min-coverage>Fail when a language's coverage is below this percentage (0-100)
--require-generatedFail when a project has no generated .g.xlf to compare against
--check-placeholdersAlso require each translation to use the same format placeholders (%1, {0}) as its source
--json <json>Write the translation coverage report as JSON
--max-issues <max-issues>Maximum issues listed per language (0 lists all; --verbose implies 0)default: 10
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--profile <profile>Profile name in alwasp.json to build (config-driven mode)
--changed-since <changed-since>Validate only projects changed since this git reference. Activates change detection and overrides changeDetection.base in alwasp.json. When configured change detection is active, changed projects are selected by default.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

workspace

Workspace-level restore and build commands

alwasp workspace restore

Restore AL symbol packages for all projects in a workspace

alwasp workspace restore [<workspacePath>] [options]

Arguments

ArgumentDescription
<workspacePath>Path to the .code-workspace file (auto-detected if omitted)

Options

OptionDescription
--latestUse latest dependency versions rather than locked versions
--packages <packages>Shared symbol package folder (default: .alpackages next to workspace file)
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp workspace build

Low-level: compile all projects in a .code-workspace file using altool workspace compile. For multi-project repositories, prefer config-driven 'alwasp build' with alwasp.json.

alwasp workspace build [<workspacePath>] [options]

Arguments

ArgumentDescription
<workspacePath>Path to the .code-workspace file (auto-detected if omitted)

Options

OptionDescription
--bc-target <bc-target>Business Central target: current (latest released artifact), or the Insider lane next-minor / next-major; the artifact supplies symbols, compiler and analyzers. Omit every BC option to keep NuGet symbols and compiler (excludes --bc-version)
--bc-version <bc-version>Released Business Central version: a full build pins it; major.minor or major.minor.build selects the latest match (excludes --bc-target)
--bc-country <bc-country>Business Central artifact country (default: W1)
--packages <packages>Shared symbol package folder (default: .alpackages next to workspace file)
--restoreRun incremental symbol restore before build (default behavior)
--cleanRemove ALWasp package-cache, output, log, and manifest artifacts before building
--latestUse latest dependency versions when restoring
--max-cpu-count <max-cpu-count>Maximum number of concurrent project compilations
--nowarn <nowarn>Warning codes to suppress (e.g. AL0001). Repeat to suppress multiple.
--ruleset <ruleset>Ruleset file that overrides diagnostic severities. Cannot be combined with --nowarn.
--codecopEnable the CodeCop analyzer
--appsourcecopEnable the AppSourceCop analyzer
--ptecopEnable the PerTenantExtensionCop analyzer
--uicopEnable the UICop analyzer
--custom-analyzers <custom-analyzers>Paths to custom analyzer assemblies. Repeat to add multiple.
--define <define>Preprocessor symbols to define. Repeat to define multiple.
--features <features>Feature flags to enable. Repeat to enable multiple.
--log-directory <log-directory>Directory for workspace compiler log files (default: ~/.alwasp/state/<workspace>/logs, outside the repository)
--diagnostic, --diagnosticsShow parsed workspace compiler diagnostics in local CLI output
--source-url <source-url>Source repository URL embedded in compiled packages
--source-commit <source-commit>Source commit ID embedded in compiled packages
--outfolder <outfolder>Folder to collect all output .app files from each compiled project
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--manifest <manifest>Generate a build manifest after successful compilation. Specify a path or omit to use the default: .alwasp/build-manifest.json
--feed <feed>Additional NuGet feed URL. Repeat to add multiple feeds.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

tools

Manage cached AL compiler tools (alc / altool)

alwasp tools update

Check NuGet.org for a newer version of the AL tools (alc / altool) and download it when one is available. Use --clean to remove older cached versions, or --check for a dry run.

alwasp tools update [options]

Options

OptionDescription
--cleanAfter ensuring the latest version is present, remove all other cached tool versions from ~/.alwasp/tools.
--checkOnly report whether a newer version is available; do not download or remove anything. Exits 0 when up to date, 2 when an update is available.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

app

Operations on compiled .app files

alwasp app set-package-id

Assign a new random deployment package ID to a .app file so it can be re-uploaded to a Business Central sandbox. Does not change the app identity (app.json id).

alwasp app set-package-id <appPath> [options]

Arguments

ArgumentDescription
<appPath>Path to the compiled .app file.

Options

OptionDescription
--out <out>Write the modified .app to this path instead of overwriting the original.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

symbols

Create AL symbol packages from compiled .app files and publish them to a NuGet feed

alwasp symbols create

Create a symbol-only .app from a compiled .app with ALTool CreateSymbolPackage. The app identity is preserved; no Business Central container is needed.

alwasp symbols create <app> [options]

Arguments

ArgumentDescription
<app>Path to the compiled .app file.

Options

OptionDescription
--output <output>Output .app file, or folder for '<app name>.symbols.app' (default: next to the input).
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp symbols pack

Pack a symbol-only .app into a NuGet package '{Publisher}.{Name}.symbols.{AppId}' versioned by the app version, with the app's dependencies as package dependencies.

alwasp symbols pack <symbolApp> [options]

Arguments

ArgumentDescription
<symbolApp>Path to the symbol-only .app file.

Options

OptionDescription
--output <output>Output folder for the .nupkg (default: the symbol app's folder).
--dependency-package-id <dependency-package-id>Exact package ID of a dependency published under a non-standard ID, as 'appId=packageId'. Repeat for several dependencies.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp symbols push

Push a symbol .nupkg to a NuGet feed. Credentials are needed only for this write; the feed can still allow anonymous reads.

alwasp symbols push <package> [options]

Arguments

ArgumentDescription
<package>Path to the .nupkg file.

Options

OptionDescription
--source <source>Target feed: NuGet v3 index URL, nuget.config source name, or local folder.required
--api-key <api-key>API key for the push. Falls back to ALWASP_NUGET_API_KEY, then nuget.config apikeys.
--skip-duplicateTreat 'package version already exists' (409) as success.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp symbols publish

Create, pack and push the symbol package of a compiled .app (create -> pack -> push). Stops at the first failing stage. Never run implicitly by 'build'.

alwasp symbols publish <app> [options]

Arguments

ArgumentDescription
<app>Path to the compiled .app file.

Options

OptionDescription
--output <output>Output folder for the symbol app and the .nupkg (default: next to the input).
--dependency-package-id <dependency-package-id>Exact package ID of a dependency published under a non-standard ID, as 'appId=packageId'. Repeat for several dependencies.
--source <source>Target feed: NuGet v3 index URL, nuget.config source name, or local folder.required
--api-key <api-key>API key for the push. Falls back to ALWASP_NUGET_API_KEY, then nuget.config apikeys.
--skip-duplicateTreat 'package version already exists' (409) as success.
--nuget-config <nuget-config>Path to nuget.config used for sources and credentials
--auth-mode <Auto|Interactive|NonInteractive>Authentication mode for private feeds: Auto, Interactive, NonInteractive
--feed-token-env <feed-token-env>Feed token mapping in form 'feedUrl=ENV_VAR'. Repeat to map multiple feeds.
--pat <pat>Personal Access Token for authenticated NuGet feeds. Falls back to ALWASP_PAT environment variable.
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

analyze

alwasp analyze

Analyze AL source without compiling it: affected apps, dependency graph, object graph, changed objects, public API, referenced objects, and impacted tests.

alwasp analyze [<targetOrProfile>] [options]

Arguments

ArgumentDescription
<targetOrProfile>Configured target or profile whose projects are analyzed

Options

OptionDescription
--project <project>Single AL project directory (default: current directory when there is no alwasp.json)
--project-root <project-root>Root directory in which AL projects are discovered recursively
--workspace <workspace>VS Code workspace file; selects only folders directly containing app.json
--include <include>Sections to produce (default: all): affected-apps, dependency-graph, object-graph, changed-objects, public-api, references, impacted-tests. Repeatable, or comma-separated.
--changed-since <changed-since>Base git reference the source is compared against: 'latest' (newest local tag), 'latest:<pattern>' (newest local tag matching a glob), 'latest-merge:<text>' (nearest first-parent merge whose message contains the text), or an explicit tag/branch/commit. Overrides 'changeDetection.base' in alwasp.json. Without it, changed objects, affected apps, and impacted tests are not evaluated.
--max-depth <max-depth>Stop propagating impact after this many reference hops (default: unbounded)
--json <json>Write the full analysis report as JSON to this path
--max-items <max-items>Maximum entries listed per console section (0 lists all; --verbose implies 0)default: 20
--config <config>Path to alwasp.json project configuration file (auto-detected if omitted)
--profile <profile>Profile name in alwasp.json to build (config-driven mode)
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

translation

Prepare translation context and validate returned XLIFF

alwasp translation prepare

Prepare a deterministic package for an external translator

alwasp translation prepare <language> [options]

Arguments

ArgumentDescription
<language>Target locale, for example fr-FR

Options

OptionDescription
--project <project>Single AL project directory
--project-root <project-root>Discover AL projects recursively below this directory
--workspace <workspace>Select projects from a .code-workspace file
--config <config>Path to alwasp.json (auto-detected if omitted)
--profile <profile>Configured profile (otherwise use defaultTarget)
--context <context>Optional extension language used as semantic context
--parent-source-folder <parent-source-folder>Discover dependency source projects recursively below this folder (repeatable)
--bc-target <bc-target>BC terminology build: current, next-minor, or next-major
--bc-version <bc-version>Released BC artifact version or version prefix
--bc-country <bc-country>BC artifact country (default: configured restore.country or W1)
--glossary <glossary>Approved locale glossary JSON
--expected-bc-version <expected-bc-version>Warn if resolved terminology differs from this BC version or prefix
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information

alwasp translation validate

Validate returned XLIFF or a package: structure, length, glossary, and consistency

alwasp translation validate <path> [options]

Arguments

ArgumentDescription
<path>Returned target-language XLIFF file or prepared package directory

Options

OptionDescription
--project <project>Single AL project directory
--project-root <project-root>Discover AL projects recursively below this directory
--workspace <workspace>Select projects from a .code-workspace file
--config <config>Path to alwasp.json (auto-detected if omitted)
--profile <profile>Configured profile (otherwise use defaultTarget)
--source <source>Authoritative source XLIFF (otherwise discovered from the project)
--language <language>Expected target locale (otherwise inferred from the filename when available)
--glossary <glossary>Approved locale glossary JSON (overrides package glossary)
--expected-bc-version <expected-bc-version>Expected BC terminology version or prefix (package validation)
-v, --verboseEnable verbose logging
-q, --quietMinimal output
--format <format>Output format: text (default), json (a single result document on stdout, human output moved to stderr), or ndjson (one JSON record per line, written as the command runs). 'jsonl' is accepted for ndjson.
--result-file <result-file>Write the --format json/ndjson output to this file instead of stdout, leaving the console output unchanged. Use this for 'build', 'check', and 'workspace build', whose altool output cannot be redirected.
-?, -h, --helpShow help and usage information