Skip to main content

Changelog

0.15.2 (2026-08-20)

Bug Fixes

  • defineInterface refuses positional in/out rather than indexing them (#388) (49fcc8e)

Documentation

  • a site, built from the markdown that is already here (#396) (d6f2f89)

0.15.1 (2026-07-30)

Bug Fixes

  • a message that cannot be written settles its call once (#387) (3183647)

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 read argv1, argv2, ... rather than arg1, 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.
  • plainValues and returnBigInt now default to true, so a variant reads as its value, a string-keyed dict as a plain object, and x/t as bigint. This touches every value your code reads. variantValue() and toPlain() read either shape, and withClassicTypes() from dbus-native/compat restores the 1.x shapes wholesale. Note bigint is not a drop-in for number: arithmetic and JSON.stringify both throw on one.
  • Calls that previously hung forever now reject with a TimeoutError after 25 seconds, the figure libdbus, GDBus and sd-bus all use. Pass timeout: 0 per call or per client to restore the old behaviour, or raise timeout for a method that genuinely takes longer.
  • ReturnLongjs now throws rather than being ignored -- pass returnBigInt: false for a lossy number. long is no longer a dependency; a Long is still accepted on input.
  • The dbus2js binary is removed; use dbus-native types. lib/address-x11.js is 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

  • note the stacked-squash changelog trap (#379) (50782f5)

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

  • never answer a method call addressed to someone else (#369) (9b02493)

Documentation

  • re-evaluate the clean-slate design at v0.12.0 (#361) (27b218d)

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 to Properties.Get/Set, not in the message header, so properties: { '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 single
    element of [A-Za-z_][A-Za-z0-9_]* with no dots, at most 255 bytes

    Superseded 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.js has been removed (#342) — it was reachable as require('dbus-native/lib/portforward'). Use bin/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 the hexy dependency 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, because Long.fromBits(undefined, undefined, undefined) is zero. Passing a boolean where an integer belonged silently sent 0.

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

  • correct the ReturnLongjs deprecation status in ROADMAP 3.2 (#345) (8bd9ab2)

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

  • introspect signals, and fix proxy signal subscriptions (#331) (eb23d94)

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

  • do not write to a connection closed during the handshake (#329) (2ab62fd)

0.8.0 (2026-07-29)

Features

  • add dbus-native lint for the value shapes that change in 2.0 (#325) (443cd37)

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

  • export the error classes from index.js (#322) (665f8f5)

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)