frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Temporal: A nine-year journey to fix time in JavaScript

https://bloomberg.github.io/js-blog/post/temporal/
164•robpalmer•2h ago•68 comments

Entities enabling scientific fraud at scale are large, resilient, growing (2025)

https://doi.org/10.1073/pnas.2420092122
175•peyton•4h ago•79 comments

Making WebAssembly a first-class language on the Web

https://hacks.mozilla.org/2026/02/making-webassembly-a-first-class-language-on-the-web/
103•mikece•13h ago•40 comments

Where Some See Strings, She Sees a Space-Time Made of Fractals

https://www.quantamagazine.org/where-some-see-strings-she-sees-a-space-time-made-of-fractals-2026...
46•tzury•1h ago•2 comments

BitNet: 100B Param 1-Bit model for local CPUs

https://github.com/microsoft/BitNet
206•redm•5h ago•108 comments

Show HN: Klaus – OpenClaw on a VM, batteries included

https://klausai.com/
32•robthompson2018•1h ago•18 comments

Elevated errors on login with Claude Code

https://status.claude.com/incidents/jm3b4jjy2jrt
44•zurfer•2h ago•28 comments

Wiz joins Google

https://www.wiz.io/blog/google-closes-deal-to-acquire-wiz
78•aldarisbm•2h ago•53 comments

Lego's 0.002mm specification and its implications for manufacturing (2025)

https://www.thewave.engineer/articles.html/productivity/legos-0002mm-specification-and-its-implic...
269•scrlk•4h ago•210 comments

Launch HN: Prism (YC X25) – Workspace and API to generate and edit videos

https://www.prismvideos.com
14•aliu327•1h ago•6 comments

Faster asin() was hiding in plain sight

https://16bpp.net/blog/post/faster-asin-was-hiding-in-plain-sight/
114•def-pri-pub•3h ago•55 comments

Launch HN: Sentrial (YC W26) – Catch AI Agent Failures Before Your Users Do

https://www.sentrial.com/
9•anayrshukla•1h ago•5 comments

AI Agent Hacks McKinsey

https://codewall.ai/blog/how-we-hacked-mckinseys-ai-platform
209•mycroft_4221•7h ago•87 comments

Show HN: Open-source browser for AI agents

https://github.com/theredsix/agent-browser-protocol
28•theredsix•3h ago•14 comments

The MacBook Neo

https://daringfireball.net/2026/03/the_macbook_neo
35•etothet•6h ago•150 comments

Show HN: Vanilla JavaScript refinery simulator built to explain job to my kids

https://fuelingcuriosity.com/game.html
19•fuelingcurious•48m ago•13 comments

Show HN: I built an ISP infrastructure emulator from scratch with a custom vBNG

https://aether.saphal.me/dashboard/default
16•saphalpdyl•4h ago•0 comments

Fungal Electronics

https://arxiv.org/abs/2111.11231
8•byt3h3ad•51m ago•2 comments

Swiss e-voting pilot can't count 2,048 ballots after decryption failure

https://www.theregister.com/2026/03/11/swiss_evote_usb_snafu/
34•jjgreen•4h ago•76 comments

Building a TB-303 from Scratch

https://loopmaster.xyz/tutorials/tb303-from-scratch
179•stagas•3d ago•69 comments

Searching for the Agentic IDE

https://twitter.com/karpathy/status/2031616709560610993
4•bigwheels•1h ago•0 comments

PeppyOS: A simpler alternative to ROS 2 (now with containers support)

https://peppy.bot/
56•Ekami•3d ago•18 comments

Zig – Type Resolution Redesign and Language Changes

https://ziglang.org/devlog/2026/#2026-03-10
362•Retro_Dev•16h ago•199 comments

Why the global elite gave up on spelling and grammar

https://www.wsj.com/lifestyle/jeffrey-epstein-files-bad-grammar-spelling-trump-ellison-dorsey-gat...
39•matthieu_bl•2h ago•98 comments

Writing my own text editor, and daily-driving it

https://blog.jsbarretto.com/post/text-editor
185•todsacerdoti•15h ago•101 comments

