All notable changes to this project are documented here.
Format follows Keep a Changelog; versions follow Semantic Versioning.
1.3.0 (2026-08-18)
- deps: bump js-yaml and brace-expansion out of their advisories (#31) (021472a)
- deps: Bump ws from 8.21.1 to 8.21.3 (#28) (475ddcf)
1.2.0 (2026-08-05)
1.1.0 (2026-08-03)
1.0.1 (2026-07-31)
- build: add the npm metadata provenance and the npm page need (8c2f5db)
- cli: report the real version instead of a hardcoded 0.1.0 (#17) (3f62ac0)
1.0.0 (2026-07-31)
- types: add an
iob-sync typescommand and fix phantom collisions (3b9724b)
- ci: allow the scope release-please uses in its own PR title (6fe3742)
- ci: let the release PR actually run its checks, and fix the tag name (02e36c7)
- ci: make release-please able to open a release PR (cab77a4)
- sync: stop pull silently overwriting files the user already had (e8ccf4a)
- release 1.0.0 (837b553)
Nothing published to npm yet. The entries below describe the state being prepared for the first release.
logs— streams the ioBroker log.pushonly reports that the source was uploaded; the javascript adapter compiles it afterwards, so failures appear in the log and nowhere else.--level,--limit, and pattern filtering.--json— NDJSON on stdout, one record per line, each with atype. Human output is suppressed and warnings/errors stay on stderr, so stdout is parseable even on failure.diff --against <snapshot>— compare the working tree with abackupsnapshot rather than the server.latestresolves to the newest.login/logout— save or remove the password for an instance. Verified against the live server before saving.backup— read-only snapshot of every script's source and full object, sincepushcannot restorecommon.enabledorcommon.engine.- Interactive
init, which asks for URL, certificate handling, script root and username when run without flags, and adds.iobroker-sync/to.gitignore.
- Authentication now works over HTTPS with a self-signed certificate.
client/auth.tsusesnode:http/node:httpsinstead of the globalfetch, which cannot accept an untrusted certificate without anundiciAgent. ioBroker refuses passwords over plain HTTP, so every authenticated instance is affected; login previously failed at the TLS handshake before sending anything. - Passwords are stored outside the project at
~/.config/iobroker-sync/credentials.json, mode0600in a0700directory..iobroker-sync.jsonholds only the username. watch()returns a handle withstop()instead of blocking until SIGINT; signal handling moved to the CLI layer.
watchdropped edits saved before chokidar finished its initial scan. It now waits for the watcher to be ready before reporting that it is watching.watchcould re-pull its own push. The hash used to suppress the javascript adapter'scompiled/sourceHashecho was recorded after the server write, so an echo arriving mid-write escaped the guard.login --password-stdinalways reported "no terminal available". The option was declared both globally and on the subcommand, and the parent silently shadowed the child.init --typesno longer merges into atsconfig.jsonat the project root, which broke builds owningrootDir/outDirwith TS6059.
- No
--passwordflag exists, deliberately: argv is readable by other local processes viapsand is recorded in shell history. Use--password-stdin,IOBROKER_PASSWORD, the saved credential store, or the hidden prompt. - Prompts require both stdin and stdout to be TTYs, so scripts and CI get an error rather than hanging on a password prompt.