CLI Release Notes
insider 2026-10-14 JSON ↗- Added Initial release of Niksphere CLI
- Added Require explicit server URL for environment authentication login (
env auth login) - Added Centralized authentication handler with explicit 127.0.0.1 loopback binding for OAuth logins
- Added Add
nik env actorandnik env clientcommands for managing actors and OAuth clients - Added Add
nik dev mcp enable|disable|showcommands to register or remove the Niksphere MCP server (nik mcp) in AI client configuration files (Claude Code, Cursor, Antigravity, VS Code), with--clientto target specific clients and--jsononshowfor machine-readable client discovery - Added Add a
tokenconfiguration value (settable as theNIKSPHERE_CLI_TOKENenvironment variable, or in the CLI''s own configuration file) to supply a Personal Access Token directly for headless/CI environments, bypassing the OS keyring and any interactive login flow - Added Add
cloud_urlandcloud_tokenconfiguration values (settable viaNIKSPHERE_CLI_CLOUD_URLandNIKSPHERE_CLI_CLOUD_TOKENenvironment variables, or in the CLI''s configuration file) to support custom Cloud targets and Personal Access Token authentication in headless/CI environments - Added Show in
nik cloud auth statuswhen a Personal Access Token override (NIKSPHERE_CLI_CLOUD_TOKENorcloud_tokenin configuration) is in effect - Added Generate a CycloneDX JSON Software Bill of Materials (SBOM) for each platform binary during the build, listing every dependency''s exact version, cryptographic hash, and license
- Added Generate a JSON configuration schema (
config.json) during the build, documenting every configuration key, its environment variable, type, default value, and description - Added Add
nik self release-notesto show release notes for the currently installed version, andnik self update release-notesto show release notes for every version anik self updatewould install - Added Add
nik env session list(showing session id, connected-at timestamp, and the authenticated actor''s id and name) andnik env session terminate <id>commands to list active Client Runtime sessions on a Niksphere Environment and to forcibly terminate one, for developers debugging or scripting against active app sessions - Added Add full Business Central AL preprocessor support (
#if,#elif,#else,#endif,#define,#undef, and safe skipping of#region,#endregion,#pragma) tonik dev convert bc, including boolean expression evaluation (not,and,or, parentheses), automatic symbol resolution fromapp.json, and--define/-Dflag for custom preprocessor symbols - Changed Remove the artificial 30-second client-side HTTP timeout on Environment and Cloud SDK requests; operations now run until completed by the server or cancelled by the user via Ctrl+C, preventing premature timeouts during long-running tasks such as large app installations or schema migrations
- Changed Improved CLI
--helplayout: displayed commands prior to options and unified flags under a singleFlagssection - Changed Render
--helpdescriptions as formatted Markdown (bold, italic, inline code, lists, syntax-highlighted code blocks) under clearUsage/Description/Flagssections, including clickable links in supporting terminals - Changed Pressing Ctrl+C now cleanly cancels an in-progress command or login instead of showing a confusing error
- Changed Unified wording of success and error messages with the Engine and VS Code Extension across all
env app,env actor,env client, andenv idp externalcommands - Changed Add detailed
--helpdescriptions tonik mcpandnik dev lspclarifying they are started by an AI client or editor as a subprocess, not meant to be run manually - Changed BREAKING: Move
nik dev integrate lsptonik dev lspand remove the now-emptynik dev integratecommand group - Changed Show in
nik env auth statuswhen a Personal Access Token override (theNIKSPHERE_CLI_TOKENenvironment variable, ortokenin the CLI''s own configuration file) is in effect; it silently took priority over any logged-in session for every environment, previously indistinguishable from a normal login - Changed BREAKING: Remove the
serverconfiguration key/NIKSPHERE_CLI_SERVERenvironment variable, a fallback alias for the target Engine server URL; useserver_url/NIKSPHERE_CLI_SERVER_URLinstead - Changed BREAKING: Rename the
server_urlconfiguration key/NIKSPHERE_CLI_SERVER_URLenvironment variable toengine_url/NIKSPHERE_CLI_ENGINE_URL, so it reads unambiguously as the Engine URL rather than the generic "server" also used elsewhere for the Cloud; rename theserver_urlfield innik env auth status/nik cloud auth status --jsonoutput totarget_url(holding the Engine or Cloud URL depending on which command produced it), and theengineUrlfield innik cloud env list --jsonoutput toengine_urlfor consistency with the rest of the CLI''s snake_case JSON output - Changed
nik self update/--checknow shows a short summary of how many new versions are available in the channel instead of their full release notes; runnik self update release-notesto see what changed - Changed BREAKING: Split the app manifest
authorfield intopublisheranddeveloper;nik env app listnow shows separatePUBLISHER/DEVELOPERcolumns instead ofAUTHOR,nik dev initscaffolds both fields in the generatednikapp.yaml, and the Business Central AL importer mapsapp.json''s singlepublisherfield onto both (Business Central itself has no separate developer field) - Changed BREAKING: Remove deprecated root-level compatibility fields (
app_id,app_version,app_package_path, andmsgs) from compilation and validation JSON output (nik dev compile --json,nik dev validate --json); consumers must read these structured properties from the nesteddataobject (data.app_id,data.app_version,data.app_package_path, anddata.diagnostics) - Changed BREAKING: Rename the
engine_urlandtokenconfiguration keys (andNIKSPHERE_CLI_ENGINE_URL/NIKSPHERE_CLI_TOKENenvironment variables) toenv_urlandenv_token(NIKSPHERE_CLI_ENV_URL/NIKSPHERE_CLI_ENV_TOKEN) for consistency with thenik envandnik cloudcommand hierarchy - Changed Format Cloud SDK errors across all
nik cloudcommands using the centralized error formatter to display server error messages and actionable login hints on authentication failures - Changed Optimize Model Context Protocol (MCP) server execution architecture to execute CLI commands in-process instead of spawning separate subprocesses, eliminating process spawn latency on tool invocations
- Changed Enforce non-interactive execution for all MCP tool calls with automatic confirmation for confirmation flags (such as
--yes) and fail-fast validation for missing required arguments, preventing deadlocks on standard input - Fixed Fix project path validation in dev commands by rejecting paths with null bytes across all platforms and returning filesystem access errors on failure
- Fixed Fix Model Context Protocol (MCP) server initialization reporting a static version string instead of the dynamic CLI build version
- Fixed Fix
nik dev initreferencing the legacy CLI command name in its completion message, updating it tonik dev compile - Fixed Fix WebSocket connection URL generation in telemetry monitoring by replacing silent fallback schemes with strict URL validation and unified ticket acquisition
- Fixed Fix
nik env inspect datasending unauthenticated requests and silently swallowing HTTP errors by validating user sessions before launch, attaching authorization tokens to Data Explorer requests, and failing fast with descriptive messages on HTTP errors - Fixed Fix Cloud SDK client sending Bearer authentication tokens to unvalidated hosts by applying strict host validation for Cloud endpoints
- Fixed Fix Business Central AL conditional compilation directives being treated as comments, which caused all conditional branches to be parsed unconditionally and resulted in duplicate member collisions and conflicting property overrides
- Fixed Fix Business Central AL parser silently overwriting duplicate property assignments within the same declaration block; duplicate properties on tables, table extensions, enums, enum extensions, pages, page extensions, fields, enum values, and page controls are now rejected with a descriptive parser error
- Fixed Fix duplicated or reworded success/error messages on admin commands (e.g. "Successfully installed. App X ... successfully installed" or "failed to edit actor: Actor not found.") by relaying the Engine''s own message verbatim
- Fixed Centralized server URL resolution across environment commands (
nik env ...) to avoid silent fallback tolocalhost - Fixed Fix login and token refresh failing due to a retired, unregistered OAuth client ID
- Fixed Rename the positional argument of
nik env client edit|delete|enable|disablefrom<client-id>to<id>, matching theIDcolumn fromnik env client list; the Engine resolves it against the client''s internal id, not itsclient_idslug, so passing the slug previously failed with "Client not found." - Fixed Fix silent session-refresh failures (missing refresh token, unreachable Engine, revoked refresh token) reusing the stale, already-expired access token instead of failing outright; commands now report a clear error pointing at
nik env auth logininstead of a bare401 Unauthorized - Fixed Fix
nik env auth statusreporting "Logged in" for a session whose access token had already expired; it now applies the same expiry check a real command would, and reports whether a refresh token is available to silently renew it - Fixed Fix
env app/env actor/env client/env idp externalcommands showing a generic "no error factory is registered for this code: 401" instead of the Engine''s actual reason (e.g. "actor is suspended or inactive") on a 401 response; requires a paired Engine release with the matching OpenAPI documentation - Fixed Fix Cloud commands silently reusing a stale, already-expired access token when a session refresh failed (missing refresh token, unreachable identity provider, revoked refresh token) instead of failing outright; they now report a clear error pointing at
nik cloud auth logininstead of a bare401 Unauthorized - Fixed Fix
nik cloud auth statusreporting "Logged in" for a session whose access token had already expired; it now applies the same expiry checknik env auth statusdoes, and reports whether a refresh token is available to silently renew it - Fixed Fix
var/outparameters not being passed by true reference; changes made to them inside a routine could silently fail to reach the caller - Fixed Fix records passed to a routine by value not being copied; modifying such a parameter inside the routine could unexpectedly change the caller''s original record
- Fixed Fix overloaded routines (same name, different parameter types) sometimes being registered twice, which could break compilation or resolve to the wrong overload
- Fixed Fix debugger call stack frames showing "anonymous" instead of the actual routine name
- Fixed Fix debugger not showing global variables while stepping through code, and show them in their own "Globals" section separate from local variables
- Fixed Fix
nik dev convert bcsilently skipping enums without values, table extensions without new fields, and enum extensions without values, which made the converted app fail to compile with "unit ... not found"; these objects are now converted, and any AL object that still cannot be converted is listed with its file and reason and makes the command fail - Fixed Fix
nik dev convert bcgenerating bogus empty enums (e.g.type UnknownField = partial enum ();) fromEnum "..."variables declared inside report extensions, interfaces, control add-ins, profiles and page customizations; these object types are now skipped as a whole - Fixed Fix
nik dev convert bcconverting every AL enum without anExtensibleproperty into an extensiblepartial enum, although Business Central enums are not extensible by default; such enums are now converted as non-extensible enums, and an enum that has no values and is not extensible is reported as a conversion failure - Fixed Fix
nik dev convert bcproducing apps that fail to compile with "unit ''....Enum.pas'' not found" when AL objects extend or use enums that are built into the Business Central platform (e.g. "Copilot Capability", "Event Category"); these platform objects are now declared in a generatedSource/Platform.pasunit, and a reference to a table or enum that exists neither in the AL sources nor in the platform makes the conversion fail, naming the AL file, object and missing target - Fixed Fix
nik dev convert bcemitting duplicate member declarations for fields moved across apps; fields marked withObsoleteState = MovedorObsoleteState = Removedare now excluded during conversion, preventing member collisions when target extensions declare active counterparts - Fixed Fix
nik dev convert bcemitting[UID]attributes instead of[Table]on entities and[Field]on fields, and placing table attributes after the class header where the compiler ignored them, which caused the Engine''s schema generator to detect zero tables and skip database table creation - Fixed Fix
nik dev convert bcexiting with code 0 instead of reporting an error when no valid AL table or enum definitions are found or converted - Fixed Fix CLI commands bypassing central error handling and process termination on errors, ensuring consistent human-readable and JSON (
--json) error formatting and clean deferred cleanup - Fixed Fix confirmation prompts, warning banners, and progress messages in
nik env app drop-data,nik self uninstall, andnik self updatebeing printed to standard output instead of standard error, ensuring standard output remains clean for pipeline scripting and data redirection - Fixed Fix
nik dev compileemitting misleading static progress events before the compiler starts, ensuring console and JSON output strictly reflect actual compilation diagnostics and results - Fixed Fix compiler file reads incurring redundant mutex synchronization and in-memory document cache resolution during non-LSP operations (such as
nik dev compile), improving compilation performance - Security Close several security vulnerabilities in the CLI''s networking and login/authentication components