Zinnector® CLI

រាល់ពាក្យបញ្ជា គឺដោយផ្ទាល់ពី --help

Zinnector® 0.1.6 បង្កើតគេហទំព័រ WordPress មួយនៅលើម៉ាស៊ីនផ្ទាល់ខ្លួនរបស់អ្នកដោយមិនចាំបាច់ដំឡើងអ្វីទាំងអស់ក្រៅពី Node ពិនិត្យផ្ទៀងផ្ទាត់វាធៀបនឹងស្លុតបង្ហោះដែលអ្នករៀបនឹងដាក់ឱ្យដំណើរការ រួចបញ្ជូនវាទៅ។ ទំព័រនេះត្រូវបានបង្កើតចេញពីនិយមន័យពាក្យបញ្ជាផ្ទាល់របស់ CLI — វត្ថុដូចគ្នាដែល zinnector --help បោះពុម្ពចេញមក — ដូច្នេះ វាមិនអាចខុសគ្នាពីឧបករណ៍ដែលអ្នកបានដំឡើងនោះទេ។

ឯកសារអ្នកអភិវឌ្ឍន៍ទាំងអស់ →

ពាក្យបញ្ជាចំនួន 43 នៅក្នុង Zinnector® 0.1.6។

ដំឡើងវា

ពាក្យបញ្ជាតែមួយ នៅលើ Node 24 ឬថ្មីជាងនេះ។ ឥតគិតថ្លៃ និងមានអាជ្ញាបណ្ណ MIT ការបង្កើតគ្រោង និងដំណើរការគេហទំព័រក្នុងឧបករណ៍ផ្ទាល់មិនទាមទារគណនីទាល់តែសោះ។

npm install -g zinnector

Node 24 ឬថ្មីជាងនេះ

ដំណើរការ node --version វាត្រូវតែបង្ហាញ v24 ឬខ្ពស់ជាងនេះ។ ដំឡើង LTS បច្ចុប្បន្នពី nodejs.org — នៅលើ Windows, winget install OpenJS.NodeJS.LTS នៅលើ macOS, brew install node@24។

បានឃើញ EBADENGINE ឬ?

នេះគឺជា npm ដែលកំពុងប្រាប់អ្នកថា Node របស់អ្នកចាស់ជាង 24។ ការដំឡើងនៅតែបញ្ចប់ ប៉ុន្តែ CLI បដិសេធមិនដំណើរការ ហើយបញ្ជាក់ប្រាប់ដូច្នេះ។ សូមដំឡើងកំណែ Node ហើយដំឡើងម្តងទៀត។

តើអ្នកកំពុងប្រើ Node 26 ឬថ្មីជាងនេះមែនទេ?

CLI ដំណើរការបានល្អ។ កម្មវិធីដំណើរការ WordPress ដែលវាទាញយក មានម៉ូឌុលដើមជាមួយឯកសារប៊ីណារីដែលបានបង្កើតជាមុនសម្រាប់តែ Node 24 និង 25 ប៉ុណ្ណោះ ដូច្នេះនៅពេលប្រើប្រាស់លើកដំបូង Zinnector® ក៏ទាញយក Node 24 សម្រាប់តែកម្មវិធីដំណើរការនេះផងដែរ — ប្រហែល 30 MB ដែលត្រូវបានផ្ទៀងផ្ទាត់ធៀបនឹង checksums របស់ nodejs.org។ គ្មានកម្មវិធីចងក្រង (compiler) គ្មាន Visual Studio គ្មានអ្វីដែលត្រូវធ្វើដោយដៃឡើយ។

សាកល្បងមើលថាតើវាដំណើរការឬទេ — ពីរនាទី មិនបាច់មានគណនី

