Datex Studio CLI ยท Release notes

dxs 0.6.0

A Custom Angular Component can now embed the generated selector, grid, editor, form, card, list, widget or another custom component, and the platform tracks each reference's contract. Every deployed Datex Application API already stores the new reference shape, so upgrade before the next dxs ng pull or push.

Released Nov 2, 2026 Previous 0.5.11 Merged PRs 6
Custom Angular Components

Embed any generated component

Declare it in componentRefs, drop its tag in your template, and the real selector, grid, editor, form, card, list, widget or custom component renders inside yours.

Contract tracking

References carry the target's snapshot

A push stores each embedded component's parameters, so the platform reports a changed contract instead of a broken build.

Preview

A compile error is an error

dxs ng preview raises DXS-NG-057 with the compiler lines instead of re-serving the last good screenshot.

Sign-in

Browser login over SSH

dxs auth login --remote replaces the device-code flow on machines without a browser.

Custom Angular Components

  • Embed a selector, grid, editor, form, card, list, widget or another custom componentNew#393

    Add an entry to componentRefs in manifest.json with the target's name, its kind and, for a package target, its module. The harness imports the generated component, and the tag, inputs and outputs are in the generated <P>.<ref>.component.ts it materializes. A hosted custom component is used through its tag only; its code stays in its own folder. Run dxs ng preview <folder> --refresh -b <branch> after a componentRefs change.

    dxs ng preview ./OrderCommandCenter --refresh -b <branch>
  • A stored reference carries the target's contractChanged#393

    dxs ng push stores each reference as componentType plus componentConfig: the target's name, its owning application as moduleId, and a snapshot of its input and output parameters. Branch validation compares that snapshot with the live target and reports Outdated contract when a required input appears or a parameter is renamed, naming every host down to the shell. pull reads both the new and the retired shape; push writes only the new one. A reference without a snapshot is checked for existence and type only.

  • Push checks references before it writesNew#393

    A new preflight, DXS-NG-056, refuses an unknown kind, a duplicate entry, a component that embeds itself, and a target that does not exist on the branch. It cannot be skipped. The server still runs its own gate on upsert, including the walk that refuses a loop through hosted components with Cyclical references detected.

  • Preview fails loudly on a compile error and frames widgetsFix#393

    A failed build is DXS-NG-057 quoting the compiler lines; no screenshot is taken. render.log is written on every run, including failures, and the dev server's output goes to .dxs-serve.log. mocks/harness-inputs.json gains a "$container" key (page, widget or dashboard-widget) so a widget-destined component previews in its real frame. The component the harness mounts is picked by name, never by file order, so a hosted copy is never edited by mistake.

  • Mock data covers embedded componentsNew#393

    dxs ng data generate walks the materialized harness, so the datasource calls of every embedded component get a "<ds>.<method>" key too. It warns when the harness predates the current componentRefs and when an entry was not materialized, which is the sign of a wrong name or module.

    dxs ng data generate ./OrderCommandCenter -b <branch>
  • Explore and document see what a slot or a component holdsFix#393

    A widget slot is filed by its widgetType, so a custom component placed in a hub, editor or dashboard slot shows up as one. A custom component's own references are filed by componentType, and dxs source explore reverse-trace <target> lists the custom components that embed the target.

  • A failed configuration write no longer reverts your branchFix#393

    When a configuration PUT fails, the CLI releases only the lock it took for that call. It no longer asks the platform to unlock a configuration it did not lock, which the platform treats as a revert that deletes uncommitted additions and resets edits to main.

Sign-in and setup

  • Sign in on a browserless machine through an SSH tunnelChanged#358

    dxs auth login --remote prints a Microsoft sign-in URL and waits for the browser callback on a fixed loopback port (--callback-port, default 8400) that SSH forwards from your local computer. The remote machine keeps the PKCE verifier and stores its own credentials. The device-code flow and its --use-device-code flag are gone.

    ssh -o ExitOnForwardFailure=yes -L 127.0.0.1:8400:127.0.0.1:8400 user@remote dxs auth login --remote --callback-port 8400
  • dxs init reports file credentials correctlyFix#339

    With credential_storage=file, the onboarding summary reported the persistence state wrongly. It now reflects where the credentials were written.

Feedback

  • Send feedback from the CLIPreview#279

    dxs feedback opens a short form; dxs feedback submit takes --category, --title, --message or --file, and --include-transcript for the session log. The report is saved durably before an issue is created, and dxs feedback show and retry follow a submission by its tracking id. Login is required.

    Preview: the feedback service is not enabled in production yet, so a submission can fail until it is. The report stays in the local outbox, and dxs feedback retry sends it later under the same tracking id.

    dxs feedback submit --category cli --title "The documented option fails" --file report.md

Behind the scenes

  • Internal service workService#359#388

    Groundwork on internal Datex services. Nothing in the dxs package changes.

  • Release runs show their version in the Actions listTooling#393

    The Release to PyPI workflow names each run after the version it publishes, so the list no longer needs the bump step's log to tell releases apart.

Before you upgrade

What might need a change on your side

  • Anyone who runs dxs ng pull or push. Upgrade first. Every deployed Datex Application API stores the new reference shape. A 0.5.x pull silently drops every stored reference of a Custom Angular Component, and its next push removes them; a 0.5.x push that still carries componentRefs is refused as the retired shape. Components whose references were written by Studio keep working; re-push them once with 0.6.0 to store their contract snapshot.
  • Scripts that pass --use-device-code. The flag no longer exists. Use dxs auth login --remote with an SSH tunnel, or cached credentials.
  • Consumers of dxs source explore output for widget slots. A slot's content type is reported as widgetType, and a slot holding a Custom Angular Component is filed under that type.

Source record

Compiled from six PRs merged between v0.5.11 and v0.6.0: #279, #339, #358, #359, #388 and the Custom Angular Component embedding PR (#393). Deploy-pin commits and the version-bump commit are excluded. Dates use America/New_York.