Nishi FamilyCompare › Web CMS and Site Building

Nishi Compare · measured, not asserted

Web CMS and Site Building

Nishi vs the field — every Nishi cell is measured against real organ source at emit time; each gap names the watch contract that will close it.

Nishi vs WordPress and Wix and Webflow and Drupal

Layer 1 · Executive

Where we are. A working sovereign CMS and site factory: structured content store, whole-site blueprint as one data file, requirements brief to finished copy, design-token SSOT, template corpus, admin save-preview-publish daemon, REST plus projection API, WordPress import, sha-verified export-import (exceed), sha-pinned static publish, BM25 on-site search, fire-once scheduling, comments, forms, the enforced conversion-funnel floor (exceed), e-commerce primitive, i18n, validated block rows, NL command edit with rollback, per-pattern generation, A-B assignment, WCAG-AAA enforced fleet-wide, roles FSM, never-brick deploy (exceed), multisite and SEO by construction. Behind WordPress on depth where its ecosystem leads: N-deep revisions, a visual canvas, and extensions.

Where we need to go. A CMS a non-developer runs for real sites on owned hardware with the three depth axes WordPress owns -- restore any revision, edit on a visual canvas, extend with declared organ-plugins -- without importing the foreign-code marketplace that is WordPress's attack surface.

The unit. 1 u = one measured session-leg (estate calibration: graphics R21 in one leg 2026-08-15). Local evidence: the site-factory gates (requirements 6/6, archetype 9/9, export-import 7/7) each landed as one leg; estimates are relative to those.
Where we are: 3 open rungs. Breadth is real and gated; the three open rungs are WordPress's ecosystem-depth axes. Counts measured at emit below this line.
Cost to revision depth: 1 u. CM1 restore-to-any-snapshot, additive and reversible.
Cost to a visual editor: 2.5 u. CM2 the block canvas emitted from the validated row model, round-tripping byte-identical.
Cost to extensibility: 2 u. CM3 the declared organ-extension registry -- sovereign plugins, fail-closed on undeclared hooks.

Research bar. WordPress is measured on revisions, Gutenberg block editor, 60k-plugin ecosystem, REST API. Theirs: the reference on all three open axes. Ours: CM1 CM2 CM3 measured on this page.

Research bar. Webflow is measured on visual designer, variables, CMS API. Theirs: the visual-canvas bar. Ours: CM2.

26 of 30 capabilities measured|3 of them measured exceeds|4 open|coverage 866/1000|adoption 16 full / 10 partial

Layer 2 · Roadmap

Do this next — computed by the ranker, never chosen by a seat

Order from nx_compare_rank (nx_dr_ocm: (deficit + cost-of-delay + option + enables) x sponsor x self-sufficiency x momentum / cost). FINISH rows are rungs whose symbol is present but whose organ is short of full adoption: the cheapest closures on this board, listed before any new work. Stamp: # asof=1787883362 domain=cms target_version=0.1 rungs=4 done=1 open=3 finish=0 ranker=nx_dr_ocm

#StageRungPriorityDerivation
#10.1N-deep revisions with restore (CM1) snap_restore_n3000v=15 m=2 c=10
#2laterOrgan-extension registry (CM3) cp_plugin_load700v=14 m=1 c=20
#3laterVisual block canvas (CM2) pb_canvas_emit560v=14 m=1 c=25

Critical path — contract, done-rule, executor, cost

RungCloses withDefinition of done (pre-declared)ExecutorEst.
Snapshot organ (CM0)snap_read_fileContent snapshots plus one-step prev backups -- LANDED, listed so CM1 carries momentumOrgan0 u
N-deep revisions with restore (CM1)
after CM0
snap_restore_nRestore any recorded snapshot; the pre-restore state is itself snapshotted first so every restore is reversible; gate proves restore-then-restore returns byte-identical content and a missing snapshot id is refusedOrgan1 u
Visual block canvas (CM2)pb_canvas_emitA canvas emitted FROM the validated row model (pb_row_valid) with drag, resize and reorder; gate proves a canvas edit round-trips to a blueprint that re-validates and emits byte-identical pages when nothing movedOrgan2.5 u
Organ-extension registry (CM3)cp_plugin_loadAn organ declares the hooks it serves in its header; the site builder loads it by name and refuses an undeclared hook; gate proves a declared extension renders into the page and an undeclared one is refused with the hook namedOrgan2 u

Milestones

