5 ms·
Node.js 26.0.0 (Now with Temporal)
- noodlesUK 5mo agoI'm really looking forward to the temporal api being universally available. Moment and Luxon are fairly good but sensible date/time handling is something that really ought to be baked into the platform ootb.
- culi 5mo agoUntil then, a solid backfill has been available for quite some time
- jpsimons 5mo agoI always thought the old Date is kind of elegant... increment anything with an overflow and it all wraps around correctly, like `d.setDate(d.getDate() + 100)` to advance a date 100 days. "March 208th" is interpreted like you'd expect, as are the hours and minutes and such. Of course, complete lack of non-local non-GMT time zones is a huge downside.
- keeganpoppen 5mo agoi'm pretty sure all that stuff works w/ Temporal... Temporal is extremely well-designed, in my experience. the js date object, on the other hand, has insane pitfalls, and i say this as someone who thinks not understanding JS ASI is a "skill issue", among other happily-un-"ergonomic" worldviews...
- kaoD 5mo agoThat's how you get date bugs.
- kaelwd 5mo ago`d.add({ days: 100 })` also wraps like you'd expect. `d.with({ day: 208 })` becomes the last day of the month instead but "March 208th" is kinda nonsense anyway so whatever. You could emulate it with `d.add({ days: 208 - d.day })`
- pjmlp 5mo ago26.2.0 is already out, why link to the previous release? https://nodejs.org/en/blog/release/v26.2.0 https://nodejs.org/en/blog/release/v26.2.0 What I would expect with the inclusion of temporal, is having a section on nodejs docs about Rust addons, alongside the C and C++ sections.
- aarestad 5mo agoThat's on me - I saw v26 was released, but didn't realize they'd already done a point release in the ensuing 2-3 weeks!
- petercooper 5mo agohttps://nodejs.org/en/blog/release/v26.1.0 https://nodejs.org/en/blog/release/v26.1.0 is particularly cool as it added initial FFI support.
- sexylinux 5mo agoThis API is inherently unsafe. Invalid pointers, incorrect signatures, or accessing memory after it has been freed can crash the process or corrupt memory. Absolutely great idea to expose such "features" to the web dev world! All the JS devs that are already struggling with mildly complicated language features will love the giant new field of bugs they only dreamed of. The arrival of the first very hyped tool that will make activating FFI support a requirement will be a great moment in JS history. Happily an army of mildly educated web devs will activate a feature which potential risks they do not even understand. Luckily nowadays supply chain attacks are a thing of the past in the JS world, oh, wait...
- petercooper 5mo agoCriticism noted! But it is experimental, unconstrained FFI is inherently unsafe, and not all JavaScript developers are "mildly educated web devs". I doubt we'll see this go into mainstream dependencies likely to be used by such developers – it hasn't in Ruby which has had easily accessible FFI mechanisms for years. Though, there is already a fun experiment using it: https://blog.platformatic.dev/destino-doom-terminal-nodejs-ffi https://blog.platformatic.dev/destino-doom-terminal-nodejs-f...
- cute_boi 5mo agoNode JS team should look into bun and make progress. They are somewhat stable, but bun have lot of features and is more performant than Node.
- HatchedLake721 5mo ago/s ? Bun is not yet (ever?) compatible with Node. I'm sure if Node JS could trim the fat with breaking changes they'd be fast too
- bel8 5mo agoI expect bun to run almost everything that node runs these days. They have an extensive test suit to ensure that. Even the complicated NextJS runs with Bun: https://nextjs.org/conf/session/nextjs-bun https://nextjs.org/conf/session/nextjs-bun Do you have a source for your claim?
- vichle 5mo agoMaybe if you start from scratch with a new project, but when migrating an old project it's definitely not a drop-in replacement. I try once or twice per year, but it's not worth the effort when the upside isn't that big.
- deleted 5mo ago[deleted]
- notnullorvoid 5mo agoIn my testing Bun wasn't much faster most of the time, usually on par for all non-IO related stuff, and there were some cases with scheduling where Bun was noticable slower.
- xkcd-sucks 5mo agoHonest question, what isn't compatible? Where I work we've simply replaced node with bun across a lot of overcomplicated + crappy projects, and on my work+personal computers I alias bun/bunx to node/npx with seemingly no issues at all
- torgoguys 5mo agoI thought this was the release where the built in sqlite got its experimental tag removed, but I don't see it in the release notes. THAT'S got me excited more than Temporal. A stable API, huge utility and one less dependency.
- dieulot 5mo agoIt was made a release candidate in the previous (non-LTS) major version, in v25.7.0 from February. Release notes: https://nodejs.org/en/blog/release/v25.7.0 https://nodejs.org/en/blog/release/v25.7.0 Issue: https://github.com/nodejs/node/pull/61262 https://github.com/nodejs/node/pull/61262
- chrisweekly 5mo agoTangent: if you use Node.js at build time you should check out VitePlus https://viteplus.dev https://viteplus.dev (No affiliation, just a fan of VoidZero's consistently excellent tools.)
- rumblefrog 5mo agoLooks interesting, what's their revenue model? Or how do we know it won't be abandoned in the near future?
- shimman 5mo agoThe same as any other dev tool startup, once money gets tight they will monetize and users will rightfully revolt. Evan You won't break the cycle, tale as old as time.
- manniL 5mo agoVoidZero's business model is in Void, their deployment platform. Open source projects will always stay open source. This was announced at the very beginning.
- shimman 5mo agoYes, nothing different from any other VC dev tool startup. When the community fractures people simply move on to something else. See rome -> biome for a very recent example.
- lioeters 5mo agoAfter getting burned so many times on libraries, frameworks, services and platforms, even entire languages - one learns to be wary of critical dependencies. Every new project offers convenience in exchange for you giving up control of part of the software stack, and the power dynamic is often exploited sooner or later as revenue source. You can't trust anything that becomes irreplaceable, or that you can't write it (or at least understand it) yourself.
- jauco 5mo agoAlso the release that drops typescript transforms: https://github.com/nodejs/typescript/issues/51 https://github.com/nodejs/typescript/issues/51 (I’m not disagreeing to remove it. It just took me a while to find out what happened to it)
- pier25 5mo agoInitially it didn't make sense to me... but it looks like type striping is really the way to go for future TS. There's the "types as comments" proposal[1] which could even land on browsers one day. I started using the erasableSyntaxOnly setting in my tsconfig to get ready for this. [1] https://tc39.es/proposal-type-annotations/ https://tc39.es/proposal-type-annotations/
- actionfromafar 5mo agoAnd here I thought that it was about https://github.com/temporalio/sdk-typescript https://github.com/temporalio/sdk-typescript
- justinclift 4mo agoYeah. Looks like they picked a name already well known for something completely different. :(
- emilfihlman 5mo agoIt's so sad that node refuses to add websocket server support. Adding websocket would simplify stuff tremendously, as well as make deployments much, much more secure.
- skybrian 5mo agoWhy more secure? I see that Deno has WebSockets, but I've never used them: https://docs.deno.com/api/web/~/WebSocket https://docs.deno.com/api/web/~/WebSocket
- owebmaster 5mo ago"ws" is regularly the only package in my package.json
- emilfihlman 5mo agoSame. Without that I could remove all npm dependence, which would greatly improve security.
- skybrian 5mo agoIf you're not tied to the ecosystem, why not switch to Deno?
- emilfihlman 4mo agoActually, maybe you are correct and I should.
- emilfihlman 5mo agoBecause it entirely removes dependency for external libraries and package repositories, like npm, for basic internet interoperability. I (also) basically use only one package: ws.
- sedatk 5mo agoOff-topic but, Safari seems to be the only browser that doesn't support Temporal yet. It looks like the only blocker for adopting it on web. https://caniuse.com/?search=Temporal https://caniuse.com/?search=Temporal
- owebmaster 5mo agoNo but Google wants to control the Web (they do).
- tracker1 5mo agoShould be easy enough to detect/polyfill... if (!globalThis.Temporal) { // await import('temporal-polyfill/global'); await import('https://cdn.jsdelivr.net/npm/temporal-polyfill@0.3.0/global.min.js'); }
- jdthedisciple 5mo ago> Upsert (https://github.com/tc39/proposal-upsert https://github.com/tc39/proposal-upsert): [Weak]Map.prototype.getOrInsert(), [Weak]Map.prototype.getOrInsertComputed() Their usage of upsert appears different than I was used to: Me: Upsert = Update or Insert Them: Upsert = Get or Insert
- bakkoting 5mo agoThe proposal used to do more thing and we didn't change the URL after we ultimately arrived at this set of APIs.
- OptionOfT 5mo agoReminds me of the weird C++ map operator[] behavior. If you use that operator and the value doesn't exist, it'll default create one and return a reference to that. And as I'm writing this I realize why... references cannot be `null`.
- rtpg 5mo agowhat is the value of an "update or insert" call on `Map`? is that not just set? `getOrInsert` here seems to be the Python "set_default" method on dicts, which is very useful at avoiding tedium in some basic data munging
- AdieuToLogic 5mo ago> what is the value of an "update or insert" call on `Map`? It gives a caller the option of alternate logic based on the existence, or lack thereof, of a value. > is that not just set? No. The semantics of a "set" operation would overwrite an existing entry (if one exists).
- Klaster_1 5mo agoI do this all the time, getOrInsert would come really handy: you need something from a Map-backed storage, but the value may be unset, so you first check if it's undefined, set the default value, and then use that. Example: update(store, (draft) => { if (!draft.alertConfigurations.has(req.params.clusterId)) draft.alertConfigurations.set(req.params.clusterId, new Map()); const clusterAlerts = draft.alertConfigurations.get(req.params.clusterId); req.body.forEach((alert) => clusterAlerts.set(alert.id, { ...alert, predefined: false })); });
- jollymonATX 5mo ago(Now with Malware) I joke! It already had malware.
- OptionOfT 5mo agoNode v26 doesn't ship with corepack anymore. Annoying, it was a decent way to get pnpm in-band.
- bodash 5mo agoThis is a surprise. And they still haven't included corepack as an official instruction on the nodejs.org download page. Is corepack a failed experiment?