brew config AND brew doctor output
Your system is ready to brew.
HOMEBREW_VERSION: 5.1.10-33-g6839384
ORIGIN: https://github.com/Homebrew/brew
HEAD: 68393841da13d154749e0d332e20a3b69250a83e
Last commit: 2 hours ago
Branch: main
Core tap HEAD: 7a8dfb265ff976e34a5879fd5993d6de4495fa51
Core tap last commit: 19 minutes ago
Core tap JSON: 08 May 15:44 UTC
Core cask tap HEAD: 8b52a10df8ade147b6cf6632ce9af87d17cc106e
Core cask tap last commit: 40 minutes ago
Core cask tap JSON: 08 May 15:44 UTC
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_DISPLAY: /var/run/com.apple.launchd.8YEix1pkaJ/org.xquartz:0
HOMEBREW_DOWNLOAD_CONCURRENCY: 48
HOMEBREW_EDITOR: /usr/bin/vim
HOMEBREW_FORBID_PACKAGES_FROM_PATHS: set
HOMEBREW_MAKE_JOBS: 24
HOMEBREW_NO_COLOR: set
HOMEBREW_NO_ENV_HINTS: set
HOMEBREW_SORBET_RUNTIME: set
Homebrew Ruby: 4.0.3 => /opt/homebrew/Library/Homebrew/vendor/portable-ruby/4.0.3/bin/ruby
CPU: 24-core 64-bit arm_blizzard_avalanche
Clang: 21.0.0 build 2100
Git: 2.54.0 => /opt/homebrew/bin/git
Curl: 8.7.1 => /usr/bin/curl
macOS: 26.5-arm64
CLT: N/A
Xcode: 26.4.1
Metal Toolchain: N/A
Rosetta 2: false
Verification
What were you trying to do (and why)?
Use the native Temporal API in Node.js 26, specifically Temporal.Now.zonedDateTimeISO().toString().
Node.js 26 enables Temporal by default upstream, so I expected the Homebrew node 26 bottle to expose globalThis.Temporal as well.
What happened (include all command output)?
Homebrew's node 26 bottle appears to be built without V8 Temporal support:
$ brew info node | sed -n '1,20p'
==> node: stable 26.0.0 (bottled), HEAD
Open-source, cross-platform JavaScript runtime environment
https://nodejs.org/
Installed (on request)
/opt/homebrew/Cellar/node/26.0.0 (1,889 files, 82.4MB) *
Poured from bottle using the formulae.brew.sh API on 2026-05-08 at 10:50:32
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/n/node.rb
License: MIT
==> Dependencies
Required (17): ada-url, brotli, c-ares, hdrhistogram_c, icu4c@78, libnghttp2, libnghttp3, libngtcp2, libuv, llhttp, merve, nbytes, openssl@3, simdjson, sqlite, uvwasi, zstd
Recursive Runtime (23): all installed ✔
$ node -p "JSON.stringify({version: process.version, execPath: process.execPath, v8: process.versions.v8, temporalGlobal: Object.hasOwn(globalThis, 'Temporal'), temporalNow: typeof globalThis.Temporal?.Now?.zonedDateTimeISO, temporalConfig: process.config.variables.v8_enable_temporal_support}, null, 2)"
{
"version": "v26.0.0",
"execPath": "/opt/homebrew/Cellar/node/26.0.0/bin/node",
"v8": "14.6.202.33-node.19",
"temporalGlobal": false,
"temporalNow": "undefined",
"temporalConfig": 0
}
For comparison, the official upstream Node.js v26.0.0 darwin-arm64 binary exposes Temporal and has v8_enable_temporal_support = 1:
$ ./node-v26.0.0-darwin-arm64/bin/node -p "JSON.stringify({version: process.version, execPath: process.execPath, temporalGlobal: Object.hasOwn(globalThis, 'Temporal'), temporalNow: typeof globalThis.Temporal?.Now?.zonedDateTimeISO, temporalConfig: process.config.variables.v8_enable_temporal_support, sample: globalThis.Temporal?.Now?.zonedDateTimeISO?.().toString()}, null, 2)"
{
"version": "v26.0.0",
"execPath": "/private/var/folders/d6/j_bw829j50dc21f_98rtdslh0000gn/T/tmp.uwJLyoHm6d/node-v26.0.0-darwin-arm64/bin/node",
"temporalGlobal": true,
"temporalNow": "function",
"temporalConfig": 1,
"sample": "2026-05-08T11:53:36.18027002-04:00[America/Toronto]"
}
The formula also seems to know that temporal_capi is only relevant when building with --v8-enable-temporal-support, but I do not see --v8-enable-temporal-support being added to the configure args:
$ brew cat node | rg -n "v8-enable-temporal|temporal_capi|args =|configure" -C 3
99-
100- # Never install the bundled "npm", always prefer our
101- # installation from tarball for better packaging control.
102: args = %W[
103- --prefix=#{prefix}
104- --without-npm
105- --with-intl=system-icu
--
142- # TODO: Try to devendor these libraries.
143- # - `--shared-gtest` is only used for building the test suite, which we don't run here.
144- # - `--shared-simdutf` seems to result in build failures.
145: # - `--shared-temporal_capi` is only used when building with `--v8-enable-temporal-support`
146- # - `--shared-lief` is not available as dependency in Homebrew.
147- ignored_shared_flags = %w[
148- gtest
149- simdutf
150: temporal_capi
151- lief
152- ].map { |library| "--shared-#{library}" }
--
173- # FIXME: re-enable me, currently crashes sequoia runner after 6 hours
174- # args << "--enable-lto" if OS.mac? && DevelopmentTools.clang_build_version > 1699 && build.bottle?
175-
176: system "./configure", *args
177- system "make", "install"
What did you expect to happen?
Homebrew's node 26 bottle should match upstream Node.js 26 behavior:
Object.hasOwn(globalThis, 'Temporal') === true
process.config.variables.v8_enable_temporal_support === 1
typeof Temporal.Now.zonedDateTimeISO === 'function'
If Homebrew's configure environment disables V8's default Temporal support, the formula may need to pass --v8-enable-temporal-support explicitly, and possibly handle the temporal_capi dependency accordingly.
Step-by-step reproduction instructions (by running brew commands)
brew update
brew reinstall node
node -p "JSON.stringify({version: process.version, execPath: process.execPath, v8: process.versions.v8, temporalGlobal: Object.hasOwn(globalThis, 'Temporal'), temporalNow: typeof globalThis.Temporal?.Now?.zonedDateTimeISO, temporalConfig: process.config.variables.v8_enable_temporal_support}, null, 2)"
brew configANDbrew doctoroutputVerification
brew doctoroutput saysYour system is ready to brew.and am still able to reproduce my issue.brew updateand am still able to reproduce my issue.brew doctorand that did not fix my problem.What were you trying to do (and why)?
Use the native Temporal API in Node.js 26, specifically
Temporal.Now.zonedDateTimeISO().toString().Node.js 26 enables Temporal by default upstream, so I expected the Homebrew
node26 bottle to exposeglobalThis.Temporalas well.What happened (include all command output)?
Homebrew's
node26 bottle appears to be built without V8 Temporal support:For comparison, the official upstream Node.js v26.0.0 darwin-arm64 binary exposes Temporal and has
v8_enable_temporal_support = 1:The formula also seems to know that
temporal_capiis only relevant when building with--v8-enable-temporal-support, but I do not see--v8-enable-temporal-supportbeing added to the configure args:What did you expect to happen?
Homebrew's
node26 bottle should match upstream Node.js 26 behavior:If Homebrew's configure environment disables V8's default Temporal support, the formula may need to pass
--v8-enable-temporal-supportexplicitly, and possibly handle thetemporal_capidependency accordingly.Step-by-step reproduction instructions (by running
brewcommands)brew update brew reinstall node node -p "JSON.stringify({version: process.version, execPath: process.execPath, v8: process.versions.v8, temporalGlobal: Object.hasOwn(globalThis, 'Temporal'), temporalNow: typeof globalThis.Temporal?.Now?.zonedDateTimeISO, temporalConfig: process.config.variables.v8_enable_temporal_support}, null, 2)"