MilestoneRungsCumulative
M1 · Revision depthCM11 u
M2 · Visual editingCM23.5 u
M3 · Extensible site factoryCM35.5 u
Layer 3 · Engineering
How this is scored. Every Nishi mark is measured: the generator reads the real organ source on disk and requires the implementing symbol to exist (no self-grading). A watching tag names the organ and symbol contracted to close a gap — the mark flips itself on the next compare beat when that workstream ships, and the comparewatch- plane row flips with it. The flip is necessary, not sufficient: it proves the symbol exists, never that the capability is good. The bar is the rung's pre-declared done-rule, proven by its gate — a symbol shipped without the behaviour behind it is a defect, and the flip is exactly what makes that defect visible instead of quiet. Competitor marks record documented capability presence — presence, not depth or scale. Adoption is measured too: every measured row carries where its organ stands on the estate's ladder (source → built → promoted → registered → invoked; libraries by importer reach minus validation importers; gates by the execution surfaces that run them). A row is fully adopted only at the top of its ladder; anything short is tagged partial with the exact remedy, so a build nobody promoted can no longer read as shipped. Census stamps: importers asof 1787849099, gate census asof 1787855507 (unix seconds; -1 = census absent).

Capability matrix — measured against source

leads / measured exceed present partial absent · click any capability for its evidence

