v4.0.0
Version 4.0.0 changes the provider and backend model to function as plugins resolved through the NuGet package manager.
Added
- Third-party providers and backends. A
PROVIDER/BACKENDblock can name any plugin package with asourceattribute. nschema initnow restores plugins.initnow pre-fetches the provider and backend plugins pinned in your config. Operations restore implicitly on first use;initjust does it up front so the first real command is fast.--no-initflag. Skips the implicit plugin restore and requires the plugins to be cached already.lockcommand group.nschema lock status/lock acquire/lock releaseinspect, manually hold, and release the state lock.lock acquireholds a lock that outlives the command (for out-of-band checks before a migration), with an optional--ttl(e.g.30m) and--reason,lock statussurfaces any information about the currently held lock.lock releaserequires the lock id by default (refusing if it no longer matches the held lock), with--forceto release whatever lock is held without naming it.--no-lockflag onapply,refresh, anddestroy. Runs without taking the state lock.nschema state show <file>renders a state file on disk directly, without a configured backend.nschema db showrenders the live database schema, read directly from the database via the provider — the online counterpart tostate show.plugincommand group.nschema plugin listshows the provider and backend plugins your project pins and whether each is restored; plugin showprints one plugin's detail (package, pinned version, cache status).plugin cache list/plugin cache remove [version]/plugin cache clearinspect and prune the shared plugin cache at~/.nschema/plugins`.--formatoption (text|json|markdown), selecting the output format for any command.--jsonis now shorthand for--format json.- Markdown output.
--format markdownrenders the plan, SQL, and schema as Markdown for a PR comment or a CI job summary.
Changed
- Providers and backends are now plugins. They ship as separate NuGet packages instead of being bundled with the tool;
nschemarestores the one pinned in your config on first use (it shells out to the .NET SDK to do so). The local-file state backend remains built in. - Scaffolding moved from
inittonschema scaffold. Creating a starter project is nownschema scaffold(initbecame the restore command above). ItsPROVIDER/BACKENDconfig blocks and the sample schema are rendered by the plugins themselves. PROVIDER/BACKENDblocks now require a pinnedversion(the plugin package version); the built-infilebackend is the exception. A first-party label (postgres,sqlite,sqlserver,s3) still resolves to its package automatically.- A
PROVIDERblock is now required to select a provider.NSCHEMA_POSTGRES_CONNECTION_STRINGand the other connection-string variables no longer name the provider on their own — they still override the connection string set in the block. doctorreports plugin problems as diagnostics. A provider or backend that fails to restore or configure is now reported bydoctoras a health-check finding (every such problem at once) instead of aborting on the first.- Lock commands grouped under
lock.lock-status→nschema lock status;force-unlock→nschema lock release, whose prompt is now skipped with--auto-approve/-y(consistent withapply/destroy) instead of--force. The lock-id safety check is unchanged. showsplit by what it shows. The recorded state is nownschema state show(offline; thestatenoun group will growpull/push/move), and a saved plan isnschema plan show <file>. The top-levelshowcommand is gone.completion install/completion uninstallsubcommands replace the--install-autocomplete/--uninstall-autocompleteflags.nschema completion <shell>still prints the script.- Built on
NSchema.Core 4.0.0and the 4.0 provider/backend packages.
Fixed
- Running
nschema --helpin a busy directory like root would cause a performance slowdown due to the--environmentarg autocomplete recursively scanning all the files in the directory. This has been fixed by removing autocomplete. - Torn reads of the local state file. The built-in file state store now writes to a temporary sibling file and atomically renames it into place, so a command reading the recorded state while another run writes it.
Removed
- The
NSCHEMAconfig block.destructive_actionmoved to the--destructive-actionsflag / theNSCHEMA_DESTRUCTIVE_ACTION_POLICYenvironment variable;dialectandtransaction_mode(never wired in) are gone. AnNSCHEMAblock is now rejected as an unknown configuration block. - The top-level
show,lock-status, andforce-unlockcommands, replaced bystate show/plan showand thelockgroup above. Theshow --onlinelive-schema view is nownschema db show(adbnoun group) rather than a mode flag.