ដំណើរការទាំងនេះតាមលំដាប់លំដោយ។ នៅខាងក្រោមកិច្ចការនីមួយៗមានបង្ហាញពីលទ្ធផលជោគជ័យ ដើម្បីឱ្យអ្នកដឹងភ្លាមៗនៅពេលមានបញ្ហាកើតឡើង។

  1. ដំឡើងវា

    npm install -g zinnector

    ជោគជ័យ៖ npm បញ្ចប់ដោយគ្មានការព្រមាន EBADENGINE ឡើយ។

  2. ពិនិត្យមើលកំណែ

    zinnector --version

    ជោគជ័យ៖ លេខកំណែ។ នៅលើ Node ចាស់ជាង 24 វានឹងបង្ហាញសារដែលបញ្ជាក់ថាត្រូវការ Node 24 ឬថ្មីជាងនេះ ហើយចាកចេញជំនួសវិញ។

    0.1.6
  3. អានជំនួយ

    zinnector --help

    ជោគជ័យ៖ បដាដែលបញ្ជាក់ឈ្មោះពាក្យបញ្ជាទាំងប្រាំនៃលំហូរ បន្ទាប់មកពាក្យបញ្ជានីមួយៗដែលមានគោលបំណងមួយជួរ — បញ្ជីនៅលើទំព័រនេះ។

      new       scaffold a WordPress project you can run immediately
      dev       run this project locally — no Docker required
      login     sign in — with your own account in the browser, or with an API key
      logout    forget a stored sign-in
      whoami    show who this CLI is signed in as, and what it can reach
      …
  4. បង្កើតគ្រោងគេហទំព័រ

    zinnector new my-site

    ជោគជ័យ៖ ចំណងជើង “Created my-site” ឯកសារដែលវាបានសរសេរ និងពាក្យបញ្ជាបន្ទាប់ដែលត្រូវដំណើរការ។ គ្មានអ្វីនៅក្នុងនោះជាកន្លែងដាក់ជំនួសឡើយ។

    Created my-site  ·  site
      + zinnector.json
      + wp-content/…
    → run it:
        cd my-site
        zinnector dev
  5. ដំណើរការ

    cd my-site
    zinnector dev

    ការដំណើរការលើកដំបូងស្នើសុំទាញយក WordPress runtime ម្តង (ប្រហែល 570 MB រក្សាទុកក្នុងឃ្លាំងសម្ងាត់ផ្ទាល់ខ្លួនរបស់ Zinnector®)។ ជោគជ័យ៖ បន្ទាត់ “running at” ដែលមានអាសយដ្ឋានមូលដ្ឋាន។

    ✔ running at http://127.0.0.1:9400
      admin: http://127.0.0.1:9400/wp-admin  (already signed in)
  6. បើកវានៅក្នុងកម្មវិធីរុករក

    open http://127.0.0.1:9400

    ជោគជ័យ៖ គេហទំព័រ WordPress ថ្មីមួយដែលមានចំណងជើងថា “My WordPress Website” ហើយ /wp-admin បើកផ្ទាំងគ្រប់គ្រងដោយបានចូលគណនីរួចជាស្រេច។ ដាក់កម្មវិធីជំនួយទៅក្នុង wp-content/plugins ហើយវានឹងបង្ហាញនៅទីនោះនៅពេលផ្ទុកឡើងវិញបន្ទាប់។

    អ្វីៗទាំងអស់ខាងលើដំណើរការដោយមិនចាំបាច់មានគណនីទេ។ ការភ្ជាប់ ការពិនិត្យមុនពេលដំណើរការ និងការរុញ ទាមទារសោ API ពីផ្ទាំងគ្រប់គ្រងរបស់អ្នក និងគេហទំព័រមួយនៅលើសេវាកម្មបង្ហោះ Zinn Digital®។

លំហូរការងារ៖ បង្កើត, អភិវឌ្ឍ, ភ្ជាប់, ពិនិត្យ, រុញ

ពាក្យបញ្ជាចំនួនប្រាំមួយពីគ្មានអ្វីសោះរហូតដល់គេហទំព័រដំណើរការផ្ទាល់។ zinnector new បោះពុម្ពបញ្ជីនេះនៅពេលវាបញ្ចប់ ដូច្នេះអ្នកមិនចាំបាច់ចងចាំវាឡើយ។

zinnector new my-site      # scaffold a project that boots immediately
cd my-site
zinnector dev              # a real WordPress, locally, with no Docker

zinnector login            # once, when you have hosting
zinnector link             # point the project at a slot
zinnector check            # pre-flight: what will NOT match on the slot?
zinnector push             # push your commits, deploy, watch it finish

ចំណុចកណ្ដាលគឺជាចំណុចសំខាន់។ zinnector check ប្រៀបធៀបអ្វីដែលអ្នកបានបង្កើត — កំណែ PHP, ថាស, ចំនួនឯកសារ, កំណែ WordPress — ទៅនឹង slot ដែលអ្នកហៀបនឹងដាក់ឱ្យដំណើរការ ដោយបង្ហាញរាល់ភាពមិនត្រូវគ្នា និងរាល់ការប្រៀបធៀបដែលវាមិនអាចធ្វើបាន ហើយបន្ទាប់មកអនុញ្ញាតឱ្យអ្នកនៅតែដាក់ឱ្យដំណើរការដដែល ពីព្រោះអ្នកដឹងពីព័ត៌មានអំពីគេហទំព័រផ្ទាល់ខ្លួនរបស់អ្នកដែលកម្មវិធីពិនិត្យមិនដឹង។

ឯកសារយោងពាក្យបញ្ជា

ពាក្យបញ្ជាទាំង 43 តាមលំដាប់លំដោយដែល zinnector --help រាយបញ្ជីពួកវា។ លទ្ធផលដែលត្រូវបានសម្គាល់ថា “captured” ត្រូវបានចម្លងដាក់ពីការដំណើរការជាក់ស្តែងនៃកំណែនេះ។ ចំណែកឯផ្នែកដែលនៅសល់បង្ហាញពីទម្រង់ពិតប្រាកដដែលពាក្យបញ្ជាបានបង្ហាញ ដោយមានតម្លៃជាគំរូ — ឈ្មោះដែន លេខសម្គាល់ និងតួលេខរបស់អ្នកនឹងមានភាពខុសគ្នា។