CapabilityNishiWordPressWixWebflowDrupal
Structured content store, portable text bundle, no SQLMeasured: cst_get exists in runtime/_hdl_build/nx_cms_store.nx, verified at emit. Content serializes to a self-describing text bundle on your disk; rivals sit on MySQL or a proprietary cloud [wix-dev-docs] Adoption: LIB-WIRED importers=21 nonval=6 — fully adopted (top of its ladder).
Whole-site blueprint as ONE data fileMeasured: sb_build_site exists in runtime/_hdl_build/nx_site_build.nx, verified at emit. A .site line file emits index, pages, nav, sitemap, robots; WP splits theme plus database, Drupal config-sync is partial Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, no MCP invocation on record (a direct fork logs the runner, so this is not proof it never ran); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).
adoption REGISTERED-DARK
Requirements brief compiles to finished copyOpen — no implementing organ is measured for this axis yet. A .req brief fills 10 archetypes with real copy, gate 6 of 6; no rival compiles requirements into content
Design-token SSOT, retheme without markup editsMeasured: sk_head exists in runtime/nx_sclass_kit.nx, verified at emit. Tokenized shell rethemes by swapping values; WP theme.json and Webflow variables are the comparators [webflow-dev-docs] Adoption: LIB-WIRED importers=9 nonval=9 — fully adopted (top of its ladder).
Template corpus consumed from real open templatesMeasured: ti_classify exists in runtime/_hdl_build/nx_tpl_ingest.nx, verified at emit. 28 deduped structural patterns crawled sovereign; WP 12k-theme breadth is the reference Adoption: REGISTERED-UNAUTHORISED — PARTIAL: registered, no cap ever minted; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).
adoption REGISTERED-UNAUTHORISED
Content snapshots and revisionsMeasured: snap_read_file exists in runtime/_hdl_build/nx_cms_snapshot.nx, verified at emit. WP N-deep revisions with restore UI is the reference; ours is a snapshot organ plus one-step prev backups Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).
Admin save-preview-publish API, validated, backed upMeasured: sed_backup_index exists in runtime/_hdl_build/nx_siteedit_daemon.nx, verified at emit. Live daemon validates the blueprint, previews to a scratch docroot, publishes keeping the previous page Adoption: RUN-BY:daemon — fully adopted (top of its ladder).
REST plus GraphQL-style projection content APIMeasured: cms_api_render_obj exists in runtime/_hdl_build/nx_cms_api.nx, verified at emit. WP REST API is the reference [wp-rest-api]; ours emits injection-safe JSON with caller-chosen field projection [graphql-oct2021] Adoption: LIB-GATE-ONLY importers=1 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=1
Import from WordPress and any foreign HTMLMeasured: cms_migrate_wp_import exists in runtime/_hdl_build/nx_cms_migrate.nx, verified at emit. Field and value migration in; nx_site_import strips any foreign site to a portable blueprint Adoption: LIB-GATE-ONLY importers=2 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=2
Tamper-evident export-import, sha-verifiedMeasured exceed: cms_migrate_export in runtime/_hdl_build/nx_cms_migrate.nx, verified at emit. Refuses a corrupt or tampered bundle by hash, gate 7 of 7; rival migrations move bytes silently Adoption: LIB-GATE-ONLY importers=2 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=2
Static publish API, sha-pinned promote, prev-backedMeasured: ma_do_promote_content exists in runtime/_hdl_build/nx_mgmt_api.nx, verified at emit. Upload then promote with confirm; concurrent sessions can never cross-publish each other's bytes Adoption: LIVE-DAEMON — fully adopted (top of its ladder).
On-site search, BM25Measured: sr_cat exists in runtime/_hdl_build/nx_site_search.nx, verified at emit. Gated to land the right page on 3 of 3 queries against a real practice corpus Adoption: LIB-GATE-ONLY importers=1 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=1
Scheduled publishing, fire-once cronMeasured: sg_num exists in runtime/_hdl_build/nx_cms_schedule_gate.nx, verified at emit. Register, validate, tick, fire exactly once, missed jobs catch up once Adoption: GATE:LIVE trial=- — fully adopted (top of its ladder).
CommentsMeasured: cmt_score exists in runtime/_hdl_build/nx_cms_comments.nx, verified at emit. WP native comments are the reference Adoption: LIB-WIRED importers=4 nonval=2 — fully adopted (top of its ladder).
Forms handlingMeasured: fg_cat exists in runtime/_hdl_build/nx_cms_forms_gate.nx, verified at emit. Gated form parse and validation; WP leans on plugins Adoption: GATE:LIVE trial=GREEN — fully adopted (top of its ladder).
Conversion-funnel floor ENFORCED at emitMeasured exceed: wb_ux_compliant in runtime/_hdl_build/nx_web_builder.nx, verified at emit. Refuses any blueprint missing CTA, on-site search, trust, or a 3-step path; no rival refuses to build a bad funnel Adoption: LIB-WIRED importers=24 nonval=17 — fully adopted (top of its ladder).
E-commerce cart, tax, totals primitiveMeasured: ec_cart_subtotal exists in runtime/_hdl_build/nx_cms_ecommerce.nx, verified at emit. Woo is a plugin; ours is integer money math, gated Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).
Multilingual i18nMeasured: i18n_resolve exists in runtime/_hdl_build/nx_cms_i18n.nx, verified at emit. Drupal core multilingual is the reference [drupal-multilingual] Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).
Block rows validated responsiveMeasured: pb_row_valid exists in runtime/_hdl_build/nx_cms_pagebuilder.nx, verified at emit. Gutenberg and the Webflow designer are the references [webflow-dev-docs]; ours validates rows and widths, no visual canvas yet Adoption: LIB-GATE-ONLY importers=1 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=1
NL command edit with rollbackMeasured: cmd_parse exists in runtime/_hdl_build/nx_site_command.nx, verified at emit. Parsed intent: set-hero, add, remove, cta, rollback; ambiguous commands are a safe no-op Adoption: LIB-GATE-ONLY importers=1 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=1
Per-pattern generation, consumed structure drives layoutMeasured: sa_recipe_seq exists in runtime/_hdl_build/nx_site_archetype.nx, verified at emit. 28 live variation pages each follow their source template's own section order, gate 9 of 9 Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
adoption SOURCE-ONLY
A-B testing assignmentMeasured: ab_assign exists in runtime/_hdl_build/nx_cms_abtest.nx, verified at emit. Deterministic hash assignment, gated Adoption: LIB-WIRED importers=3 nonval=1 — fully adopted (top of its ladder).
Accessibility enforced on the emitted fleetMeasured: a11_find exists in runtime/_hdl_build/nx_cms_a11y.nx, verified at emit. WCAG-AAA contrast measured on every generated page [wcag22]; rivals reach a11y via tools and plugins Adoption: LIB-GATE-ONLY importers=1 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.
adoption LIB-GATE-ONLY importers=1
Roles authz FSM, tenant isolationMeasured: rg_num exists in runtime/_hdl_build/nx_cms_roles_gate.nx, verified at emit. The gate caught a real tenant-isolation bug and refused to record until fixed; WP roles are the reference Adoption: GATE:LIVE trial=- — fully adopted (top of its ladder).
Never-brick deploy, health watchdog, auto-rollbackMeasured exceed: ma_do_deploy in runtime/_hdl_build/nx_mgmt_api.nx, verified at emit. Promote then detached health probe; a failed deploy restores the previous binary automatically Adoption: LIVE-DAEMON — fully adopted (top of its ladder).
Multisite from one control planeMeasured: ms_cat exists in runtime/_hdl_build/nx_cms_multisite_gate.nx, verified at emit. Two production domains serve live from one host config today Adoption: GATE:LIVE trial=GREEN — fully adopted (top of its ladder).
SEO sitemap and robots emitted by constructionMeasured: sg_cat exists in runtime/_hdl_build/nx_cms_seo_gate.nx, verified at emit. Every generated site ships sitemap.xml [sitemaps-protocol] and robots.txt [rfc9309]; Yoast-class depth is the WP reference Adoption: GATE:LIVE trial=GREEN — fully adopted (top of its ladder).
Plugin and extension marketplaceOpen — watching runtime/nx_cms_plugins.nx : cp_plugin_load, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WP 60k plugins [wp-plugins]; the honest structural gap and a deliberate sovereignty tradeoff -- the contract is a sovereign organ-extension registry (an organ declares the hooks it serves; the site builder loads it by name, fail-closed on an undeclared hook), never a foreign-code marketplace
watching cp_plugin_load
N-deep content revisions with restoreOpen — watching runtime/_hdl_build/nx_cms_snapshot.nx : snap_restore_n, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. The snapshot row above is present at one-step depth; WP keeps N revisions with a restore UI -- the contract is restore-to-any-recorded-snapshot with the previous state itself recorded, so a restore is additive and reversible
watching snap_restore_n
Visual block canvas (drag, resize, reorder)Open — watching runtime/_hdl_build/nx_cms_pagebuilder.nx : pb_canvas_emit, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. Rows and widths validate today (pb_row_valid) but there is no visual canvas; Gutenberg and the Webflow designer are the references [webflow-dev-docs] -- the contract is a canvas emitted FROM the validated row model that round-trips to a byte-identical blueprint
watching pb_canvas_emit