Visualizing Ukkonen's Suffix Tree Algorithm

https://www.abahgat.com/blog/visualizing-ukkonens-algorithm/
9•gsky•1d ago•2 comments

Cloudflare crawl endpoint

https://developers.cloudflare.com/changelog/post/2026-03-10-br-crawl-endpoint/
433•jeffpalmer•19h ago•165 comments

Bypassing PatchGuard on Windows x64 (2005)

http://uninformed.org/index.cgi?v=3&a=3&t=txt
11•davikr•3d ago•1 comments

Yann LeCun raises $1B to build AI that understands the physical world

https://www.wired.com/story/yann-lecun-raises-dollar1-billion-to-build-ai-that-understands-the-ph...
572•helloplanets•1d ago•464 comments

Whistleblower claims ex-DOGE member says he took Social Security data to new job

https://www.washingtonpost.com/politics/2026/03/10/social-security-data-breach-doge-2/
485•raldi•3h ago•200 comments
Open in hackernews

Temporal: A nine-year journey to fix time in JavaScript

https://bloomberg.github.io/js-blog/post/temporal/
164•robpalmer•2h ago

Comments

jon_kuperman•2h ago
What a journey!
bnb•1h ago
Can't wait for it to land in the server-side runtimes, really the last thing preventing me from adopting it wholesale.
apaprocki•1h ago
Node 26! Only a matter of time... :)
CharlesW•39m ago
FWIW, I've been using it server-side via the js-temporal polyfill for some time, no issues.
samwho•1h ago
Thanks for linking to my silly little quiz in the article! :)
patchnull•1h ago
The most underappreciated design decision in Temporal is making everything immutable. Half the Date bugs I have debugged over the years come from someone calling setMonth() or setHours() on a Date object that was shared across call sites. The other half come from the implicit local timezone conversion in the Date constructor. Temporal fixes both by forcing you to be explicit about timezones through ZonedDateTime vs PlainDate, and by returning new objects instead of mutating. Nine years is a long time, but given how many TC39 proposals ship half-baked and then need follow-up proposals to fix the gaps, I would rather they got this one right.
virgil_disgr4ce•1h ago
I think that actually may be the MOST appreciated design decision in Temporal ;) either way, I'm also a big fan
ndr•1h ago
Immutability is underrated in general. It's a sore point every time I have to handle non-clojure code.
recursive•1h ago
Given the ubiquity of react, I think immutability is generally rated pretty appropriately. If anything, I think mutability is under-rated. I mean, it wouldn't be applicable to the domain of Temporal, but sometimes a mutable hash map is a simpler/more performant solution than any of the immutable alternatives.
LunaSea•1h ago
Props data passed to React itself isn't immutable which is probably one of the missing bricks.

React only checks references but since the objects aren't immutable they could have changed even without the reference changing.

Immutability also has a performance price which is not always great.

recursive•15m ago
Yes, you can mutate props. But no, it's probably not going to do what you want if you did it intentionally. If react added Object.freeze() (or deepFreeze) to the component render invoker, everything would be the same, except props would be formally immutable, instead of being only expected to be immutable. But this seems like a distinction without much of a difference, because if you just try to use a pattern like that without having a pretty deep understanding of react internals, it's not going to do what you wanted anyway.
kccqzy•24m ago
React doesn’t really force you to make your props immutable data. Using mutable data with React is allowed and just as error prone as elsewhere. But certainly you are encouraged to use something like https://immutable-js.com together with React. At least that’s what I used before I discovered ClojureScript.
Waterluvian•1h ago
The worst are methods that both mutate and return values.

I know this gets into a complex land of computer science that I don’t understand well, but I wish I could define in TypeScript “any object passed into this function is now typed _never_. You’ve destroyed it and can’t use it after this.” Because I sometimes want to mutate something in a function and return it for convenience and performance reasons, but I want you to have to reason about the returned type and never again touch the original type, even if they are the same object.

ecshafer•1h ago
ruby has the convention of ! for dangerous destructive or mutating methods. This is something that I wish would spread around a bit.

For example:

# Original array

array = [1, 2, 3]