ជម្រើសសកល ត្រូវបានទទួលយកមុនពាក្យបញ្ជាណាមួយ៖

ជម្រើសអ្វីដែលវាធ្វើ
-V, --versionprint the version
--profile <name>use a named credential profile
-h, --helpបង្ហាញជំនួយសម្រាប់ពាក្យបញ្ជាណាមួយ។

zinnector new

scaffold a WordPress project you can run immediately

zinnector new [options] [name]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
nameទេdirectory to create the project in, and the project's name — required unless --here
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
-t, --template <kind>one of: site, plugin, theme"site"
--php <version>PHP version to develop against"8.3"
--wp <version>WordPress version for the local runtime"latest"
--runtime <name>playground or docker"playground"
--herescaffold into the current directory instead of a new one

ឧទាហរណ៍

zinnector new my-site

អ្វីដែលអ្នកឃើញ — captured — 0.1.2 on Linux

Created my-site  ·  site
──────────────────────────

  + .gitignore
  + README.md
  + wp-content/mu-plugins/000-zinnector-dev.php
  + wp-content/plugins/.gitkeep
  + wp-content/themes/.gitkeep
  + zinnector.json

  php        8.3
  wordpress  latest
  runtime    playground

→ run it:
    cd my-site
    zinnector dev

→ then, when you have a hosting slot:
    zinnector link     # point it at a site
    zinnector check    # pre-flight before you push
    zinnector push

zinnector dev

run this project locally — no Docker required

