Skip to content

Releases: landerss0n/local-addon-kinsta

Kinsta Sync 1.1.8

Choose a tag to compare

@github-actions github-actions released this 18 Jun 19:29

1.1.8 — fix clean-install crash for real: bundle @getflywheel/local-components

1.1.7's fix (consume react-router-dom via context.ReactRouter) was real but
incomplete — the SAME class of bug remained for @getflywheel/local-components.
Once react-router-dom was removed, local-components became the first
unresolvable require, so clean installs still crashed identically.

Root cause confirmed by reproducing a real .tgz install and reading Local's
log (local-lightning.log):

Error Loading Add-on: .../local-addon-kinsta/lib/renderer/index.js
Error: Cannot find module '@getflywheel/local-components'

Local exposes only react + react-dom to an add-on's renderer require() path; it
does NOT expose @getflywheel/local-components. We externalized it but never
shipped it (only axios is bundled), so require() threw MODULE_NOT_FOUND at load,
the add-on never registered its hooks (no UI), and Local's shell crashed with
"Cannot read properties of undefined (reading 'toString')". The dev machine
never hit it because the installed add-on is a symlink to the repo (full
node_modules).

Fix: stop externalizing @getflywheel/local-components so webpack bundles it
(react/react-dom stay external for Local's single React instance). The built
renderer bundle now requires only react, react-dom, electron, and Node builtins.

bundle.packaging.test.ts corrected: its "Local-provided" allowlist wrongly
included @getflywheel/local-components (which is why 1.1.7 passed it); it now
reflects the verified set (react/react-dom + Node builtins + bundledDependencies)
and allows Node core modules.

Verified live: installed the packaged .tgz into Local (not the symlink),
confirmed via log "Successfully Loaded Add-on" and via CDP that the Kinsta Sync
page renders with no error dialog.

Full Changelog: v1.1.7...v1.1.8

Kinsta Sync 1.1.7

Choose a tag to compare

@github-actions github-actions released this 18 Jun 12:40

1.1.7 — fix clean-install crash + sync hardening

Clean-install crash (release blocker): the renderer bundled a bare
require("react-router-dom") via a webpack external, but react-router-dom is
only a devDependency, so it is absent from the released .tgz. Local require()s
the renderer from the add-on dir (outside its asar) -> MODULE_NOT_FOUND ->
the add-on's export default never runs -> no hooks register (no UI) and Local's
shell crashes with "Cannot read properties of undefined (reading 'toString')".
Now consume Route via context.ReactRouter and drop react-router-dom from
webpack externals; bundle.packaging.test.ts asserts every non-relative require
in the built renderer is resolvable on a clean install.

Sync hardening (informed by reading WP Engine's Magic Sync internals):

  • SSH keepalive (ServerAliveInterval=60 / ServerAliveCountMax=120) on all ssh
    and rsync calls so long steps are not dropped by an idle NAT/firewall
  • --skip-plugins --skip-themes on both remote wp db export calls (protects
    the pull export and the pre-push rollback backup from a broken plugin)
  • downgrade utf8mb4_0900_* collations to utf8mb4_unicode_520_ci before push
    (Local ships MySQL 8; Kinsta runs MariaDB, which rejects 0900 collations)
  • push-side table_prefix reconcile (push is now symmetric with pull; non-fatal)
  • exclude host-specific object-cache.php / advanced-cache.php drop-ins

Full Changelog: v1.1.6...v1.1.7

Kinsta Sync 1.1.6

Choose a tag to compare

@github-actions github-actions released this 16 Jun 09:17

Full Changelog: v1.1.5...v1.1.6

Kinsta Sync 1.1.5

Choose a tag to compare

@landerss0n landerss0n released this 10 Jun 11:32

Internal hardening, tests, and cleanup — no user-facing behavior changes.

Tests

  • Added unit tests for the previously-untested main modules: kinstaApi.ts
    (backup slot management, operation polling, cache clearing, retry interceptor),
    config.ts (sync history, API-key storage, legacy migration), and
    localPaths.ts (binary/phar resolution). Test count: 73 → 102.

Hardening (from an adversarial code review — all low-severity, defensive)

  • The rsync paths are derived inside the sync try-block so an unexpected throw
    can't leave a site's sync flag stuck (it always unregisters).
  • Backup creation now fails fast instead of polling for 10 minutes if Kinsta
    ever omits an operation id.
  • The pull drawer filters progress events by mode; a successful push no longer
    depends solely on the final progress event to leave the spinner.

Cleanup

  • Migrated the link drawer to the shared Kinsta icon (~230 fewer lines) and
    centralized its accent color; removed orphaned compiled artifacts.

Verified with 102 unit/integration tests, a clean build, and the prior release's
real pull + push against Kinsta staging.

Kinsta Sync 1.1.4

Choose a tag to compare

@landerss0n landerss0n released this 10 Jun 11:02

Fixes

  • Concurrency guard: two near-simultaneous syncs for the same site could both start (a TOCTOU race on the "already running" check). The sync is now registered before the SSH pre-flight, in both pull and push.
  • Push search-replace: the local site domain is now validated before it is interpolated into the remote wp search-replace command.
  • Rollback safety: a failure while restoring wp-config.php can no longer mask the original sync error that decides whether the local database is rolled back.

Under the hood

  • Split the main process (index.ts, ~2000 lines) into focused modules — types, constants, validators, rsync, kinstaApi, sync, localPaths, config — with no behavior change.
  • Removed the unreachable push code from the old sync drawer (now the pull-only KinstaPullDrawer); push lives entirely in the full-screen preview screen.
  • Shared renderer helpers (environment labels, status colors, types) and de-duplicated the Kinsta icon.

Verified with 73 unit/integration tests, a clean build, and real pull + push against Kinsta staging.

Kinsta Sync 1.1.3

Choose a tag to compare

@landerss0n landerss0n released this 09 Jun 13:20

Reliability hardening:

  • Fail-fast pre-flight. Pulls and pushes now verify SSH + remote WP-CLI are reachable before any backup or file transfer. A bad SSH key or unreachable host surfaces immediately with a clear message instead of failing cryptically mid-sync.
  • Backup verification. The pre-pull and pre-push database backups are checked for validity (non-empty) before the destructive import runs — the automatic rollback is only as good as its backup, so a failed/empty dump now aborts the sync instead of silently leaving you unprotected.
  • Network resilience. Kinsta API calls now use a 30s timeout and retry transient failures (network blips, timeouts, 5xx, 429) with backoff, so a hung request no longer freezes a sync.

Repo housekeeping: added a LICENSE (MIT) and a security policy.

Install: download local-addon-kinsta-1.1.3.tgz below → Local → Add-ons → Installed → Install from disk.

Kinsta Sync 1.1.2

Choose a tag to compare

@landerss0n landerss0n released this 09 Jun 12:55

Fixes:

  • Search-replace now rewrites JSON-escaped URLs. URLs stored inside JSON — Gutenberg block attributes, plugin settings, cached API payloads — use escaped slashes (e.g. https:\/\/example.com). The previous https:// / http:// / // passes didn't match these, so the source domain leaked across pulls and pushes. A \/\/domain pass now covers every escaped form in both directions.

Install: download local-addon-kinsta-1.1.2.tgz below → Local → Add-ons → Installed → Install from disk.

Kinsta Sync 1.1.1

Choose a tag to compare

@landerss0n landerss0n released this 09 Jun 12:29

Fixes:

  • Stop pushing Local's local-xdebuginfo.php to the server. Local generates this debug helper in the web root, and it was being included in pushes to Kinsta. It's now excluded from every sync, alongside wp-config.php, .htaccess, SQL dumps and Kinsta's mu-plugins.

Under the hood:

  • Repo tooling: ESLint + Prettier, a CI workflow (lint / format / typecheck / test / build) and a pre-commit hook.
  • Added unit tests for the push screen's environment mapping and file-selection logic.

Install: download local-addon-kinsta-1.1.1.tgz below → Local → Add-ons → Installed → Install from disk.

Kinsta Sync 1.1.0

Choose a tag to compare

@landerss0n landerss0n released this 06 Jun 07:54

New feature:

  • Push preview with selective sync. Pushing now opens a Magic Sync-style fullscreen preview: a dry-run diff of every file that would be added, updated or deleted on the server. Untick anything you don't want pushed, choose between only newer files and all modified files, and pick environment/database/uploads/backup options — all on one screen.
  • No more blind deletes on push. Files are only deleted on the server if you explicitly tick them in the preview (the old rsync --delete behaviour is gone).

Notes:

  • On stock macOS rsync (openrsync) the preview falls back to a name-only file list — brew install rsync gives full change-type and size info.

Install: download local-addon-kinsta-1.1.0.tgz below → Local → Add-ons → Installed → Install from disk.

Kinsta Sync 1.0.1

Choose a tag to compare

@landerss0n landerss0n released this 05 Jun 10:35

Bug fixes:

  • "Include uploads" (and the other sync checkboxes) now actually work. The checkboxes looked checked but the option never reached the sync engine, so uploads were silently skipped on pull/push.
  • Files with legacy-encoded names no longer abort the whole sync. If the server has files whose names aren't valid UTF-8 (e.g. old Latin-1 åäö uploads), macOS can't store them — rsync's partial-transfer result (exit 23/24) is now a warning naming the affected count, and the rest of the sync (including the database) completes. Fix permanently by renaming those files on the server.

Install: download local-addon-kinsta-1.0.1.tgz below → Local → Add-ons → Installed → Install from disk.