Changelog
0.15.2 (2026-08-20)
Bug Fixes
Documentation
0.15.1 (2026-07-30)
Bug Fixes
Documentation
- cite the versions that shipped, not the ones that were planned (#384) (e69744d)
- drop the /next subpath track (#386) (8374dc7)
0.15.0 (2026-07-30)
⚠ BREAKING CHANGES
unixexec:addresses readargv1,argv2, ... rather thanarg1,arg2, .... An address hand-written against the old spelling now passes no arguments -- use the spec keys. Conformant addresses, which passed no arguments before, now work.
Bug Fixes
- a bus keeps the options it was given, and cannot be crashed by a path (#382) (0fb0dbd)
- exported signals follow the export, and stop when it ends (#383) (799cebd)
- unixexec addresses use the argv keys the spec defines (#380) (588d6a2)
0.14.0 (2026-07-30)
⚠ BREAKING CHANGES
docs/migrating-to-2.0.md is the guide. Listed here in the order they will stop you, not the order they were written.
- Node.js 22.12.0 or newer is required, up from 20.8.0. Node 20 reached end of life on 2026-04-30. 22.12 rather than 22.0 because that is where
require()of an ESM module works unflagged. plainValuesandreturnBigIntnow default to true, so a variant reads as its value, a string-keyed dict as a plain object, andx/tasbigint. This touches every value your code reads.variantValue()andtoPlain()read either shape, andwithClassicTypes()fromdbus-native/compatrestores the 1.x shapes wholesale. Notebigintis not a drop-in fornumber: arithmetic andJSON.stringifyboth throw on one.- Calls that previously hung forever now reject with a
TimeoutErrorafter 25 seconds, the figure libdbus, GDBus and sd-bus all use. Passtimeout: 0per call or per client to restore the old behaviour, or raisetimeoutfor a method that genuinely takes longer. ReturnLongjsnow throws rather than being ignored -- passreturnBigInt: falsefor a lossynumber.longis no longer a dependency; a Long is still accepted on input.- The
dbus2jsbinary is removed; usedbus-native types.lib/address-x11.jsis removed -- it required a package that was never a dependency, so it threw on require for anyone who found it.
Features
- drop long, ReturnLongjs, dbus2js and lib/address-x11.js (#374) (1af463b)
- every call has a deadline (#378) (72d956b)
- raise the Node floor to 22.12.0 (#375) (7a35321)
- the plain value shapes are the default (#373) (209f2a1)
Documentation
0.13.0 (2026-07-30)
Features
- bus.close(), bus.watch() and bus.ownName(), each disposable (#366) (9d3cc60)
- bus.objects(), a live view of a service's object tree (#365) (de3f99e)
- bus.proxy(), the remote object as an object (#367) (31c7e25)
- defineInterface(), declaring a service without positional arrays (#371) (77259b4)
- proxy.$watch() and proxy.$signal(), bounded (#370) (6e05385)
- reconnect, opt-in, restoring names and match rules (#372) (ba698f0)
- serve org.freedesktop.DBus.ObjectManager (#364) (e6839ec)
- UNIX_FD, carried over a transport the caller supplies (#368) (4ce6d5c)
- variants: 'wrap', so a variant can carry its type without the tree (#363) (2f68183)
Bug Fixes
Documentation
0.12.0 (2026-07-29)
Features
- a real server-side SASL handshake (#353) (a34c77b)
- an in-process message bus (#355) (eda10e4)
- call methods and read properties from the command line (#357) (d487c7a)
- parse and evaluate match rules (#354) (091f698)
- withClassicTypes, and a guide for the 2.0 value shapes (#360) (0542283)
Bug Fixes
- accept '-' in property names, which 0.11.0 wrongly rejected (#346) (46e9d63)
- advertise child objects on a path that is itself exported (#351) (bf0e077)
- escape the introspection XML, which a stray '&' made unparseable (#347) (ffce811)
- put the space back in the DBUS_COOKIE_SHA1 response (#352) (d13164a)
- return the object that was asked for, and all of its children (#350) (84695c8)
- run the integration suite one file at a time (#358) (5940f73)
0.11.0 (2026-07-29)
⚠ BREAKING CHANGES
Three things that worked in 0.10 behave differently. All three are cases the library previously accepted and should not have; none affects code that was already correct.
-
exportInterface()now rejects names that break the D-Bus naming rules (#333) — the object path,iface.name, and every method, signal and property name. It throws at export rather than putting an unroutable message on the wire.The case most likely to affect you is a property name containing
-or., because those genuinely worked: a property name travels as a string argument toProperties.Get/Set, not in the message header, soproperties: { 'my-prop': 's' }could be read and written quite happily. It now throws. Hyphens are the GObject convention, so services bridging GObject properties are the ones to check.A method or signal name with a hyphen also throws, but those were already broken for remote callers — the name goes in the header, where the rules are enforced by the bus.
Invalid member name for properties.my-prop: "my-prop" -- must be a singleelement of [A-Za-z_][A-Za-z0-9_]* with no dots, at most 255 bytesSuperseded for properties in 0.11.1, which was the case where the old behaviour was correct: property names are not member names, and
-in one works everywhere.properties: { 'my-prop': 's' }exports again. Method and signal names are unchanged. See docs/api.md#names. -
lib/portforward.jshas been removed (#342) — it was reachable asrequire('dbus-native/lib/portforward'). Usebin/dbus-dissect.js, which forwards the same way on the same default port and prints decoded messages rather than a hexdump. This is what let thehexydependency go. -
A 64-bit field given something that is not a number now throws (#343) —
marshall('x', [{}]),[[]]and[true]used to write eight zero bytes with no complaint, becauseLong.fromBits(undefined, undefined, undefined)is zero. Passing a boolean where an integer belonged silently sent0.
Features
- accept a plain JS object anywhere a dict is expected (#335) (869a8df)
- read the 2.0 value shapes today with
plainValues(#340) (fcf00f6) - say why UNIX_FD is unsupported, and scope what it would take (#344) (2fa894b)
- support launchd: addresses, so sessionBus() works on macOS (#336) (24a4dbc)
- validate names against the D-Bus rules before sending them (#333) (1ac6c5e)
Bug Fixes
- do not crash when a match call loses the race with a closing connection (#339) (b0ad5b3)
- let a service method return several out arguments (#341) (3c5eec0)
- wrap the message serial instead of overflowing uint32 (#337) (084aede)
Documentation
Code Refactoring
- make the library's own reads survive the 2.0 value shapes (#338) (b2a9100)
- use bigint internally for x/t, confining Long.js to one option (#343) (f68e575)
0.10.0 (2026-07-29)
Features
0.9.0 (2026-07-29)
Features
- emit PropertiesChanged, and honour declared property access (#330) (3a54caa)
- opt-in BigInt for the 64-bit types (#327) (48484a3)
Bug Fixes
0.8.0 (2026-07-29)
Features
0.7.0 (2026-07-29)
⚠ BREAKING CHANGES
- a failed call delivers a DBusError to callbacks rather than the message body array. Read err.message instead of err[0], and err.body for an error that really does carry several arguments. See docs/migrating-to-0.7.md.
Features
Bug Fixes
0.6.0 (2026-07-29)
Features
- dbus-native types CLI, and deprecate dbus2js (#321) (913d1d1)
- forward-compatible value helpers and deprecation infrastructure (2622dca)
- forward-compatible value helpers and deprecation infrastructure (12fdd75)
- per-call and per-client timeouts, and AbortSignal support (#318) (be1fefe)
- publish message and call traffic on diagnostics_channel (#319) (1edf1e9)
- return promises when no callback is given (209dcde)
- return promises when no callback is given (d261d53)
- ship TypeScript definitions (#320) (6b22272)
Documentation
- add BIG_FUTURE_PLANS.md, a modern-DX design sketch (9812caa)
- add RELEASE_PLAN.md and reconcile the design doc with it (1fdffbf)
- modern-DX design sketch and a staged release plan (ec0049b)
0.5.0 (2026-07-28)
⚠ BREAKING CHANGES
- requires Node.js >= 20.8.0, and the optional abstract-socket dependency is gone. Abstract sockets are still supported on Linux, now via Node itself.
Features
- read big-endian messages (327d093)
- read big-endian messages (358c52f)
- respect write backpressure and batch writes within a tick (56696e6)
- respect write backpressure and batch writes within a tick (3b0f1db)
Bug Fixes
- copy ay byte arrays instead of returning a view of the message (824e309)
- copy ay byte arrays instead of returning a view of the message (b01bf52)
- correct property writes, machine id, auth fallback and error names (23eda5c)
- harden the message read loop against malformed input (00c7bf5)
- harden the message read loop against malformed input (0b46789)
- isolate message listeners from the read loop (077a66f)
- isolate message listeners from the read loop (5aae603)
Performance Improvements
- cache parsed signatures (ea233e3)
- cache parsed signatures (21e8400)
- rewrite the marshaller onto a single-buffer cursor writer (40016e6)
- rewrite the marshaller onto a single-buffer cursor writer (04c6576)
Dependencies
- cut runtime dependencies from seven to three (9483096)
Documentation
- add ROADMAP and AGENTS guides, refresh README (9d80c17)
- fold the wire-layer audit into ROADMAP as PR-sized blocks (6fcc0cf)
- fold the wire-layer audit into ROADMAP as PR-sized blocks (7640ab5)
Code Refactoring
- modernise source to const/let and arrow functions (7eff854)