Risk register

RiskLikelihood x impactMitigation
A canvas that emits a different blueprint than the one it read silently rewrites sitespossible x highCM2 done-rule is byte-identity on a no-op edit before any editing feature is admitted.
Extensions reintroduce the foreign-code surface WordPress suffers frompossible x highCM3 admits organs only -- sovereign source, declared hooks, no foreign runtime.
On these two registers. Rows are declared in the domain's plan file and carry the debt id, which is the join key back to the sovereign debt plane — that plane, not this page, is the authority on state. Reconciling them automatically (the regen reading the plane and refreshing these rows) is a named, owed rung; until it lands, treat an id here as a pointer to look up, not a status to trust.
Honest verdict. The coverage above is capability presence measured against source — not depth, scale, or polish, where mature rivals may lead. Exceeds are claimed only where a mechanism backs them. Every open gap is a watch contract: it names the organ and symbol that closes it, and this page flips the cell itself when that workstream ships.

Person · product · place — not yet measured for this domain

Every compare carries this layer. Declare knowledge/compare/cms.ppp (rows surface|nishi or c1..c4|label|url|connect naming OUR live surface and each rival's front door), run nx_ppp_probe domain cms, and this section fills itself on the next beat: the same ruler on both sides — privacy and CX (third-party hosts, tracker classes, cookies, security headers), design and longevity (design hygiene, computed WCAG contrast, render-blocking resources, unsized media, script weight, theme and motion queries), findability (landmarks, skip link, on-site search, breadcrumb, headings, internal links).

References

Beyond a link list. Every reference below resolves twice — the publisher's copy and, where banked, the estate's own non-rottable library mirror with a content pin — and carries its evidence class plus the exact claim on this page it grounds. Keyed marks like [key] in the matrix notes jump here. A dash means honestly absent, never assumed.
  1. [wp-rest-api] WordPress. REST API Handbook -- the WordPress REST API reference (routes, endpoints, authentication, field filtering). Vendor documentation. publisher · read in our library knowledge/fetched/cmp_cms_wp_restapi.html · pin heb2d3561e17ea11d2ec5b254f419742722f293d637abdcaf0f1abf239ad4d4a5 · accessed 2026-08-18 · vendor-docGrounds: The "REST plus GraphQL-style projection content API" row (the note: WP REST API is the reference) and the WordPress column's Best code there -- our cms_api_render_obj is graded against this documented API.
  2. [wp-plugins] WordPress.org. WordPress Plugin Directory -- browse over 69,000 free plugins (page text 2026-08-18); the largest directory of free and open source WordPress plugins. publisher · read in our library knowledge/fetched/cmp_cms_wp_plugins.html · pin h0d9e772ddceb25404eaed2a4e5ddbdd4a346bb564563556f41067f22df252e6d · accessed 2026-08-18 · vendor-docGrounds: The "Plugin and extension marketplace" row (_ABSENT_ nx_cms_plugins; the note says WP 60k plugins -- the live directory page reads over 69,000): the honest structural gap and deliberate sovereignty tradeoff is measured against this directory, and the WordPress Best code on "Comments", "Forms handling" (plugins) and "SEO" (Yoast-class) leans on the same ecosystem.
  3. [wix-dev-docs] Wix. Wix Developer Documentation, APIs and Guidelines (Wix Docs). Vendor documentation. publisher · read in our library knowledge/fetched/cmp_cms_wix_dev.html · pin h094a345d258b0a27562f0576ff12e4df2a16b5a932824d8731035c7abb61d423 · accessed 2026-08-18 · vendor-docGrounds: The Wix column codes (Yes on the content store, admin API, scheduling and forms rows; Part on tokens, revisions, API projection and multilingual): Wix is the proprietary-cloud site builder those codes describe, and the foil for the "Structured content store, portable text bundle, no SQL" row note (rivals sit on MySQL or a proprietary cloud).
  4. [webflow-dev-docs] Webflow. Getting started with Webflow Apps -- Webflow Developer Documentation (Data API, Designer API, apps). Vendor documentation. publisher · read in our library knowledge/fetched/cmp_cms_webflow_dev.html · pin h1288a2889d0516a28b7a660ab955619207c332bd6a845f6475aef8eb2980a026 · accessed 2026-08-18 · vendor-docGrounds: The Webflow column: Best on "Block rows validated responsive" (the Webflow designer is a reference) and Yes on "Design-token SSOT" (Webflow variables are the comparator) -- the developer documentation is the vendor surface those codes are graded against.
  5. [drupal-multilingual] Drupal.org. Multilingual guide -- Administering a Drupal site (Drupal core multilingual: language, interface, content and configuration translation). Vendor documentation, updated 2023-11-22. publisher · read in our library knowledge/fetched/cmp_cms_drupal_multilingual.html · pin h18ca599b3e4d1b8c503907784e93955a1078c7d9e2bdcdda75382e3196c9e7f3 · accessed 2026-08-18 · vendor-docGrounds: The "Multilingual i18n" row (the note: Drupal core multilingual is the reference) and Drupal's Best code there -- our i18n_resolve is graded against Drupal core's four multilingual modules.
  6. [wcag22] W3C. Web Content Accessibility Guidelines (WCAG) 2.2, W3C Recommendation (12 December 2024 edition): success criterion 1.4.6 Contrast (Enhanced), AAA, contrast ratio at least 7 to 1. publisher · accessed 2026-08-18 · published-standardGrounds: The "Accessibility enforced on the emitted fleet" row: WCAG-AAA contrast measured on every generated page (nx_cms_a11y a11_find) is this Recommendation's 1.4.6 bar; rivals reach a11y via tools and plugins, so the row grades the enforcement, not the intent.
  7. [sitemaps-protocol] sitemaps.org. Sitemaps XML format -- the Sitemap protocol (urlset, url, loc, lastmod, changefreq, priority; sitemap index files). Published protocol. publisher · read in our library knowledge/fetched/cmp_cms_sitemaps.html · pin h5e7570590fcb92d473d7015c88940a830383b6a61bc6c16be4df51e97f471654 · accessed 2026-08-18 · published-standardGrounds: The "SEO sitemap and robots emitted by construction" row: every generated site ships sitemap.xml (nx_cms_seo_gate) in this format; the WordPress Best code (Yoast-class depth) is graded on the same protocol.
  8. [graphql-oct2021] GraphQL Foundation. GraphQL Specification, October 2021 edition (selection sets, fields and field projection by the caller). publisher · read in our library knowledge/fetched/cmp_cms_graphql_spec.html · pin h4f556e7bc74ffcdf6ba3c6a4d1f541bd736492db47e97349200a8dfcb80e0ad1 · accessed 2026-08-18 · published-standardGrounds: The "REST plus GraphQL-style projection content API" row: caller-chosen field projection (cms_api_render_obj emits injection-safe JSON with the caller naming the fields) is the GraphQL selection-set idea this specification defines -- ours is GraphQL-style, not a GraphQL endpoint, and the row says so.
  9. [rfc9309] Koster, M., Illyes, G., Zeller, H., Sassman, L. RFC 9309: Robots Exclusion Protocol. IETF, September 2022. publisher · read in our library knowledge/fetched/cmp_cms_rfc9309.html · pin hbbaa280636d3e38f0a1a130a5ce40e9753db1ed18c860945b0bf795ff8dc1a87 · accessed 2026-08-18 · published-standardGrounds: The "SEO sitemap and robots emitted by construction" row: the robots.txt every generated site ships is this standard's file, so the emitted-by-construction claim has a published grammar to be checked against.

generated by nx_swcompare_matrix (sovereign NishiLang organ) from knowledge/compare/cms.matrix · every Nishi cell verified against organ source at emit time · watch cells re-measured on every compare beat · zero JS, zero trackers