zinnector dev [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--php <version>PHP version to run (5.2–8.5 on playground, 7.4–8.5 on docker)
--wp <version>WordPress version
-p, --port <port>port to serve on
--runtime <name>playground (default) or docker
--loginlog in as admin automaticallytrue
--no-logindo not log in automatically
--onceboot, report what is running, then stop
--yesinstall the local runtime without asking
--reset-runtimedelete the installed runtime and install it again
-v, --verboseshow the runtime's own output

ឧទាហរណ៍

cd my-site
zinnector dev

អ្វីដែលអ្នកឃើញ — captured — 0.1.2. The first run asks once to download the WordPress runtime (~570 MB); pass --yes to skip the question

my-site  ·  WordPress Playground (WASM, no Docker)
───────────────────────────────────────────────────

  serving    a WordPress project
  from       /home/you/my-site
  php        8.3
  wordpress  latest

✔ running at http://127.0.0.1:9400
  admin: http://127.0.0.1:9400/wp-admin  (already signed in)

  Ctrl-C to stop

zinnector login

sign in — with your own account in the browser, or with an API key

zinnector login [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--profile <name>store under a named profile (default: default)
--api <url>API base URL"https://api.zinndigital.com"
--api-keypaste a per-organisation API key instead of signing in as yourself
--issuer <url>the sign-in service"https://auth.zinndigital.com/realms/zinn"
--no-browserprint the sign-in link without trying to open a browser

ឧទាហរណ៍

zinnector login

អ្វីដែលអ្នកឃើញ — the key is typed at the prompt, never on the command line. In CI, pipe it: echo "$ZINN_API_KEY" | zinnector login --profile ci

Sign in to Zinn Digital  ·  https://api.zinndigital.com
────────────────────────────────────────────────────

  API key: ••••••••••••••••••••••••••••

✔ signed in as you@example.com (Acme Ltd) — profile “default”
→ next: zinnector sites

zinnector logout

forget a stored sign-in

zinnector logout [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--profile <name>which profile to forget (default: default)

ឧទាហរណ៍

zinnector logout

អ្វីដែលអ្នកឃើញ

✔ signed out of profile “default”

zinnector whoami

show who this CLI is signed in as, and what it can reach

zinnector whoami [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--profile <name>use a named profile
--scopeslist the permissions an API key carries
--jsonmachine-readable output

ឧទាហរណ៍

zinnector whoami --scopes

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Signed in  ·  https://api.zinndigital.com
──────────────────────────────────────────
account        you@example.com
as             a person, signed in through the browser
organisations  8 — listed below
mode           live
credential     profile “default”

  · Example Org  owner · 01a00000-0000-7000-8000-000000000000
  · Example Org· 01a00001-0000-7000-8000-000000000001
  · Example Org· 01a00002-0000-7000-8000-000000000002
  · Example Org· 01a00003-0000-7000-8000-000000000003
  · Example Org· 01a00004-0000-7000-8000-000000000004
  · Example Org· 01a00005-0000-7000-8000-000000000005
  · Example Org· 01a00006-0000-7000-8000-000000000006
  · Example Org· 01a00007-0000-7000-8000-000000000007

  scopes belong to API keys — a signed-in person acts with their ROLE in each organisation (shown above).

zinnector sites

list the sites this key can see

zinnector sites [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output
--status <status>only sites in this status

ឧទាហរណ៍

zinnector sites

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Sites  ·  12
─────────────
domain          status  php      target  id
example-2.com   active  php —    fleet   01a00000-0000-7000-8000-000000000000
example-3.com   active  php —    fleet   01a00001-0000-7000-8000-000000000001
example-4.com   active  php —    fleet   01a00002-0000-7000-8000-000000000002
example-5.com   active  php 8.5  fleet   01a00003-0000-7000-8000-000000000003
example-6.com   active  php —    fleet   01a00004-0000-7000-8000-000000000004
example.com     active  php 8.4  fleet   01a00005-0000-7000-8000-000000000005
example-7.com   active  php —    fleet   01a00006-0000-7000-8000-000000000006
example-8.com   active  php 8.5  fleet   01a00007-0000-7000-8000-000000000007
example-9.com   active  php 8.5  fleet   01a00008-0000-7000-8000-000000000008
example-10.com  active  php 8.5  fleet   01a00009-0000-7000-8000-000000000009
example-11.com  active  php 8.5  fleet   01a00010-0000-7000-8000-000000000010
example-12.com  active  php 8.5  fleet   01a00011-0000-7000-8000-000000000011

zinnector status

everything the platform knows about one site

zinnector status [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector status example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


example.com  ·  01a00000-0000-7000-8000-000000000000
────────────────────────────────────────────────────────────────────────
status         active
product line   footprint_free
stack          wordpress
region         fsn1
deploy target  fleet
plan           PBN 10

● PHP
version        8.4
can switch to  8.5, 8.4, 8.3, 8.2, 8.1, 8.0, 7.4

● Quota
disk      188 MB used of 500.0 GB
files     6,313 of 2,000,000
database  1 MB

● Deploy
status         building
target         fleet
repository     —
commit         —
live url       —
last deployed  2026-09-14T01:29:26.991511Z

● WordPress
version     7.1
up to date  yes
multisite   no

zinnector share

give one person access to ONE site — a developer, a designer, a client

zinnector share [options] <site> <email>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteបាទ/ចាសthe site to share — an id, primary domain or name
emailបាទ/ចាសwho to give access to — they are emailed an invitation if they have no account yet
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--role <role>what they may do: viewer, editor, manager
--reason <text>why they need it — kept with the grant for the audit trail
--until <date>when access ends on its own (YYYY-MM-DD); omit for until-revoked
--jsonmachine-readable output

ឧទាហរណ៍

zinnector share example.com dev@agency.test --role editor --reason "rebuild the checkout"

អ្វីដែលអ្នកឃើញ — the exact shape the command prints, from the source (W40-DEVTOOL added these after this file was last captured); your domains, ids and dates will differ

Shared example.com  ·  01a03f39-730a-7dc4-84b0-5d4f7582dd04
────────────────────────────────────────────────────────────

✔ invited dev@agency.test as editor
  They have no account yet, so an invitation has been emailed. Until they
  sign in and accept it they can see nothing; the moment they do, the site is theirs.

→ what they do next, on their own machine:
    npm i -g zinnector && zinnector login   # sign in as themselves
    zinnector clone example.com   # pull the files down

zinnector collaborators

who has been given access to a site, and whether they have accepted

zinnector collaborators [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector collaborators example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. the exact shape the command prints, from the source (W40-DEVTOOL added these after this file was last captured); your domains, ids and dates will differ


Access to example.com  ·  3
───────────────────────────────────────────────────────────
who              role    status   ends  why                                          grant
dev@agency.test  viewer  revoked  —     Example Org— revoked immediately after       01a00000-0000-7000-8000-000000000000
dev@agency.test  viewer  revoked  —     Example Org— revoked at the end of the walk  01a00001-0000-7000-8000-000000000001
dev@agency.test  editor  revoked  —     Example Org— revoked at the end of the walk  01a00002-0000-7000-8000-000000000002

zinnector unshare

take a person's access to a site back — by email or grant id

zinnector unshare [options] <site> <who>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteបាទ/ចាសthe site to take access back on — an id, primary domain or name
whoបាទ/ចាសthe person to remove — their email address, or the grant id from zinnector collaborators
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--yesdo not ask

ឧទាហរណ៍

zinnector unshare example.com dev@agency.test --yes

អ្វីដែលអ្នកឃើញ — the exact shape the command prints, from the source (W40-DEVTOOL added these after this file was last captured); your domains, ids and dates will differ

✔ withdrew the invitation to dev@agency.test

zinnector invitations

the invitations waiting for you, and accept one

zinnector invitations [options] [command]

ឧទាហរណ៍

zinnector invitations

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. the exact shape the command prints, from the source (W40-DEVTOOL added these after this file was last captured); your domains, ids and dates will differ; with no subcommand it runs `list`


Invitations  ·  0
──────────────────

● nothing waiting for you

zinnector invitations list

invitations addressed to the account you are signed in as

zinnector invitations list [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector invitations list

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. the exact shape the command prints, from the source (W40-DEVTOOL added these after this file was last captured); your domains, ids and dates will differ


Invitations  ·  0
──────────────────

● nothing waiting for you

zinnector invitations accept

accept an invitation — the site is yours the moment this returns

zinnector invitations accept [options] <id>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
idបាទ/ចាសthe invitation id from zinnector invitations — a unique prefix of it is enough

ឧទាហរណ៍

zinnector invitations accept 01a03f39-9c11-7b02-a7e0-2e4d0c5f1b77

អ្វីដែលអ្នកឃើញ — the exact shape the command prints, from the source (W40-DEVTOOL added these after this file was last captured); your domains, ids and dates will differ

✔ you now have access to example.com

zinnector pull

pull a hosted site's files into this project for local dev — and re-run to re-sync

zinnector pull [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--via <seam>auto (default), git, or backup"auto"
--freshtake a new backup rather than using the latest one (spends an on-demand slot)
--max-age <hours>accept the latest backup if it is younger than this"24"
--fullthe whole document root, WordPress core included (default: wp-content only)
--no-uploadsleave wp-content/uploads (media) behind
--no-databaseleave the site's database behind — take the files only
--live-configalso write wp-config.php — it holds the LIVE database credentials
--cleanempty wp-content before extracting, so deletions on the site are mirrored
--dry-runsay what would happen and stop
--yesdo not ask

ឧទាហរណ៍

zinnector pull

អ្វីដែលអ្នកឃើញ

Pull example.com  ·  01a03f39-730a-7dc4-84b0-5d4f7582dd04
─────────────────────────────────────────────────────────────

● via git — the site syncs to its own repository and this is a clone of it
✔ fast-forwarded 3 commits 4f1c2a9b → 9d2e7c14

● not synced, and why
  ✖ database                     the local playground has its own; the site's is not copied
  ✖ offloaded media              objects in storage are not in the site's files
  ✖ anything outside the repository  only wp-content syncs

→ next: zinnector dev

zinnector clone

make a local project from a hosted site: clone its repository or pull its files

zinnector clone [options] <site> [dir]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteបាទ/ចាសthe hosted site to copy — an id, primary domain or name
dirទេdirectory to create — defaults to the site's primary domain
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--via <seam>auto (default), git, or backup"auto"
--freshtake a new backup rather than using the latest one
--fullthe whole document root, WordPress core included
--no-uploadsleave wp-content/uploads (media) behind
--no-databaseleave the site's database behind — take the files only
--live-configalso write wp-config.php — it holds the LIVE database credentials
--yesdo not ask

ឧទាហរណ៍

zinnector clone client.example.com

អ្វីដែលអ្នកឃើញ

Clone client.example.com  ·  client.example.com
──────────────────────────────────────────────────────

✔ wrote client.example.com/zinnector.json (php 8.3, wordpress 6.7.1)
● via backup — the site does not sync to a repository
✔ downloaded 214 MB and extracted wp-content

● not synced, and why
  ✖ database                     the local playground has its own; the site's is not copied
  ✖ offloaded media              objects in storage are not in the site's files
  ✖ wp-config.php                holds the live database credentials (--live-config to write it)
  ✖ WordPress core               the runtime supplies the version the slot runs (--full to take it)

→ next: zinnector dev

→ run it:
    cd client.example.com
    zinnector dev

zinnector sync

two-way sync between a site's live files and its repository

zinnector sync [options] [command]

ឧទាហរណ៍

zinnector sync --help

អ្វីដែលអ្នកឃើញ — with no subcommand, `zinnector sync <site>` is `sync status`

Usage: zinnector sync [options] [command]

two-way sync between a site's live files and its repository

  site → repository   zinnector sync run   commits the live files and pushes the branch
  repository → site   zinnector push       builds the branch and publishes it

zinnector sync status

where two-way sync stands, and its last runs

zinnector sync status [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector sync status example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.4 against a test site on 2026-09-12; the domain and ids are replaced with example values

Two-way sync — example.com
──────────────────────────

repository   acme/example-site (main)
available    yes
sync         on
state        synced
last sync    2026-09-12T22:51:41.539832Z
note         Started from acme/example-site@main.

run        files       commit         when
synced     2 changed   da85d73cef5f   2026-09-12T22:52:10.117301Z

zinnector sync on

turn two-way sync on (pushes nothing by itself)

zinnector sync on [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--subdir <path>only sync this subdirectory of the site
--jsonmachine-readable output

ឧទាហរណ៍

zinnector sync on example.com

អ្វីដែលអ្នកឃើញ — needs a repository connected on your own GitHub account; it pushes nothing by itself

✔ two-way sync is on

Two-way sync — example.com
…
→ next: zinnector sync run

zinnector sync off

turn two-way sync off

zinnector sync off [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--subdir <path>only sync this subdirectory of the site
--jsonmachine-readable output

ឧទាហរណ៍

zinnector sync off example.com

អ្វីដែលអ្នកឃើញ

✔ two-way sync is off

zinnector sync run

commit the site's live files to its repository now

zinnector sync run [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector sync run example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.4 against a test site on 2026-09-12; the domain and ids are replaced with example values. A run the repository has moved past is HELD instead: nothing is pushed or overwritten, the command exits 1 and names the next step

✔ committed 2 changed files da85d73cef5f

Two-way sync — example.com
…
→ next: git pull in your clone

zinnector sync resolve

clear a held sync by choosing which side wins

zinnector sync resolve [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--keep <side>site (commit the site on top) or repository (discard the site's unsynced changes)
--yesdo not ask
--jsonmachine-readable output

ឧទាហរណ៍

zinnector sync resolve example.com --keep repository --yes

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.4 against a test site on 2026-09-12; the domain and ids are replaced with example values. Without --yes it asks first, and refuses outright when there is no terminal to ask in

✔ kept the repository

Two-way sync — example.com
…
state        synced

zinnector check

compare this project against the slot you are about to deploy to

zinnector check [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--probeboot the local runtime and MEASURE its php, rather than trusting zinnector.json
--allshow passing checks too
--strictalso fail when something could not be checked
--jsonmachine-readable output

ឧទាហរណ៍

zinnector check

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted — the run found a real mismatch (PHP 8.3 in the project against 8.4 on the slot), which is the whole point of the command

→ reading the slot
  size excludes: .git

Pre-flight — example.com  ·  01a00000-0000-7000-8000-000000000000
────────────────────────────────────────────────────────────────────────

  local  php 8.4  3 files, 0.0 MB
  slot   php 8.4  target fleet
  local php is the version DECLARED in zinnector.json — run with --probe to measure it

  ? unknown   local php extensions could not be enumerated
      try zinnector dev --once

  ? unknown   wordpress versions could not be compared
      No WordPress version found in the working copy.
      try zinnector status

  7 passed  ·  2 could not be checked

zinnector push

pre-flight, push your commits, and deploy

zinnector push [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
-f, --forcedeploy even when pre-flight has findings
--skip-checksdo not run pre-flight at all
--probemeasure the local runtime during pre-flight instead of trusting zinnector.json
--no-waittrigger the deploy and exit without watching it
--no-gitdo not run git push; deploy whatever the platform already has
--dry-rundo everything except the deploy

ឧទាហរណ៍

zinnector push

អ្វីដែលអ្នកឃើញ

Deploy to example.com  ·  01a03f39-730a-7dc4-84b0-5d4f7582dd04
───────────────────────────────────────────────────────────────

✔ pre-flight: 8 passed  ·  0 to look at  ·  2 could not be checked
→ pushing main (4f1c2a9b add the contact form)
✔ pushed
● deploy 7c0e… started — watching
✔ deployed 4f1c2a9b in 48s

  status    success
  commit    4f1c2a9b
  url       https://example.com

zinnector deploy

redeploy what the platform already has, without pushing

zinnector deploy [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--no-waittrigger and exit

ឧទាហរណ៍

zinnector deploy example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Redeploy example.com  ·  01a00000-0000-7000-8000-000000000000
────────────────────────────────────────────────────────────────────────
→ starting the deploy
✔ deploy started

zinnector deploys

a site's deploy history

zinnector deploys [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output
-n, --limit <n>how many to show"10"

ឧទាហរណ៍

zinnector deploys example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Deploys — example.com  ·  2
───────────────────────────────────────────────────────────
status  commit  branch  trigger  started                      message
live    —       —       manual   2026-09-14T09:06:39.685554Z  —
live    —       —       manual   2026-09-14T01:29:20.196957Z  —

zinnector php

show or switch a site's PHP version

zinnector php [options] [version]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
versionទេthe PHP version to switch the site to, e.g. 8.4 — omit to show the current one
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
-s, --site <site>site id or domain
--listlist the versions the platform offers
--jsonmachine-readable output

ឧទាហរណ៍

zinnector php 8.3 --site example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. with no version it shows the current one; --list shows what the platform offers for this site's product line


PHP — example.com
──────────────────────────────────────────────────────
version        8.4
can switch to  8.5, 8.4, 8.3, 8.2, 8.1, 8.0, 7.4

zinnector quota

disk, files and database usage against what the plan grants

zinnector quota [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector quota example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Quota — example.com
────────────────────────────────────────────────────────
disk used      188 MB
disk limit     500.0 GB
disk granted   500 GB  (per_site)
files used     6,313
file limit     2,000,000
database       1 MB

  “limit” is what is enforced today; “granted” is what the plan says.

zinnector db

database size, and single-use links into phpMyAdmin and the file manager

zinnector db [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector db example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. the phpMyAdmin and file-manager links are single-use and expire; do not paste them anywhere


Database — example.com
───────────────────────────────────────────────────────────
size    1 MB
tables  14

  single-use links, valid for one visit:
  phpMyAdmin    https://pma.example.com/signon.php?t=<single-use>
  file manager  https://files.example.com/signon.php?t=<single-use>

zinnector logs

tail a site's access and error logs

zinnector logs [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--accessonly the access log
--erroronly the error log
--buildthe build log of the most recent deploy instead
--jsonmachine-readable output

ឧទាហរណ៍

zinnector logs example.com --error

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. --access for the access log, --build for the last deploy's build log (a site not built by a build provider shows the deploy's own steps); with no flag both site logs are shown, and a log that could not be read says so instead of looking empty


Error log — example.com
────────────────────────────────────────────────────────────

2026-09-14 11:06:07.153643 [NOTICE] [1929978] [T0] [config:vhost:zcaffb6eec5abbdab03fb9b2d62a15:epsr:lsphp-zcaffb6eec5abbdab03fb9b2d62a15]'Process Limit' probably is too low, adjust the limit to: 640.
2026-09-14 11:06:37.873060 [INFO] [1929982] [T0] [lsphp-zcaffb6eec5abbdab03fb9b2d62a15] add child process pid: 1933036, procinfo: 0x5555561cfe30

zinnector wp

run an allow-listed WP-CLI command on a site

zinnector wp [options] [command...]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
command...ទេthe WP-CLI command and its arguments, e.g. plugin list — omit it with --commands
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
-s, --site <site>site id or domain
--commandslist what the platform will run
--jsonmachine-readable output

ឧទាហរណ៍

zinnector wp plugin list --site example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. the allow-list is served by the platform — zinnector wp --commands prints it

name	status	update	version	update_version	auto_update
akismet	inactive	none	5.7.2		off
hello	inactive	none	1.7.2		off
imunify-security	active	none	4.1.0		off
litespeed-cache	active	none	7.9.1		off
redis-cache	active	none	2.8.0		off
zinn-cache	active	none	1.2.2		off
object-cache.php	dropin				off

zinnector backup

list and take site backups

zinnector backup [options] [command]

ឧទាហរណ៍

zinnector backup list example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. `backup` on its own prints its subcommands; see `backup list` and `backup now` below


Backups — example.com  ·  3
───────────────────────────────────────────────────────────
status  taken                        size    id
stored  2026-09-14T09:06:39.918280Z  4.7 MB  01a00000-0000-7000-8000-000000000000
stored  2026-09-14T01:29:20.403161Z  36 MB   01a00001-0000-7000-8000-000000000001
stored  2026-09-14T01:29:15.898099Z  36 MB   01a00002-0000-7000-8000-000000000002

daily backups   on
retention       30 days
off-site copy   yes
on-demand left  2 of 3

zinnector backup list

list a site's backups and what its plan grants

zinnector backup list [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector backup list example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Backups — example.com  ·  3
───────────────────────────────────────────────────────────
status  taken                        size    id
stored  2026-09-14T09:06:39.918280Z  4.7 MB  01a00000-0000-7000-8000-000000000000
stored  2026-09-14T01:29:20.403161Z  36 MB   01a00001-0000-7000-8000-000000000001
stored  2026-09-14T01:29:15.898099Z  36 MB   01a00002-0000-7000-8000-000000000002

daily backups   on
retention       30 days
off-site copy   yes
on-demand left  2 of 3

zinnector backup now

take an on-demand backup

zinnector backup now [options] [site]
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
siteទេa site id, primary domain or name — defaults to the site linked in zinnector.json

ឧទាហរណ៍

zinnector backup now example.com

អ្វីដែលអ្នកឃើញ

✔ backup started — zinnector backup list example.com shows it when it completes

zinnector domains

list the domains this key can see

zinnector domains [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector domains

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Domains  ·  1
──────────────
domain       status     ownership  renewal        expires
example.com  connected  connected  no auto-renew  —

zinnector dns

read and change DNS records

zinnector dns [options] [command]

ឧទាហរណ៍

zinnector dns list example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. `dns` on its own prints its subcommands; see `dns list`, `dns add` and `dns rm` below


DNS — example.com  ·  1 records
────────────────────────────────────────
type  name          value               ttl
TXT   w4357-verify  zinn-w4357-updated  ttl 3600

zinnector dns list

list a domain's DNS records

zinnector dns list [options] <domain>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
domainបាទ/ចាសthe domain, by name or id
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--type <type>only records of this type
--jsonmachine-readable output

ឧទាហរណ៍

zinnector dns list example.com

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


DNS — example.com  ·  1 records
────────────────────────────────────────
type  name          value               ttl
TXT   w4357-verify  zinn-w4357-updated  ttl 3600

zinnector dns add

create a DNS record

zinnector dns add [options] <domain> <type> <name> <value>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
domainបាទ/ចាសthe domain, by name or id
typeបាទ/ចាសrecord type: A, AAAA, CNAME, MX, TXT, SRV, …
nameបាទ/ចាសthe record name — @ for the domain itself, or a subdomain label
valueបាទ/ចាសwhat the record points at — an address, a hostname or text
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--ttl <seconds>time to live"3600"
--priority <n>priority, for MX and SRV
--proxiedroute through the CDN
-y, --yesdo not ask

ឧទាហរណ៍

zinnector dns add example.com TXT _acme "token" --ttl 300

អ្វីដែលអ្នកឃើញ — the record is shown and confirmed before it is written; pass --yes to skip the question

Add a DNS record to example.com
───────────────────────────────

  type   TXT
  name   _acme
  value  "token"
  ttl    300

  create it? [y/N] y
✔ created TXT _acme

zinnector dns rm

delete a DNS record

zinnector dns rm [options] <domain> <recordId>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
domainបាទ/ចាសthe domain, by name or id
recordIdបាទ/ចាសthe record id, as zinnector dns list prints it
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
-y, --yesdo not ask

ឧទាហរណ៍

zinnector dns rm example.com rec_7f3a

អ្វីដែលអ្នកឃើញ

⚠ deleting A @ 203.0.113.10 from example.com
  delete it? [y/N] y
✔ deleted

zinnector mail

list mail services

zinnector mail [options]
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--jsonmachine-readable output

ឧទាហរណ៍

zinnector mail

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted


Mail services  ·  0
────────────────────

● no mail services

zinnector bulk

run one operation across many sites (cache_purge, malware_scan, sitemap, block_ip)

zinnector bulk [options] <operation>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
operationបាទ/ចាសwhat to run on every selected site: cache_purge, malware_scan, sitemap or block_ip
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
--allevery site this key can see
--site <site...>specific sites, by id or domain
--status <status>every site in this status
-y, --yesdo not ask
--jsonmachine-readable output

ឧទាហរណ៍

zinnector bulk cache_purge --all

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. one call to the platform for the whole selection, not one per site; the selection is shown and confirmed first


Bulk cache_purge  ·  1 sites
─────────────────────────────

·   example.com

→ running cache_purge
✔ cache_purge accepted for 1 sites

  The platform runs this asynchronously; results appear per site in the dashboard.

zinnector ai

ask the Zinn Digital assistant, with this project as context

zinnector ai [options] <question...>
អាគុយម៉ង់ទាមទារអ្វីដែលវាធ្វើ
question...បាទ/ចាសwhat you want to ask, in plain words — quoting it is optional
ជម្រើសអ្វីដែលវាធ្វើលំនាំដើម
-s, --site <site>ask about a particular site
--org <id>the organisation to ask as, when your account belongs to more than one
--no-contextdo not send anything about the local project
--jsonmachine-readable output

ឧទាហរណ៍

zinnector ai "why is my deploy failing?"

អ្វីដែលអ្នកឃើញ — captured from a real run of 0.1.5 against production on 2026-09-14; domains, ids and single-use links substituted. The assistant answers in the ACCOUNT's language — this account's locale is Arabic, so the captured answer is Arabic to an English question

→ thinking

Zinn Digital assistant
────────────────────────────

  هذا مشروع WordPress تم إنشاؤه بواسطة Zinnector® (مُهيّأ على PHP 8.4، أحدث
  إصدار WordPress، وبيئة تشغيل playground)؛ لتشغيله محلياً، انتقل إلى مجلده
  وشغّل الأمر: cd <اسم-المشروع> ثم zinnector dev، وسيقوم بتشغيل موقع WordPress
  حقيقي على جهازك دون الحاجة إلى Docker.

  sources:
    · https://zinndigital.com/kb/zinnector-getting-started
    · https://zinndigital.com/kb/zinnector-local-development

zinnector mcp

run a stdio bridge to the hosted MCP server — for Claude Desktop and other local-only clients

zinnector mcp [options]

ឧទាហរណ៍

ZINN_MCP_TOKEN=zmcp_live_… zinnector mcp

អ្វីដែលអ្នកឃើញ — started BY an AI client such as Claude Desktop, never by hand — it speaks MCP on stdin and stdout. Proven from Claude Code 2.1.270 against the live server on 2026-09-12

zinnector 0.1.4: MCP bridge to https://api.zinndigital.com/v1/mcp

បន្តអាន

កញ្ចប់ និងប្រភពរបស់វា

zinnector នៅលើ npm · ប្រភព និងបញ្ហានៅលើ GitHub

បង្កើតឡើងនៅលើ API សាធារណៈ

ឯកសារយោង API · ហេតុអ្វី Zinnector®

ដំឡើងវា ហើយដំណើរការគេហទំព័រក្នុងនាទីបន្ទាប់

ឥតគិតថ្លៃ មានអាជ្ញាបណ្ណ MIT ហើយរាល់ពាក្យបញ្ជាគឺជាប្រតិបត្តិការដែលបានកត់ត្រាទុកនៅក្នុង API សាធារណៈ — គ្មានអ្វីនៅទីនេះដែលអាចធ្វើអ្វីដែល API មិនអាចធ្វើបាននោះទេ។

npm install -g zinnector