BetaPublic beta — Read the release notes
Documentation

Diff and Update Source Installs

When primitives are installed in source mode, solidiom diff, solidiom update, and solidiom detach help you track and manage changes.

Diff

solidiom diff compares installed source files against their lockfile digests.

solidiom diff
solidiom diff --primitive dialog

Flags

FlagDescription
--primitiveFilter by primitive name
--jsonOutput as JSON

Statuses

Each file receives one of four statuses:

StatusSymbolMeaning
unchangedLocal digest matches lockfile (not shown in output)
modifiedMLocal file content differs from lockfile digest
deletedDFile tracked in lockfile no longer exists
newAFile exists locally but is not in the lockfile

If no files have changed, the output is:

No local modifications.

Update

solidiom update brings source-installed primitives to the latest upstream version using a three-way merge algorithm.

solidiom update dialog

Flags

FlagDescription
--dry-runShow what would change without writing
--jsonOutput as JSON

How It Works

For each file tracked in .solidiom/lock.json:

  1. Read the base digest from the lockfile (what was originally installed)
  2. Read the local content (what you have now)
  3. Read the upstream content (the new version from the registry or monorepo)

Decision Matrix

LocalUpstreamAction
UnchangedChangedOverwrite with upstream (safe update)
ChangedUnchangedKeep local
ChangedChangedAttempt line-level merge
UnchangedUnchangedSkip

Conflict Resolution

When both local and upstream have changed the same lines, the update produces diff3-style conflict markers:

<<<<<<< local
  local content
=======
  upstream content
>>>>>>> upstream

Alongside the conflicted file, two sidecar files are written:

  • <file>.local — Your local version
  • <file>.upstream — The upstream version

After resolving conflicts, remove the sidecar files and run solidiom update again.

AST-Based Import Rewriting

For .tsx and .jsx files with structural changes, the update uses ts-morph AST rewriting to preserve import structure. This ensures runtime imports remain correct after an update.

Output Symbols

SymbolStatus
Up arrowUpdated (safe overwrite)
Double arrowAuto-merged
BoltConflict
CircleSkipped (detached)
CrossSkipped (deleted locally)

Detach

solidiom detach marks source-installed files as detached from upstream updates. It only updates .solidiom/lock.json metadata and is non-destructive.

solidiom detach dialog

Detached files are skipped by solidiom update. Use this when you have heavily customized a primitive’s source and do not want updates to overwrite or conflict with your changes.