# Using map (non-destructive)

new_array = array.map { |x| x * 2 }

# new_array is [2, 4, 6]

# array is still [1, 2, 3] (unchanged)

# Using map! (destructive)

array.map! { |x| x * 2 }

# array is now [2, 4, 6] (modified in-place)

wiseowise•1h ago
> convention

Is the keyword. Anything that should never be broken isn’t a convention. There’s no better convention than compiler error.

goatlover•34m ago
Because Ruby is a dynamic language which mutates state. That isn't considered wrong or bad in those kinds of languages, just a way to make sure the programmer knows they're doing that. Not every PL tries to live up to the ideals of Haskell.

If you don't want an object mutated in Ruby, you can freeze it.

magnio•58m ago
What you are describing is linear (or affine) types in academic parlance, where a value must be used exactly (or at most) once, e.g., being passed to a function or having a method invoked, after which the old value is destroyed and not accessible. Most common examples are prolly move semantics in C++ and Rust.
vimwizard•56m ago
Rust ownership model ("stacked borrows" I believe it's called) is basically this
LoganDark•13m ago
Actually there's tree borrows now. https://www.ralfj.de/blog/2023/06/02/tree-borrows.html
NooneAtAll3•8m ago
I think it's the other way around - he's projecting rust as what he wants
darick•35m ago
This is possible with the asserts x is y pattern no?

https://www.typescriptlang.org/play/?#code/C4TwDgpgBAYg9nKBe...

Waterluvian•28m ago
I think the sticking points are:

1. You cannot return anything (say an immutable result that has consumed the input)

Okay, so don't return anything, just mutate the original. Except:

2. You cannot mutate the original, return nothing, but the mutated original isn't a subset of the original. For example: https://www.typescriptlang.org/play/?#code/GYVwdgxgLglg9mABB...

darick•3m ago
Hmm, I see, yes it's quite limited.
Aurornis•25m ago
> but I wish I could define in TypeScript “any object passed into this function is now typed _never_.

Having explicit language to differentiate between pass by reference and pass by value avoids this confusion. It requires a little more thought from the programmer but it’s really minimal once you internalize it.

Rust takes this a step further with an explicit ownership and borrowing model. The compiler will refuse your code if you try to write something that that violates the borrow checker. This is endlessly frustrating to beginners but after adapting your mind to ownership safety you find yourself thinking in the same way in other languages.

I always found real-world JavaScript codebases frustrating because there was so much sharing that wasn’t entirely intentionally. It only got fixed when someone recognized a bug as a result.

Waterluvian•23m ago
Yeah exactly. That's what I've loved about Rust and hated about real-world JS. I end up having to reason about an entire case that might not be real at all: does this function mutate what I'm passing it? Should I eagerly deep copy my object? UGH.
deepsun•58m ago
They seem to have taken it from Joda time that revolutionized time in java 10+ years ago. Sadly no mention of Joda.
OptionOfT•45m ago
> The other half come from the implicit local timezone conversion in the Date constructor.

Outlook at that issue even in their old C++ (I think) version.

You're in London, you save your friend's birthday as March 11th.

You're now in SF. When is your friend's birthday? It's still all-day March 11th, not March 10th, starting at 5PM, and ending March 11th at 5PM.

WorldMaker•3m ago
If your friend lives in London it may be useful to have that associated timezone so that you can be sure to message them that day in their timezone. They might better appreciate a message from SF sent on March 10th at 9PM "early that morning in London" than March 11th at 9PM "a day late".

A lot of that gets back to why Temporal adds so many different types, because there are different uses for time zone information and being clear how you shift that information can make a big difference. (A birthday is a PlainDate at rest, but when it is time to send them an ecard you want the ZonedDateTime of the recipient's time zone to find the best time to send it.)

ravenstine•23m ago
When I write JavaScript, I make as many things immutable as I can. Sometimes it adds verbosity and leads to less efficient computational patterns, but overall I believe I run into far fewer bugs that are hard to make sense of. There are things about the design of Temporal I don't really like, but immutability was a solid move.

What I don't understand is why they had to make string formatting so rigid. Maybe it has to do with internationalization? I'd have liked if it included a sort of templating system to make the construction of rendered date-time strings much easier.

kandros•21m ago
I remember the first time I got in touch with Elixir and immutability as a core principle. It changed the way I wrote JavaScript since
virgil_disgr4ce•1h ago
Pretty big fan of Temporal. Been using the polyfill for a while. Very nice to use a modern, extremely well thought-through API!
normie3000•1h ago
No mention of JodaTime?
sharktheone•1h ago
Very happy for it finally being there!
nekevss•1h ago
Super happy to see Temporal accepted!

Congrats to all the champions who worked super hard on this for so long! It's been fun working on temporal_rs for the last couple years :)

plucas•1h ago
Would have been interesting to connect back to Java's own journey to improve its time APIs, with Joda-Time leading into JSR 310, released with Java 8 in 2014. Immutable representations, instants, proper timezone support etc.

Given that the article refers to the "radical proposal" to bring these features to JavaScript came in 2018, surely Java's own solutions had some influence?

apaprocki•1h ago
I would characterize it more as Joda likely informed Moment.js, which better informed TC39 because it was within the JavaScript ecosystem. As we discussed in plenary today when achieving consensus, every programming language that implements or revamps its date time primitives has the benefit of all the prior art that exists at that instant. TC39 always casts a wide net to canvas what other ecosystems do, but isn't beholden to follow in their footsteps and achieves consensus on what is best for JavaScript. So my view is this more represents what the committee believes is the most complete implementation of such an API that an assembled group of JavaScript experts could design over 9 years and finalize in 2026.
mrkeen•38m ago
Yep, JavaScript got the bad version from Java too!

https://news.ycombinator.com/item?id=42816135

zvqcMMV6Zcr•1h ago
> Safari (Partial Support in Technology Preview)

Safari confirmed as IE Spiritual successor in 2020+.

cubefox•1h ago
2026 A.D., still no support for native date pickers in mobile Safari.
CharlesW•35m ago
Safari for iOS got native date pickers in 2012, and desktop Safari got them in 2021.
redbell•1h ago
Oh, for a second, TeMPOraL (https://news.ycombinator.com/user?id=TeMPOraL) came to my mind!
ChrisArchitect•1h ago
A good article and discussion from January:

Date is out, Temporal is in

https://news.ycombinator.com/item?id=46589658

ChrisArchitect•1h ago
Aside: Bloomberg JS blog? ok.
deepsun•54m ago
Bloomberg has a pretty large software engineering department, including a lot of offshore contractors. Similar to Walmart Labs that does cool stuff as well, despite being part of a retail chain (retail industry typically sees SWEs a cost, not asset).
ChrisArchitect•45m ago
oh, just meant it was a new tech blog from them.
wiseowise•52m ago
What surprises you? Terminal UI is written in JS using Chromium. It’s not just plain Chromium, but it’s still funny that it’s pretty much same approach as universally (according to HN and Reddit) hated Electron.

https://youtu.be/uqehwCWKVVw?is=wBijGwdD2k2jIOu7

philipallstar•51m ago
> have to agree on what "now" means, even when governments change DST rules with very little notice.

I didn't spot how Temporal fixes this. What happens when "now" changes? Does the library get updated and pushed out rapidly via browsers?

nekevss•46m ago
Typically time zone data is updated in IANA's time zone database. That data would need to be updated in the implementation. In this case, the browser would need to update their time zone data.
VanCoding•48m ago
A big step in the right direction, but I still don't like the API, here's why: Especially in JavaScript where I often share a lot of code between the client and the server and therefore also transfer data between them, I like to strictly separate data from logic. What i mean by this is that all my data is plain JSON and no class instances or objects that have function properties, so that I can serialize/deserialize it easily.

This is not the case for Temporal objects. Also, the temporal objects have functions on them, which, granted, makes it convenient to use, but a pain to pass it over the wire.

I'd clearly prefer a set of pure functions, into which I can pass data-only temporal objects, quite a bit like date-fns did it.

qcoret•46m ago
All Temporal objects are easily (de)serializable, though. `.toString` and `Temporal.from` work great.
VanCoding•40m ago
That's not what I mean. Even though it is serializable, it's still not the same when you serialize/deserialize it.

For example `JSON.parse(JSON.stringify(Temporal.PlainYearMonth.from({year:2026,month:1}))).subtract({ years: 1})` won't work, because it misses the prototype and is no longer an instance of Temporal.PlainYearMonth.

This is problematic if you use tRPC for example.

gowld•24m ago
Would a plain data object be an instance of PlainYearMonth?

If not, that regardless of being plain data or a serialized object with functions, you'd still need to convert it to the type you want.

flyingmeteor•23m ago
You would need to use the `reviver` parameter of `JSON.parse()` to revive your date strings to Temporal objects. As others have said, it's a simple `Temporal.from()`

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

cyral•9m ago
I've been doing this for so long and never knew there was a reviver param, thanks - that is super useful.
perfmode•30m ago
This is a real pain point and I run into the same tension in systems where data crosses serialization boundaries constantly. The prototype-stripping problem you're describing with JSON.parse/stringify is a specific case of a more general issue: rich domain objects don't survive wire transfer without a reconstitution step.

That said, I think the Temporal team made the right call here. Date-time logic is one of those domains where the "bag of data plus free functions" approach leads to subtle bugs because callers forget to pass the right context (calendar system, timezone) to the right function. Binding the operations to the object means the type system can enforce that a PlainDate never accidentally gets treated as a ZonedDateTime. date-fns is great but it can't give you that.

The serialization issue is solvable at the boundary. If you're using tRPC or similar, a thin transform layer that calls Temporal.Whatever.from() on the way in and .toString() on the way out is pretty minimal overhead. Same pattern people use with Decimal types or any value object that doesn't roundtrip through JSON natively. Annoying, sure, but the alternative is giving up the type safety that makes the API worth having in the first place.

VanCoding•19m ago
It's not that much about type safety. Since TypeScript uses duck typing, a DateTime could not be used as a ZonedDateTime because it'd lack the "timezone" property. The other way around, though, it would work. But I wouldn't even mind that, honestly.

The real drawback of the functional approach is UX, because it's harder to code and you don't get nice auto-complete.

But I'd easily pay that price.

chrisweekly•12m ago
It should still be possible to continue using date-fns (or a similar lib) to suit your preference, right?
VanCoding•6m ago
yes, sure. probably there will even pop up a functional wrapper around the temporal API occasionally. But would've been nice if it was like this from the start.
hungryhobbit•32m ago
From the article:

    const now = new Date();
The Temporal equivalent is:

    const now = Temporal.Now.zonedDateTimeISO();
Dear god, that's so much uglier!

I mean, I guess it's two steps forward and one step back ... but couldn't they have come up with something that was just two steps forward, and none back ... instead of making us write this nightmare all over the place?

Why not?

    const now = DateTime();
darepublic•24m ago
My playbook for JavaScript dates is.. store in UTC.. exchange only in UTC.. convert to locale date time only in the presentation logic. This has worked well for me enough that Im skeptical of needing anything else
lpa22•12m ago
Same here, this is the way
NooneAtAll3•5m ago
why UTC and not epoch then?
andrewl-hn•3m ago
The only time you need local dates is for scheduling. Stuff like “Report KPIs for each shift. Shifts start at 8:00 local time.”, or “send this report every day at 10:00 local time”, or “this recurring meeting was created by user X while they were in TimeZone Z, make sure meetings follow DST”.

Outside of scheduling UTC is the way.

kemayo•13m ago
> Developers would often write helper functions that accidently mutated the original Date object in place when they intended to return a new one

It's weird that they picked example code that is extremely non-accidentally doing this.

wpollock•11m ago
> "It was a straight port by Ken Smith (the only code in "Mocha" I didn't write) of Java's Date code from Java to C."

This is funny to me; Java's util.Date was almost certainly a port of C's time.h API!

NooneAtAll3•10m ago
so Temporal is copying cpp's std::chrono?
andrewl-hn•8m ago
More like a copy of Java’s JSR310, which in turn took many years to get right.