Track SchemaSmith updates across SQL Server, PostgreSQL, MySQL, and MariaDB — from SchemaTongs extraction to SchemaQuench deployments to DataTongs data sync.
Leaving EnableCDC out of a table now leaves its change data capture alone, DataTongs reports failed tables through its exit code, and a failed run no longer records its version as deployed.
EnableCDC no longer turns CDC off — On SQL Server, leaving it out of a table used to mean false, so a deploy turned off change data capture on any table where it had been enabled outside the package, dropping the capture instances and their change history. Leaving it out now changes nothing; true turns CDC on and false turns it off. A package that relied on leaving it out to turn CDC off must now say "EnableCDC": false.0 however many tables failed. It exits 0 when every configured table was extracted, 1 when the run finished with something not fully produced (such as a table skipped because it is missing from the source or has no key columns, or a column whose type cannot be delivered), and 2 when at least one table failed. Each skipped or failed table is named, with the reason, in the progress log and in DataTongs - Errors.log. Check how your pipeline treats exit code 1.--ConfigFile stops the run — A settings file named with the switch that does not exist now stops every tool with exit code 2 before anything connects, naming the path it tried. It used to be ignored, and the tool ran without those settings. The default settings file is unchanged: when it is absent, the tool still runs on its other settings.TemplateOrder entries are folder names — Each entry is the name of a folder directly under Templates/, matched without regard to case on every OS, and never a path. The operating system used to decide what an entry meant, so one package could load on Windows and fail on Linux, or the reverse. An entry that is not a plain folder name, such as ./Main, or that matches no folder, is now refused by both the deploy and --Validate.CdcIndexName sets the index CDC identifies rows by — Name a unique index for a table's capture instance to use in place of the primary key (SQL Server's @index_name), so a table with no primary key can have net changes. It must be a declared unique index over NOT NULL columns; otherwise the deploy fails before CDC is enabled, naming the table and the problem, and --Validate reports SS-CDC-002. Changing it rotates to a new capture instance, and SchemaTongs extracts it when the newest capture instance uses an index other than the primary key. See Identifying rows.CdcIndexName to another unique index and deploy, drain and drop the old capture instance, then make the change.DropUnknownIndexes on. Create and maintain them with a script. SchemaTongs used to extract a spatial or JSON index as a plain index that the next deploy refused, and a deploy that drops unknown indexes dropped them.DatabaseIdentificationScript returns several databases now runs every script in every one of them. A script applied in one database used to be skipped in the databases whose pass started afterwards, and those databases still reported success.After Product scripts and its VersionStampScript are now skipped, so the next run is not told this version is deployed. With ContinueOnDatabaseFailure on (the default), a run in which a template failed used to run them anyway. The exit code is still 2, and a later --ResumeQuench that finishes the failed work runs them.--Validate now reports a foreign-key name used on two tables in one template as SS-FK-006. MySQL names foreign keys per database and SQL Server per schema, so the second one fails the deploy, and the finding is an Error. MariaDB names them per table from 12.1, so there it is a Warning, and there is no finding at all when the product's MinimumVersion is 12.1 or later.LogHygiene settings are reported — A single value where a list belongs ("ScrubTokens": "DeployKey" instead of [ "DeployKey" ]), a key that is not a LogHygiene setting, or a LogTokens value other than true or false is now a warning naming the key. These used to be ignored silently, so a value you meant to mask could be logged in clear. Fix each warned key before relying on masking.SQL Server change data capture, Change Tracking and FILESTREAM now apply when SchemaQuench deploys them, a feature the server's version cannot support is now reported, and change data capture gains filegroup placement and net changes.
EnableCDC: it enabled, rotated and disabled nothing, and reported success. SchemaQuench now runs that step itself, after every column exists, so a capture instance includes the table's computed columns.EnableChangeTracking, TrackColumnsUpdated and a declared FileStream column deployed as nothing, with no error. Both now apply, after indexes and constraints. Leaving EnableChangeTracking out leaves a table's tracking as it is, so tracking a DBA enabled by hand is kept; only "EnableChangeTracking": false turns it off. A FileStream column now also enforces SQL Server's requirement for a ROWGUIDCOL column covered by a single-column primary key or unique constraint, and names the table when it is missing.UnsupportedFeaturePolicy does its job on SQL Server — Since v2.4.0, a deploy below a feature's minimum SQL Server version skipped the unsupported DDL but recorded no downgrade in the deployment summary, logged nothing, and ignored fail. The downgrade is now reported, and under fail the deploy stops before anything changes.CdcFilegroup places change tables — Set it on a table, or on Template.json as the default for every EnableCDC table, to put change tables on a filegroup of your choosing instead of the database default. Changing it never moves a change table: the deploy rotates to a new capture instance on the declared filegroup and keeps the old instance's history for you to drain and drop. Introduced in v2.7.0, it first takes effect in a v2.7.1 deploy. See Where change tables go.CdcSupportsNetChanges declares net-change support — On a table, or on Template.json as the default, it sets whether a capture instance supports net changes (SQL Server's @supports_net_changes). With it on, SQL Server generates the net-changes query function; true requires a primary key and is refused by name on a table without one. Unset keeps what earlier versions produced. See Net changes.DataTongs stops deleting rows unless you ask it to, settings that never did anything on an engine now say so, and deploys stop rebuilding what didn't change. SQL Server change data capture users should install v2.7.1 instead: in this release, a SchemaQuench deploy did not apply EnableCDC.
ShouldCast:MergeDelete is now opt-in — A DataTongs settings file that didn't mention the key used to generate MERGE scripts with the delete branch, removing target rows the extracted source did not contain, so deleting the key was not the same as setting it false. It now defaults to false; set "MergeDelete": true to keep the delete branch. A per-table MergeType was always authoritative and is unaffected.CheckExpression on a MySQL or MariaDB column now fails to load, naming the property and the file, before anything changes. Move each one to the table's CheckConstraints and keep the name the alias generated, CK_<table>_<column>, so the deployed constraint is matched rather than dropped and recreated. PostgreSQL and SQL Server are unaffected.MergeDisableRules and MergeUpdateDescendents (PostgreSQL only), DropExcludeConstraintsRemovedFromProduct (PostgreSQL only) and DropStatisticsRemovedFromProduct (SQL Server and PostgreSQL only) used to be accepted and silently ignored on other engines. Authoring one there now fails --Validate with SS-JSON-001. Delete the property — it never had an effect on that engine.SchemaSmith.ExpressionMap (SchemaSmith_ExpressionMap on MySQL and MariaDB), records the text you declared, the text the engine reported back, and the engine version in force. It is safe to empty; the only cost is one more comparison on the next deploy.CharacterSet and Collation were never emitted, so the table was created at the server's default. They are now applied.OldName — A quoted OldName made a rename silently do nothing, and left the old table to be dropped later, with its data.] in a SQL Server name (written ]] inside the brackets) and a backtick in a MySQL or MariaDB name now extract, create and rename correctly.$schema reference — Each package JSON names its own schema in the package's .json-schemas/ folder, so an editor validates and autocompletes it with no setup. Extraction stamps it, and SchemaTongs --WriteSchemasOnly adds it to an existing package. A package carrying the key will not load on SchemaSmith v2.6.0 or earlier, which matters if more than one version deploys the same package during an upgrade.--Validate catches PostgreSQL objects declared twice — An enum type, sequence or domain type declared both as JSON and as a .sql script is now reported (SS-ENUM-001, SS-SEQ-001, SS-DOM-001). These are Error-severity findings on packages that used to pass, so a CI step gated on --Validate fails until you delete whichever form you did not mean to keep.--Validate failed any package with a foreign key to a table it does not declare, so every patch whose table carried a foreign key failed although it deployed correctly. SS-FK-002 is now a warning, because the deploy creates such a key whenever the table already exists on the target.Ledger, graph, and partitioned tables are declared now instead of hand-scripted, PostgreSQL sequences and enum types converge on deploy rather than sitting in guarded scripts that never run twice, and captured change history stops disappearing when you alter a column.
MemoryOptimized: true and optionally Durability; "SCHEMA_AND_DATA" is the default and keeps both schema and rows across a restart, "SCHEMA_ONLY" keeps the schema and discards every row. Indexes are declared in the ordinary Indexes array and emitted inline; an index with a BucketCount becomes a hash index. Changes to the MemoryOptimized setting, the Durability value, the inline index set, or a BucketCount are refused by name rather than attempted, because SQL Server has no ALTER for any of them. The database requires a MEMORY_OPTIMIZED_DATA filegroup and In-Memory OLTP support; SchemaSmith fails rather than degrading the table to disk, which would alter concurrency and durability semantics."Ledger": "AppendOnly" or "Updatable" creates a tamper-evident ledger table, and the setting round-trips through extraction. It cannot be combined with IsTemporal — a ledger table manages its own history — and because SQL Server has no ALTER to or from one, a change on a deployed table is refused rather than attempted. Requires SQL Server 2022; below that the table deploys as an ordinary one and the downgrade is reported through UnsupportedFeaturePolicy."GraphType": "Node" or "Edge" creates the table AS NODE / AS EDGE and round-trips through extraction. SQL Server has no ALTER that converts a table to or from a graph table, so a change on a deployed table is refused by name. Requires SQL Server 2017, and the graph pseudo-columns SQL Server adds are never extracted and never dropped."FileStream": true on a VARBINARY(MAX) column stores its value as a file on an NTFS filegroup instead of in the row, and FileStreamFileGroup names the table's FILESTREAM_ON filegroup. The table must carry a ROWGUIDCOL column covered by a single-column primary key or unique constraint — a unique index looks equivalent and is not. FILESTREAM has to be enabled on the server and the database first; SchemaSmith creates neither.Sequences/ folder holding .json files declares a sequence's DataType, Increment, bounds, Cache and Cycle, and SchemaSmith alters only what differs, so an unchanged sequence produces no statement. The current value is never managed — it records which numbers have already been handed out, so a deploy that reset it would re-issue keys already in use. Scripted .sql files in the same folder still run exactly as before.Enum Types/ and Domain Types/ folders declare each type in .json and converge it, replacing the guarded CREATE script that quietly stopped doing anything once the object existed. Enum order is preserved because PostgreSQL compares values by declared position, so a value added mid-list lands mid-type; removing one is reported and never performed, since it would mean recreating the type and dropping every column using it. Domain types converge their CheckConstraints, NotNull and Default through ALTER DOMAIN, without dropping the type or touching the columns that use it.Policies array on a table declares its CREATE POLICY definitions — Name, Permissive, Command, Roles, UsingExpression and WithCheckExpression — and they round-trip through extraction. This completes RowLevelSecurity, which could switch the feature on with no way to declare a policy to go with it. A policy that leaves the package is dropped, with no opt-out flag: a stale policy is a live access-control rule.SYSTEM VERSIONED rather than BASE TABLE, and extraction matched only the latter — so such a table vanished from every extracted package with no error and no warning, and drop-by-absence then ran against a package that was short. The table type is now recognized for both authoring forms, and the engine-owned row-start and row-end columns stay out of the package so a re-deploy never tries to manage columns the engine owns.PERIOD FOR definition — the interval a row's data is valid for, as distinct from system versioning's record of when it was stored — is read into a Periods list on the table, and re-deploying a table that has one no longer fails outright. DropPeriodsRemovedFromProduct removes a period the package has stopped declaring; it defaults to off, because extraction omits Periods entirely on a table that has none, so an older package cannot authorize the removal. Dropping a period leaves its columns and their data untouched.@@system_versioning_alter_history is KEEP, and KEEP does not merely permit the change — it applies the change to the stored history too, rewriting old rows into a shape they never actually had. That is a data-retention decision, so SystemVersioningAlterHistory leaves it to you: unset, the engine refuses the change exactly as it does today, and the refusal only fires when a change genuinely needs it.PartitionScheme and PartitionColumn declare where a table's data lives, and the same pair on an index places it independently — an index is not required to be aligned with its table. The scheme is a name only: SchemaSmith never creates the partition function or scheme, exactly as it never creates a filegroup, and a scheme missing from the target fails by name before any DDL runs. Changing a deployed table's placement is refused, because moving it rewrites every row.Partitioning object carries Method (RANGE, LIST, HASH, KEY and the COLUMNS forms), Expression, PartitionCount for HASH and KEY, and an ordered Partitions list for RANGE and LIST, where the order is part of the definition. It is applied on create and round-trips through extraction; a change on a deployed table is refused, since it rewrites every row. A table the package says nothing about is left alone, so a hand-partitioned database still deploys the way it does today.PageCompressed and PageCompressionLevel declare MariaDB's InnoDB page compression, and MySQL spells its equivalent Compression — each is accepted only on its own engine. KeyBlockSize sets the InnoDB compressed-page size in KB and works on both, though it is only meaningful alongside RowFormat: "COMPRESSED". All of them are applied on create and round-trip through extraction.Product:PreserveExistingOrder, on by default, keeps the order a file already had for everything still present, appends what is genuinely new, and drops what the database no longer has. Neither it nor Product:ObjectOrder changes a deployment — they decide how the file is written."EnableCDC": true used to disable capture, drop the capture instance and its change table, and re-enable it — losing every row a downstream reader had not yet consumed, silently. A deploy now stands up a second capture instance beside the original, which is SQL Server's own supported pattern, and the log names the old instance so you can retire it once your readers have drained it. Only two capture instances per table exist, so a deploy that would need a third refuses before touching any column.DropSchemaBoundDependents goes further and drops those modules, applies the column change, then recreates them from your package; it stays off by default, because a drop that fired unasked would destroy a scripted object in a package that never opted in.Mistyped settings now warn instead of vanishing, XML reference-data delivery works on every supported engine, and a long list of unchanged objects finally stop redeploying.
Target:Sever bound nothing and the run continued exactly as though it had never been set, so a deployment could quietly ignore half its configuration. Each tool now checks the settings it was handed against the settings it actually reads and warns about anything unrecognized, across the settings file, SmithySettings_ environment variables, and command-line overrides alike. It is a warning, not an error — the run continues.DataDelivery.ContentEncoding: "Xml" is now accepted on every supported platform, not SQL Server alone. On SQL Server the default JSON encoding shreds content with OPENJSON, which needs compatibility level 130, so a database left at 100–120 could not run a JSON delivery at all; the XML path works at every level down to 100. PostgreSQL shreds the payload natively with xmltable(), and MySQL and MariaDB convert it once, up front, then shred it through the ordinary JSON row source.DataTongs --DeliveryEncoding=Xml now extracts in the XML delivery encoding from any source engine, where it previously warned and downgraded to JSON on anything but SQL Server, and stamps the encoding onto the delivery it configures.--ConfigureDataDelivery actually configures delivery for a table, DataTongs no longer also emits a merge script for that same table, so one extraction stops producing two competing ways to load it."IsColumnSet": true deploys as COLUMN_SET FOR ALL_SPARSE_COLUMNS, the XML column that aggregates a table's sparse columns. Available at the SQL Server 2008 floor, alongside Sparse.FileGroup on a table or an index is a filegroup name only, never a file path, so the package stays portable across environments. Leave it unset and SchemaSmith does not manage placement at all. An index with no filegroup of its own follows its table, not the database default — and because an index is declared independently of its table's filegroup, you can keep a large table's data and its indexes on separate storage.HistoryTableName and HistoryTableSchema point a system-versioned table at a history table other than the default <Name>_Hist in the same schema."OnUpdateCurrentTimestamp": "CURRENT_TIMESTAMP" deploys a TIMESTAMP or DATETIME column as ... ON UPDATE CURRENT_TIMESTAMP, and an optional fractional-seconds precision round-trips exactly ("CURRENT_TIMESTAMP(3)"). It is independent of Default, which governs the value on INSERT while this governs the refresh on UPDATE — declare either, both, or neither. No version gate applies."Srid": 4326 deploys as col POINT SRID 4326, so the column accepts only geometries in that reference system. MySQL 8.0.3 and above; MariaDB has no equivalent attribute at any version, and the restriction is skipped there.DESC key was re-created on every deploy and extraction never reported the DESC at all; a multi-column index declared the natural way, with a space after the comma ("IndexColumns": "tenant_name, event_time"), was likewise re-created every time.[RetentionDays] <= 365 in its own normalized form, so a constraint written the natural way was dropped and re-created on every deploy.TIME(n) or DATETIMEOFFSET(n) column was re-altered on every deploy, and an extract-then-deploy round trip silently lost the declared precision.DECIMAL column with a declared default was re-altered every run, because the engine stores the default at the column's scale and "Default": "0" on a DECIMAL(12,2) never matched it back; a prefix-length index ("IndexColumns": "code(5)"), ordinary practice for indexing a long text column, was rebuilt every run.STRING_AGG, a SQL Server 2017 function. It now falls back to FOR XML PATH ordered aggregation, so the end state is identical to a modern deployment.Deploy to the servers you already run — SchemaSmith now targets SQL Server 2008, PostgreSQL 12, and MySQL 5.7, and adds MariaDB as a supported platform.
OPENJSON/FOR JSON) at level 130 and above and switches automatically to an XML encoding below it, where OPENJSON is a parse error; Target:CompatEncoding (auto|legacy|modern) overrides the pick.JSON_EXTRACT shred in place of JSON_TABLE. Newer DDL falls back to an equivalent path with the same end state, so a column rename uses CHANGE COLUMN instead of RENAME COLUMN; MySQL 5.6 and MariaDB 10.1 have no JSON support and are rejected.Target:UnsupportedFeaturePolicy decides what happens when a declared feature outruns the target's version, on SQL Server, PostgreSQL, MySQL, and MariaDB alike. It covers cases like NULLS NOT DISTINCT below PostgreSQL 15, CHECK constraints below MySQL 8.0.16, and descending index key parts below MySQL 8.0. The default warn applies the object without the unsupported clause and names it under "Unsupported Feature Downgrades" in the deployment summary with the version it needs; fail aborts pre-emptively instead."Platform": "MariaDb" in Product.json and packages, tokens, templates, fan-out, checkpoint/resume, and WhatIf all work as they do for MySQL. MariaDB gets its own native DDL generation, so it is a platform in its own right — a package built for MySQL does not deploy to MariaDB, or the reverse. See the MariaDB documentation.{{ServerMajorVersion}} and {{CompatibilityLevel}}, gate a ShouldApplyExpression or a script body on version with one portable integer comparison ({{CompatibilityLevel}} >= 130) instead of each engine's native version predicate. Gate syntax on {{CompatibilityLevel}} and features on {{ServerMajorVersion}}, since a modern server can host a database left at an old compatibility level; on PostgreSQL, MySQL, and MariaDB the two resolve to the same value, so one expression shape stays portable.DataDelivery can declare "ContentEncoding": "Xml" (default "Json", unchanged), so automatic table-data delivery works at every SQL Server compatibility level, not just the 130 and above that OPENJSON shredding needs. The XML row shape is a documented, stable contract, and SchemaTongs and DataTongs take --DeliveryEncoding=Xml to extract straight into it; SQL Server only, since the other engines have no equivalent cliff.winget install SchemaSmith.SchemaSmith puts all four CLI commands on your PATH. The manifest is submitted to microsoft/winget-pkgs each release.yay -S schemasmith-bin, or any AUR helper, installs all four CLIs from the official release binaries.linux/amd64 and linux/arm64) image on Docker Hub (schemasmithyfree/schemaquench) and GHCR (ghcr.io/schema-smith/schemaquench), so a deploy runs with no .NET install. Tags are latest, X.Y.Z (immutable), X.Y, and X.SchemaSmith Deploy GitHub Action — A composite action for running SchemaQuench from a CI/CD pipeline on SQL Server, PostgreSQL, MySQL, and MariaDB, deploying on merge or previewing a run with WhatIf first. It fetches the matching self-contained binary for the runner OS at run time, and pinning @vX.Y.Z pins both the action and the CLI version it runs.OldName now renames a table or column in place on PostgreSQL, MySQL, and MariaDB, preserving its data instead of dropping and recreating the object; previously this worked on SQL Server only. The same deploy also carries the table's own primary key, unique constraint, and index renames, which PostgreSQL used to abort with 42P16: multiple primary keys for table.INFORMATION_SCHEMA once per declared object, in a form the server could not index or push filters down through; INFORMATION_SCHEMA is not a stored table on those engines, so every one of those reads was expensive.IsTemporal and re-emitted the period columns (ValidFrom and ValidTo) as ordinary columns, so extract then re-deploy silently dropped system-versioning.Control what gets dropped, see exactly what a run did, and validate every package before it ships.
PreventDrop — Set PreventDrop: true in SchemaQuench.settings.json (or the SmithySettings_PreventDrop environment variable) and that environment never drops an object for being absent from the package. Withheld drops are itemized in the run summary, and a change that requires dropping and recreating a declared object still applies normally.PreventDrop — Mark a table "PreventDrop": true and it is never dropped by absence, even after you delete it from the package. The flag persists in the database itself, as a PreventDrop extended property on SQL Server and, on PostgreSQL and MySQL, a PreventDrop column on the ProductOwnership tracking table, so it survives the table's own removal.DropCheckConstraintsRemovedFromProduct silently failed to protect a named check that referenced only one column.SchemaQuench - Summary.json and SchemaQuench - Summary.md to the log directory, capturing outcome, exit code, duration, per-target results, which migration scripts ran, bottleneck timings, and verified created, modified, and dropped counts per object type.SchemaQuench - Failures.log groups every failed scope by phase with its engine error, its resolved-SQL artifact path, and the log lines leading up to it, while a *** FAILED banner marks each one live in the progress stream.Resolved SQL written to: line, honoring ScrubArtifacts redaction like every other failure artifact.--Validate static linter — Lint a schema package with no connection, no target, and no side effects, catching malformed files, duplicate objects, dangling references, undefined tokens, and JSON-schema violations. It exits 0 when clean and 2 on any error, so it drops straight into a CI gate.<schema>.<table>[.<VariantName>].json, with the schema segment omitted on MySQL and schema-template packages, so a table's variants sort together in source control. A table's identity lives in its content, so a renamed file still deploys; --Validate just emits an SS-FILE-NAME-003 warning naming the canonical form.--Key=value, not just the ones with named switches. Nest with a double underscore (--Target__Server=prod-db) and the override beats the settings file, user secrets, and environment variables.DataDelivery can now be an array of independently gated deliveries, each with its own ShouldApplyExpression and optional VariantName. Every delivery whose gate passes applies, so you can hold seed data to dev, swap a lean production reference set for a rich one, or layer additive patch slices.IdentificationDatabase template property re-targets DatabaseIdentificationScript at a control-plane registry database instead of the platform init database. It is token-resolvable, and on PostgreSQL it is the only way to read a registry roster, since a connection there cannot cross databases.ShouldApplyExpression, SchemaTongs now evaluates each gate against the source database and folds the extracted shape into the variant that is active there, keeping its gate and variant name. Previously extraction discarded the extracted shape and silently lost real drift.enum('web','ios','android') deployed as enum('WEB','IOS','ANDROID'), because type normalization upper-cased the quoted literals along with the keyword. Only the keyword is upper-cased now, and values compare case-sensitively so a corrected declaration converges.GENERATED … AS IDENTITY column failed to deploy with a repeating syntax error and never converged; identity columns now compare by kind only. Computed columns on a new table also skip the old create-plain-then-drop-and-re-add cycle.Ship targeted patches, protect what you didn't touch, and deploy safely across engine versions.
--Zip bundling.--TestConnection and --PreviewTargets validate every configured server and print a read-only report of the databases and schemas a run would touch, exiting before any change is made.MinimumVersion enforcement — SchemaQuench detects each target's engine version and aborts the whole run before touching anything if a target is below the declared version floor (previously the field was metadata only).ShouldApplyExpression now accepts either a bare predicate or a full SELECT on every kind of gate.Multi-tenant fan-out, conditional deployments, and deployments you can debug.
{{SchemaName}} — a natural fit when each tenant owns its own schema.ShouldApplyExpression evaluated against the target at deploy time — split engine-specific folders, skip a folder on managed platforms, or keep test data out of production.One free product, three platforms, one source tree.
--ResumeQuench picks up after a failed run and skips everything that already completed. No more re-running the first 50 migrations because the 51st failedDataDelivery block on a table and SchemaSmith handles foreign-key dependency ordering and nullable FK columns automatically. Hand-authored merge scripts go awayShouldApplyExpression) — Templates carry SQL expressions evaluated at runtime. Deploy different schemas to dev, test, and prod from the same package{{TokenName}} resolves in every script (Before/After, objects, migrations, data delivery), with environment-variable overrides. Advanced tags pull values from inline queries, files, binary contents, or full schema JSON. One package parameterizes cleanly across every environmentKindleTheForge, UpdateTables, and DropTablesRemovedFromProduct toggles let you run partial-package deployments — data fixes without schema churn, or schema-only without touching reference datalibicuchoco install schemasmith on Windows. .deb and .rpm packages for Debian, Ubuntu, RHEL, Fedora, and Amazon Linux. One install puts all three CLI commands on your PATHCommunity License v2.0: No Restrictions on Organization Size or Revenue
License file integration, checkpoint-based deployment recovery, and five new SchemaHammer UI features strengthen reliability and streamline workflow management across all editions.
Includes all Community fixes above, plus:
Refined DataTongs configuration and improved PostgreSQL type handling deliver cleaner error messages and more precise data extraction for enterprise workflows.
Includes all Community changes above, plus:
Includes shared changes above, plus:
PostgreSQL Enterprise edition launches alongside table import capabilities and limited patch mode, expanding SchemaSmith's reach across database platforms.
Includes all Community changes above, plus:
Targeted fixes for data handling and delivery reliability round out the fall release cycle.
Includes all Community fixes above, plus:
Table and column rename support, expanded CLI flexibility, and streamlined installers forge a more powerful and accessible schema management experience.
--ConfigFile switch — Specify an alternate appsettings configuration file--Version switch — Display version information from the command line--LogPath switch — Specify a custom path for log file outputSCHEMASMITH_ environment variable prefix for configurationIncludes all Community changes above, plus:
Foundation release introduces DataTongs trigger controls, Docker containerization support, and core stability improvements for production-ready deployments.
Includes all Community changes above, plus:
Free schema-as-code for SQL Server, PostgreSQL, MySQL, and MariaDB.
The source is on GitHub for anyone to read.
Get Started on GitHub