Release Overview
Curated overview of releases across Bare's building-block and helper modules—breaking changes, removals, and additions.
A curated record of changes across Bare's runtime and ecosystem modules, newest first. For the raw upstream record, see each module's GitHub releases; this page is the docs-team view of what the changes mean for your application.
Looking for pear CLI or pear-* module releases instead? See Pear's release overview.
2026-10-13 — Bare v1.35.1
- Fixed: the
barepackage on npm.bare@1.35.0was published withoutindex.d.ts, although itspackage.jsonpoints to that file, so TypeScript found no declarations for it. The publish workflow did not run theprepackscript that copies the typings fromsrc/bare.d.ts, and v1.35.1 runs it before publishing. The runtime is unchanged apart from its version number. See Bare runtime API.
2026-10-13 — Bare v1.35.0
- Breaking: a thread started from a bundle now serves only the modules under the mount of the bundle, which defaults to
filenamefollowed by/. A bundle keyed by absolute URLs outside its mount fails withMODULE_NOT_FOUNDunless the thread is started with the newmountoption. The bundles thatbare-threadandbare-workerprepare from files on disk are keyed this way. See Starting a thread from a bundle. - Breaking:
bare-threadbefore v1.3.0 andbare-workerbefore v4.5.1 do not passmount, so they fail on Bare 1.35.0. A worker started withbare-workerv4.5.0 fails at startup withMODULE_NOT_FOUNDforbare-worker/lib/worker-thread.js. Usebare-threadv1.3.0 or later andbare-workerv4.5.1 or later. A worker that loads a native addon needsbare-workerv4.5.3 or later. - Added:
Bare.Addon.loaded(url), which reports whether the current process has already loaded the dynamic addon aturl, afile:orlinked:URL. It loads nothing and keeps answeringtrueafterAddon.seal(). Any other protocol, includingbuiltin:, givesfalse. SeeBare.Addon. - Added: the
mountoption ofBare.Thread, the URL to mount the bundle of the thread at. It defaults tofilenamefollowed by/, a value that is not a URL throws aTypeError, andfile:///lets the bundle serve any file. SeeBare.Thread. - Added: the
BARE_ENGINE_SHAREDcompile option, which links the JavaScript engine as a shared library instead of embedding it. When it is on, the prebuilds thatBARE_PREBUILDSenables for the default engine are not used. See Compile options. - Added:
bare/target.hrecognizes a compiler that targets WebAssembly under WASI.BARE_PLATFORMis then"wasi",BARE_ARCHis"wasm32", andBARE_PLATFORM_WASIandBARE_ARCH_WASM32are defined. The platform support table lists no WebAssembly target, and the types ofBare.platformandBare.archdo not include these values. See Headers and macros. - Changed: a thread started from a bundle treats the addons that the bundle declares but does not embed as present on disk, and loads them through
Bare.Addon. Earlier releases fail withMODULE_NOT_FOUNDfor such an addon, sobare-threadv1.4.0, which leaves addons out of the bundles it prepares, needs Bare 1.35.0 or later in a thread that loads one.Addon.seal()still applies: on a sealed process, such an addon loads only if the process has already loaded it. - Changed:
bare_module_find()returnsvoid *instead ofuv_lib_t *. C code compiles unchanged, and C++ code needs a cast. See Headers and macros. - Changed: libuv is v1.53.0, up from v1.52.1.
- Changed: bundles
bare-modulev7.4.0, up from v7.2.0. It is the cause of the first breaking change in this release, adds amountoption toModule.load(),Module.loadSync(), and the loader'slink(),linkSync(),import(), andimportSync(), and accepts a parsedBundleas thesource. See Loading bundles. - Changed: bundles
bare-addon-resolvev1.11.0 andbare-module-traversev2.6.0, which resolve WebAssembly addons, andbare-module-resolvev1.12.6. See Bare module updates. - Changed: bundles
bare-timersv3.2.4, wheretimeout.refresh()rearms a timeout that has already fired, andbare-urlv2.5.5, whereURL.pathToFileURL()handles Windows extended-length paths. - Changed: the JavaScript API is documented as TSDoc in
src/bare.d.tsinstead of in the README. The declarations now includeBare.IPC,Addon.seal(), andAddon.sealed, which the earlier typings left out. They importDuplexfrombare-streamfor the type ofBare.IPC, andbarelistsbare-streamas an optional peer dependency. - Changed: the threat model says that code that can write to the shared intrinsics can watch and steer every module graph in a realm, so the protocol you hand to untrusted code is not a reliable limit unless you run that code in a realm of its own or freeze the intrinsics first. It also says that WebAssembly addons can still load after
Addon.seal(). Keeping untrusted code away from the shared intrinsics is now one of five embedder duties. See Embedding. - Fixed: the type of
Bare.archnow includesriscv64, which Bare already reported on RISC-V 64 builds. SeeBare.arch.
2026-10-13 — Bare module updates
bare-addon-resolve — v1.11.0
- Added: WebAssembly prebuilds. A host that starts with
wasi-, such aswasi-wasm32, is looked up last, asprebuilds/<host>/<name>.wasm, after the native prebuilds and linked addons. See bare-addon-resolve. - Changed: a
wasi-host no longer usesopts.extensionsor shares the native lookup. Before,wasi-wasm32yielded.bareand.nodecandidates, ahead of linked addons. - Fixed: a
deferred:entry in theresolutionsmap is ignored for an addon, and resolution continues as if the map had no entry. Before, the entry was resolved as a module, sodeferred:.could yield a JavaScript file, such as theindex.jsof the package, instead of an addon.
bare-assert — v1.3.0
- Added:
deepStrictEqual(),notDeepStrictEqual(), andpartialDeepStrictEqual();throws(),doesNotThrow(),rejects(), anddoesNotReject(); andmatch(),doesNotMatch(), andifError(). See bare-assert. - Changed: the minimum Bare is 1.32.0, because
bare-assertdepends onbare-typev1.3.0 or later, which requires it. An older Bare refuses to loadbare-assertwithUNSUPPORTED_ENGINE. A fresh install of v1.2.0 already has the same requirement, because it pulls inbare-typethroughbare-inspect. - Fixed:
AssertionError.codeis'ASSERTION'instead ofundefined, and the type declarations now includefail()andnotOk().
bare-bluetooth-android — v0.11.3
- Breaking (v0.11.0):
new Server()no longer opens the GATT server. Callserver.open()onceserver.stateis'on', and again each time the adapter returns to'on', then add the services again. Without it,addService(),respondToRequest(), andupdateValue()throwGATT server unavailable.server.close()closes the server. See bare-bluetooth-android. - Added (v0.10.0):
central.getBondedDevices(), atypeproperty onDevicewith theDEVICE_TYPE_*constants, andnew Peripheral({ device }), which connects to a device without scanning.scanResult,rssi, andserviceDataarenullfor such a peripheral. - Added:
BluetoothErroris exported from the package root, and theCentralandServerconstructors throw it with the codeADAPTER_UNAVAILABLEon a device with no Bluetooth adapter. - Changed (v0.11.1): a failed
L2CAPChannelwrite destroys the stream with the error instead of throwing fromwrite(), and native channel errors and close destroy the stream instead of being emitted directly. Listen for'error'on the channel. - Changed (v0.9.3): the native build no longer pins
ANDROID_PLATFORMtoandroid-34, and the prebuilds no longer listlibnativehelper.soas a needed library. - Changed (v0.11.2): the prebuilds link the C++ standard library statically and no longer list
libc++_shared.soas a needed library. - Fixed (v0.9.2): a peripheral drops its
read,write,notify, andnotifyStateevents for a characteristic that it did not discover, instead of emitting them with anullcharacteristic.
bare-bluetooth-apple — v0.7.0
- Added (v0.6.0):
central.retrievePeripherals(ids)andcentral.retrieveConnectedPeripherals(services), which returnRetrievedPeripheralentries without scanning.central.connect()andcentral.disconnect()accept them, so a saved peripheral id can be reconnected without a scan. See bare-bluetooth-apple. - Changed:
CentralandPeripheralManagerno longer let the system show its Bluetooth power alert when Bluetooth is off. Pass{ showPowerAlert: true }to the constructor to restore it.
bare-dns — v2.3.0
- Breaking: the minimum Bare is now 1.33.0 (was 1.7.0) on every platform, in a minor release. An older Bare refuses to load
bare-dnswithUNSUPPORTED_ENGINE. - Added: DNS resolution on Android. When the addon first loads, it reads
bare.android.jvm.v1andbare.android.context.v1from the embedder context and gives the Java VM and the connectivity manager to c-ares. It skips this step without an error if a key is missing. See Android.
bare-fs — v4.8.4
- Changed (v4.8.3):
fs.cp(),fs.cpSync(), andfs.promises.cp()copy symbolic links as links instead of skipping them. A link replaces a file or link at the destination, but copying over a directory throwsEEXIST. Special files such as named pipes throwENOTSUPinstead of being skipped silently. See bare-fs. - Fixed (v4.8.3): on Windows,
fs.symlink()andfs.symlinkSync()without atypeno longer create a junction for an existing target that is not a directory. A directory target gives a directory link, and anything else gives a file link. - Fixed: the millisecond timestamps of
Stats, and theDatevalues that go with them, are computed with 64-bit arithmetic, so they no longer overflow when the seconds value is held in 32 bits.
bare-make — v2.1.0
- Breaking (v2.0.0): the macOS, iOS, Linux, and
win32targets use the Clang fromllvm-runtimeand, for the targets that assemble with NASM, the NASM fromnasm-runtime, instead of a compiler found on the machine, such as Apple Clang on macOS. The Android and MinGW targets still use the Android NDK and a MinGW compiler found onPATH.nodemust be onPATHwhen you generate a build system for one of the targets that changed, including whenbare-makeruns on Bare. Without it,generate()rejects withGENERATE_FAILED. See Toolchain. - Breaking (v2.0.0):
generate()passes the flags it adds forsanitize,fuzz,color, anddebugbuilds through theCFLAGS,CXXFLAGS, andLDFLAGSenvironment variables instead ofCMAKE_C_FLAGSand the linker flag cache entries. They now append to flags already in the environment, and they apply to C++ as well as C. CMake reads the variables only when it first configures a build tree, so callinggenerate()again on an existing tree with a differentsanitizevalue leaves its flags as they were. Setcachetofalse, or pass--no-cache, to configure the tree again. See Compiler and linker flags. - Breaking (v2.0.0): the
bare-processdependency is gone. The JavaScript API still runs on Bare, but running the CLI,bin.js, throughbarefails withMODULE_NOT_FOUNDforprocess. - Added:
make.test.env()andbare-make test env, which return or print the environment variables that the test launcher adds or changes, so that programs run outside CTest can apply them.generate()now always setsCMAKE_PROJECT_INCLUDEto record the launcher, and aCMAKE_PROJECT_INCLUDEentry indefineis kept and runs first. See Environment. - Added: the
wasi-wasm32target, selected withplatform: 'wasi'andarch: 'wasm32', which needs the optionalwasi-sysrootpackage and builds executables with the.wasmsuffix. The target comes fromcmake-toolchainsv2.1.0, whichbare-makev2.1.0 is the first release to require. With an oldercmake-toolchains, such as the onebare-makev1.8.0 uses,generate()rejects the target withUNKNOWN_TOOLCHAIN. - Changed: the musl targets need the optional
musl-sysrootpackage instead of a musl cross compiler onPATH. - Fixed (v2.0.1): on
win32,sanitizealso passes/OPT:NOICFto the linker, so identical code folding no longer causes false AddressSanitizer one-definition-rule reports.
bare-module — v7.4.0
- Breaking (v7.2.2): a bundle serves only the modules under its mount, which is the URL of the bundle followed by
/. A module outside it, such as a key of/../bar.jsor an absolute URL that the mount does not cover, is read through the protocol and fails withMODULE_NOT_FOUNDif the protocol does not have it. In v7.2.1 the bundle served its own copy. A bundle with absolute keys outside its own URL needs themountoption from v7.3.0. See Loading bundles. - Added (v7.3.0): the
mountoption, the URL that the entry bundle is mounted at, onModule.load(),Module.loadSync(), and the loader'slink(),linkSync(),import(), andimportSync(). A value that is not a URL throws aTypeError.Bare.Threadforwards its ownmountoption to it. - Added:
Module.load()andModule.loadSync()accept an already parsedBundleas thesource. In v7.3.0, passing one threw a misleadingMount must be a URLTypeError. - Fixed (v7.2.2): a
.bundleloads through an asynchronous protocol instead of throwingUNEXPECTED_PROMISE, andrequire()of a missing literal specifier through one throwsMODULE_NOT_FOUND, andrequire.asset()throwsASSET_NOT_FOUND. A specifier computed at run time still throwsUNEXPECTED_PROMISE. See Asynchronous protocols. - Fixed (v7.2.1): loaders that share a
cacheand read through the default protocol no longer throwCACHE_INCOMPATIBLEwithCache is read through a different protocol, which a secondModule.load()with the samecachehit.loader.patch()leavesloader.protocolas it was, and a loader that shares the cache also reads the patch.
bare-module-resolve — v1.12.6
- Fixed: a target that is a URL, such as
deferred:dornode:fs, in aresolutionsorimportsmap that resolves to nothing no longer falls through to a package lookup, soreadPackageis not called for a package named after the target, such asnode_modules/deferred:d/package.json. See bare-module-resolve.
bare-module-traverse — v2.6.0
- Added: WebAssembly addons. A
.wasmaddon is traversed as an addon, andtraverse.resolve.baredefaultshoststo[host, 'wasi-wasm32'], so a package with no native build falls back toprebuilds/wasi-wasm32/<name>.wasm. See WebAssembly addons. - Added: the
hostandwasiimport attributes,traverse.assertAddonContext(), and the errorsUNKNOWN_ADDON_HOST,ADDON_HOST_INCOMPATIBLE, andADDON_WASI_INCOMPATIBLE. - Breaking:
traverse.preresolved()takes a newattributesargument before the resolutions map, which breaks direct callers. - Changed: with
traverse.resolve.bareand nohosts, thewasiandwasm32conditions in packageexportsandimportsare matched and recorded next todefault. - Fixed: the
typeimport attribute is applied to imports resolved through aresolutionsmap, and addons listed in aresolutionsmap are typed as addons whatever their extension.
bare-pack — v2.2.4
- Added: WebAssembly addon bundling, through
bare-module-traverse~2.6.0. Withresolve.bareand nohosts,pack()falls back to the.wasmbuild of a package with no native build and embeds it like a native addon. The CLI takes the host platform by default, so pass--host wasi-wasm32next to the native hosts to bundle it. See WebAssembly addons. - Changed (v2.2.3):
pack()callsreadModuleat most once per URL, which avoids reading the samepackage.jsonrepeatedly.
bare-sidecar — v0.5.8
- Added: the
stdiooption,'pipe','inherit', or'ignore', for all three standard streams or for each one. A sidecar can now write to the host's streams or discard them. Earlier versions always piped them, and an unread pipe could block the sidecar. See Standard streams. - Changed: the bundled Bare runtime is v1.34.1, up from v1.34.0.
bare-stow — v0.1.7
- Changed (v0.1.6):
basedefaults to the closest directory that contains every module in the bundle. It was the directory that containsentryfor the API and the working directory for the CLI, so a bundle could hold keys such as/../node_modules/...whennode_modulessat in a parent directory of the entry. An explicitbasethat does not contain every module makesstow()throwModule '<url>' is outside base '<base>'. See bare-stow. - Changed (v0.1.6): the
start()of thebare-sidecartarget inherits the standard streams of the host by default, so the console output of the bundle is shown. Passstdioto override it. This needsbare-sidecarv0.5.8 or later, because earlier versions ignorestdio. - Fixed:
ipc.ready, and so the harnessstart(), rejects withWorker exited with code <code> before readyorWorker closed before readywhen the worker exits or the transport closes first, instead of staying pending forever.
bare-subprocess — v6.2.2
- Changed:
subprocess.kill()returnstrueif the signal was sent andfalseif the child had already exited. It can be called more than once, and it setssubprocess.killedonly when it returnstrue. See bare-subprocess. - Fixed: a parent that called
kill(0)on a child no longer waits for the child at teardown, because the child now receivesSIGTERMif it is still running. - Fixed (v6.2.1): a
spawn()that fails, for example for a command that does not exist, no longer sendsSIGTERMto the whole process group of the parent when the process tears down.
bare-timers — v3.2.4
- Fixed:
timeout.refresh()on a timeout that has already fired rearms it, so the callback runs again after its delay. Before, the callback did not run again when no other timer was pending. See bare-timers.
bare-url — v2.5.5
- Changed: on Windows,
URL.pathToFileURL()handles extended-length paths such as\\?\C:\fooand\\?\UNC\server\share\foo, and throwsINVALID_ARG_VALUEfor a UNC path with an empty server name or no resource path, such as\\server. See bare-url.
react-native-bare-kit — v0.16.0
- Breaking: native addons are no longer linked automatically. Earlier releases ran
bare-linkfrom the podspec on iOS and from a Gradle task before each Android build. v0.16.0 removed both steps and its dependency onbare-link, so an app must link its own addons. See Linking native addons.
2026-09-30 — Bare v1.34.1
- Breaking: the minimum macOS is now 13.0 (was 12.0) and the minimum iOS is now 15.0 (was 14.0), in a patch release. See Supported platforms.
- Changed: bundles
bare-modulev7.2.0, which addsloader.patch()andloader.evict()for cache eviction and accepts animportsattribute inrequire.resolve()andimport.meta.resolve().
2026-09-28 — Bare v1.34.0
- Added:
bare_poll(), which runs the event loop without blocking so a host loop that owns the thread, a UI run loop for example, can drive Bare. See Embedding. - Added:
bare_attach()andbare_detach(), for calling into JavaScript from embedder code that Bare did not call. Seebare_attach()andbare_detach(). - Changed: bundles
bare-modulev7.1.0, which exposes the graph-wide resolutions map asmodule.resolutions, along withbare-subprocessv6.2.0,bare-structured-clonev2.0.1, andbare-typev1.4.0.
2026-09-14 — Bare v1.33.0
- Added: an embedder context API, letting the embedder pass state to addons. Reaching it from a deferred
new Addon()call needs v1.33.2. - Fixed (v1.33.1): a prefix with a trailing
/is always treated as a directory. - Changed:
bare-moduleis bumped to v7, so the module system no longer carries its own file system read capability—the embedder must pass one in. See the threat model for what this changes. - Changed:
resolutionsandimportsare no longer read frommodule.
2026-09-07 — Bare v1.32.0
- Added:
Bare.Addon.seal(), letting an embedder permanently freeze dynamic addon loading in a process after loading a trusted set of addons—so any JavaScript that runs afterward can't bring in new native code. Statically linked addons are unaffected, andBare.Addon.sealedreports whether the process is sealed. - Added:
new Thread(callback)runs a function body on the new thread, andnew Thread(filename, source[, options])takes the source positionally. SeeBare.Thread. - Deprecated:
ThreadOptions.source, in favor of the positional form.Thread.create()stays deprecated, as it has been since v1.31.0—usenew Thread().
2026-09-01 — Bare module updates
bare-type — v1.1.1
- Breaking:
type.createTag(),type.addTag()andtype.checkTag()removed, with no replacement, in a patch release. See bare-type.
2026-08-04 — Bare v1.31.0
- Deprecated:
Addon.cache,Addon.resolve(specifier), andAddon.load(url), in favor ofnew Addon(url), andThread.create(), in favor ofnew Thread().bare-modulev7 will use the new API to take over addon resolution, initialization, and caching.
2026-07-01 — Bare v1.30.0
- Added: TypeScript module support.
- Changed: module caches are isolated; addon resolution now relies only on
bare-module's public API.
Patch releases in this window (dependency bumps, prebuild updates) and most of Bare's ecosystem modules (bare-buffer, bare-http1, bare-inspect, etc.) aren't covered yet—that backfill is in progress as a separate effort across Bare, P2P, and Pear. See each module's GitHub releases for the raw upstream record in the meantime.
See also
- Pear's release overview—
pearCLI andpear-*module releases. - P2P's release overview—Hypercore, Hyperdrive, HyperDHT, Corestore, and other P2P building-block/helper-module changes.
- Building blocks reference—current API for P2P modules.
- Helpers reference—current API for P2P helpers.
Last updated on