Releases: linked-cm/cli
Release list
v1.11.1
Patch Changes
- #68
441372fThanks @flyon! -linked create-appnow stamps the chosen app identity into the scaffolded app. The app template ships without${var}scaffold placeholders (so a raw clone boots on defaults), so create-app writes the real per-app values after cloning:.env/.env.example(APP_NAME,APP_PREFIX),package.jsonname/displayName, the runtimelinkedPackage(...)id insrc/package.ts, and the pm2 / VS Code launch names. Both the--app-nameflag and the interactive prompt now produce an app that carries the chosen name (previously every scaffolded app inherited the template defaults).
v1.11.0
Minor Changes
-
#66
e11d012Thanks @flyon! - Native.envsupport, app-name for the client bundle, and standalone SSR single-instance fixes..envloading —ensureEnvironmentLoadednow loads the app environment from a flat.envvia Node's nativeprocess.loadEnvFile(noenv-cmddependency) when no.env-cmdrc.jsonis present..env-cmdrc.jsonstill takes priority when it exists (profile-based, honours--env a,b), so existing apps are unaffected. When neither file exists the cli no longer hard-exits — it relies on the ambient environment (e.g. env injected by a host at spawn time). The original shell environment is still re-applied last, so it wins over file values.process.env.APP_NAMEis now inlined into the client bundle (likeSITE_ROOT/NODE_ENV), so components can render the app display name; defaults to'Linked App'when unset.- Standalone SSR now dedupes and bundles the React-context holders (
@_linked/server-utils,@_linked/react) into a single instance, fixing a nullAppContextduring SSR in ejected/standalone apps.
v1.10.0
Minor Changes
- #64
b16a090Thanks @flyon! - - Standalone apps: framework packages (@_linked/*/lincd-*) are excluded from Vite's dep-optimizer so the browser loads one copy of each — fixes class-name duplication (Person→Person2) that broke cross-runtime shape lookup and the app's write path.- The client build now defines
process.env.SITE_ROOT/NODE_ENV(webpackEnvironmentPluginparity); apps add their own public env vars viadefinein theirvite.config.ts. - A single
FRAMEWORK_PKG_PATTERNSconstant now drives every single-instance lever (optimizeDeps.exclude,ssr.noExternal).
- The client build now defines
v1.9.1
Patch Changes
- #62
61be66aThanks @flyon! - Workspace-member clones (e.g. per-branchapps/<app>/<branch>checkouts with symlinked@_linked/*sources) now boot underlinked start: their linked deps are excluded from Vite's dep optimizer so the workspace source resolver handles them, instead of esbuild failing to pre-bundle symlinked package subpaths (No known conditions for ./shapes/SHACL).
v1.9.0
Minor Changes
-
#59
98dbb5aThanks @flyon! - ESM-only. Dropped the CommonJS build; ships ES modules only (type: module, norequireexport condition, nolib/cjs). Fixed the roottypesfield. CJS consumers on Node 22+ canrequire()it (sync ESM) or use dynamicimport(). -
#59
647417bThanks @flyon! - Standalone dev + template git-clone scaffolding:- Standalone dev resolution —
createViteConfignow detects when an app is NOT inside a workspace (lib-only npm install of@_linked/*) and resolves those deps viaimport → lib/esm(conditions['module','node']) instead of thedevelopment → srcexport they don't ship. Fixes "Failed to load@_linked/server/shapes/LinkedServer" on a clean install. Monorepo/workspace dev is unchanged. create-appclones the template repo — new apps are scaffolded bygit clone-inglinked-cm/app-template(single source of truth, same repo CN's server-side project creation uses) instead of copying a bundled defaults tree. The bundleddefaults/app-with-backendis removed.- Removed the orphaned tsx
register/register-css-onlyloaders (+tsxdep); apps run plainlinked start(Vite handles TS transform).
- Standalone dev resolution —
v1.8.2
Patch Changes
-
#57
e8385bdThanks @flyon! - CLI sub-template imports updated to use@_linked/coreinstead of legacy
lincd/...:defaults/shape.ts—Shape+NamedNodefrom@_linked/coredefaults/package/src/package.ts—linkedPackagefrom@_linked/core/utils/Package(clean 1:1 swap;@_linked/coreexports it identically)defaults/package/src/ontologies/example-ontology.ts—NamedNode+createNameSpacefrom@_linked/core(unusedlincd-jsonldimport dropped)
Important caveat — TODO comments inline in the template files explain:
thepackage.tstemplate is a clean working swap. Theshape.tsand
ontologies/example-ontology.tstemplates' generated output will fail
to compile because@_linked/coredoesn't exportNamedNodeor
Literalas runtime classes — the new framework architecture moved past
direct node construction. Templates need a rewrite to emit the modern
getter-only@_linked/*shape pattern (see@_linked/schema/shapes/Person.ts).
The import-path change is a deliberate signal-of-intent that lands
incomplete; the actual template rewrite is tracked as downstream
Shape-Builder / Ontology-Manager review work.Users of
linked create shape Fooandlinked create package Bar: if you
hit "Cannot find name NamedNode" or "Cannot find name Literal" errors
in scaffolded files, you've hit the documented gap. The fix path is the
template rewrite, not reverting to legacy lincd.Context: see create-now plan-011 report (docs/reports/009-legacy-lincd-eradication.md).
v1.8.1
Patch Changes
- #54
5d475c7Thanks @flyon! -setup-publishnow generates publish workflows that author the changesets "Version Packages"
PR (and, for dual-branch, the post-release sync) via an org GitHub App token
(actions/create-github-app-token, org secretsRELEASE_APP_ID/RELEASE_APP_PRIVATE_KEY)
instead of the defaultGITHUB_TOKEN— so those PRs' checks run without a manual "Approve and
run" gate. The dual-branch template's version-onlysync-version-to-devjob is replaced by a full
back-mergemain -> dev(carrying the version bump, CHANGELOG, and changeset deletions, so dev
never re-releases consumed changesets).--configure-githubalso enables "Allow auto-merge" so the
back-merge PR self-merges once checks pass.
v1.8.0
Minor Changes
- #52
3b5d645Thanks @flyon! - Four scaffolding/runtime fixes from first external-user feedback:- Template
src/package.tsnow imports from@_linked/react/packageinstead of@_linked/core/utils/Package. Core'sLinkedPackageObjectdoesn't exposelinkedComponent/linkedSetComponent(they're React-only) — the old import causedtscto error on a fresh scaffold the moment a user added their first shape. Requires@_linked/react@>=1.3.1(which fixed the recursion inlinkedPackage). linkedCLI swappedtsxfor a custom esbuild-based ESM loader for TS/TSX user code. tsx hardcodes esbuild's default decorator emit (TC39 standard) and ignoresexperimentalDecoratorsin the user's tsconfig — silently breaking@literalProperty/@objectProperty/@linkedShapeeverywhere, since@_linked/coreships legacy-signature(target, propertyKey, descriptor)decorators. The new loader atlib/esm/loaders/ts-loader.mjsreads the user'stsconfig.json, force-enablesexperimentalDecorators: truein the esbuildtsconfigRaw, preserves import-attribute (with { type: 'json' }) syntax, and backfills extension-less relative imports. Net effect: legacy decorator emit just works, no esbuild-bundle workaround needed for scripts.create-appnow writes an emptyyarn.lockin the new app. Without it, Yarn climbs ancestor dirs looking for a project root and may decide an ancestor's strayyarn.lockis "the project" — aborting install with "the nearest package directory doesn't seem to be part of the project declared in ".- Template
linked.backend.storage.tsandsrc/linked.frontend.storage.tsusewith { type: 'json' }for the JSON dataset config imports, replacing the deprecatedassert { type: 'json' }syntax (which Node 22+ rejects).
- Template
v1.7.0
Minor Changes
-
#50
182b907Thanks @flyon! -create-appnow picks between npm and yarn deliberately instead of silently preferring yarn:- If only one of
npm/yarnis onPATH, that one is used. - If both are installed AND the user is running interactively,
create-appasksPackage manager [npm/yarn] (default: yarn):. Empty answer keeps the old default (yarn). Typingnpmoryarnoverrides. - If both are installed but flags (
--app-name/--app-prefix/--app-domain) were passed, no prompt — yarn wins, matching the previous non-interactive default. - The chosen package manager flows through the install step AND the final "next command" hint, so the copy-paste line at the end is always
cd my-app && npm startorcd my-app && yarn startmatching what was actually installed (instead of always showingnpm startwith a yarn comment).
Why this matters: scaffolding with yarn but then running
npm start(without re-runningnpm install) used to leave critical packages unresolved at webpack-compile time. Picking one PM and reusing it removes that footgun. - If only one of
v1.6.4
Patch Changes
-
#48
dce9cb5Thanks @flyon! - Templatetsconfig.jsonswitched frommoduleResolution: "node"tomoduleResolution: "bundler". The classic Node resolver doesn't honor theexportsfield in package.json, and@_linked/react(and friends) declare types only insideexports[".".types], not as a top-leveltypesfield. The result was a fresh scaffold compiling cleanly with yarn install but exploding under webpack/ts-loader:TS2307: Cannot find module '@_linked/react' or its corresponding type declarations. There are types at '.../node_modules/@_linked/react/lib/esm/index.d.ts', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'.bundleris the right choice for a webpack-bundled app — it honorsexports, doesn't require.jsextensions on relative imports, and doesn't enforce full ESM strictness.