Top
Best
New

Posted by KolmogorovComp 12 hours ago

Bonsai: Janestreet's UI Library(github.com)
258 points | 100 comments
flufluflufluffy 10 hours ago|
> And because Bonsai is written in OCaml, it becomes possible to use the same language and types on both the backend and frontend.

Finally! I was waiting for this to become possible!

kccqzy 1 hour ago||
Why wait? It’s been possible since forever. I wrote UI in OCaml eight years ago. https://github.com/kccqzy/drawing-guessing/blob/master/clien...
deciduously 7 hours ago|||
There's also Fable for F# but I believe this commenter is being sarcastic. Javascript is a common backend language.
rhgraysonii 5 hours ago|||
A really great place to reach for this is Elixir/Phoenix now that the set theoretic type system is in place with LiveView. I have been doing some pretty large/complex codebases gradually working towards fully integrating working this way for the past 5 years and it has been great.
philipwhiuk 9 hours ago|||
Similar attempts include Scalajs.

The general challenge becomes integrating the fractional front-end code written in your backend-language that compiles to JS with the rest of the JS ecosystem.

JaneStreet have a love of writing their own stuff from scratch so it doesn't apply to them but it might to you.

Hence most people end up with frontend-as-backend rather than backend-as-frontend.

vips7L 4 hours ago|||
KotlinJs and ClojureJs too. You always end up having to write wrappers or dealing with problems that would just work if you just used normal js/ts.
gleenn 1 hour ago||
Clojurescript not ClojureJs, and Typescript doesn't run in the browser, it has the exact same issues/limitations: it must be compiled to JavaScript first.
warpech 1 hour ago||
Compiling TypeScript is just stripping out types
Stratoscope 1 hour ago||
That is true only if you confine your TS code to be pure JS plus type annotations.

There are TS constructs that require compilation into equivalent JS, such as enums and namespaces.

hermanradtke 46 minutes ago|||
Are there any other?

Namespaces are heavily discouraged. Some teams still use enigma but most people in the know us unions of strings.

I know the TS team regrets enums and I have not seen any plans for adding additional keywords that break type stripping.

igl 28 minutes ago||||
absolutely nobody used those outside of a language demo. We also got --erasableSyntaxOnly last year to remove them from the language. The TS team considers them “mistakes“ for a really long time now
p_l 29 minutes ago|||
"fortunately" we can load swc compiled to wasm to deal with that.
nobleach 8 hours ago||||
Yup, and Clojure/ClojureScript!
lbourdages 9 hours ago||||
Couldn't WASM solve that problem once and for all? Is there some limitation that WASM has that JS doesn't?

Disclaimer: I am very inexperienced at front-end development.

danielheath 8 hours ago|||
> Is there some limitation that WASM has that JS doesn't?

You need a JS trampoline to call your WASM and make browser primitives available to it, and IIRC calls into browser code incur some extra overhead, but those are pretty manageable.

Additionally: for high level languages, source code is _much_ smaller than compiled binaries. If your initial needs are simple, your users are likely downloading more than 10x as much code.

applfanboysbgon 7 hours ago|||
WASM does not (yet) have access to the DOM or web APIs, meaning every direct interaction with the browser must first go through JS interop anyways, with a resulting performance penalty. There are proposals, and maybe we'll see it happen by 2035, but as of now WASM is best suited for heavier workloads where the edge in application performance outweighs the cost of JS interop with the browser rather than being a universal solution.
raphinou 9 hours ago|||
Such attempts are quite common. Some I remember:

https://ocsigen.org/ in Ocaml too

https://websharper.com/ for fsharp and csharp. Really good when I used in in fsharp

Maybe https://melange.re/v7.0.1/ too? (Not sure)

vintermann 7 hours ago||
I took this as a joke in reference to the popularity of JavaScript on the backend for the last two decades.
reactordev 7 hours ago||
that's because most people's intro to CS was how to build a webpage.
zero_bias 1 hour ago||
Modern web development is more like computer alchemy
TacticalCoder 6 hours ago||
> Finally! I was waiting for this to become possible!

Sarcasm?

Do you want to have a talk as to why JaneStreet wasn't built on JavaScript?

bsmith89 4 hours ago||
There's a great Signals and Threads (Jane Street's Podcast) episode about this work: https://signalsandthreads.com/building-a-ui-framework/
strongly-typed 3 hours ago|
A framing from that podcast that helped me better understand the role of Bonsai is that it's really a framework for building incremental distributed state machines.
frutiger 3 hours ago|||
This framing is also in the post. From the readme:

> Bonsai itself -- this library -- is actually more generic than the above makes it sound. It allows you to build general-purpose incremental, composable state machines. Bonsai_web builds on top of that core library, specializing it for interactive browser-based UIs, but we also have Bonsai_term for building interactive terminal-based UIs.

dtornabene 2 hours ago|||
The docs are a bit sparing but if you read the source its pretty cool to see how they did this.
chrischen 9 hours ago||
Curious how this compares to Melange which is used by Ocaml shops as well to double up on Ocaml for both front and backend (ahrefs being the major user and sponsor). Does this mean giving up a lot of the JS ecosystem (React, graphql, etc)?
sroerick 1 hour ago|
My understanding is that js_of_ocaml has been around longer and likely has a stronger ecosystem, but Melange was designed more specifically to play nice with the JS ecosystem.
rw2 8 hours ago||
I am sure it's very performant, but to me it's extremely ugly; Surely someone can fix margins and still have it be performant.
pgwhalen 8 hours ago||
I’m no UI expert - what’s wrong with the margins?
LooseEquipment 8 hours ago||
inconsistent and maybe too tight, but I would think those are issues with the sample UIs and not this library
OneDeuxTriSeiGo 7 hours ago|||
FWIW if you listen to Signals and Threads (the Jane Street podcast) they talk about this.

They have dedicated UX designers who do relatively little code but focus entirely on making the UX as optimal for the traders as possible and one of them was on an episode.

They talked about how most of the normal UX rules for SW go out the window because quants and traders have such different needs than "normal software".

chrisweekly 5 hours ago|||
This matters. Beyond performance (a universal good), the definition of "good" UX is strictly dependent on the user. Fintech platforms for traders who open a multi-window thick client application(s) and spend hours in it every day have little in common with consumer mobile apps designed to hold your attention for maybe a minute. It's mind-bogglingly lazy to choose something like MUI (Material UI) as if it were some kind of reasonable foundation irrespective of context.
jackcarter 7 hours ago|||
Is there any professional software that wouldn't benefit from high information density? Most software design is optimized for the non-users who have to approve it.
jacobolus 2 hours ago|||
You can have high information density and still not have words running into each-other. Taking all of the space out from around text and information graphics makes them less legible, even for experienced "power users".

I think the goal here is more an aesthetic of being for "serious traders only" rather than a UI optimized for speed and clarity. The UI designers probably have little choice but to match the preferences of the user group though, even when those preferences are empirically detrimental.

ambicapter 6 hours ago||||
"non-users" are also big targets for software. If you run a software business, chances are you want people who've never used your software to start using your software. In that case, discoverability trumps high information density.
tjoff 4 hours ago||
It only adds discoverability for the things that fit the screen. In other words, you have to make it simple. I.e. the lazy way to make something "user-friendly", do as little as possible and force the user to adapt to your ways instead.
RugnirViking 5 hours ago|||
this - most of the internal software at my job that's actually important is very dense, with keyboard navigation and shortcuts. The ones that somebody makes to sell themselves to upper management while angling for a promotion look very pretty, and never get used.

And yet, we make such beautiful and vacant software ourselves for our clients, because again, its b2b, so you aren't selling to the people who actually have to use the software. Im glad at least we arent forced that often to use specific internal tools, the better ones just get adopted organically

dmoy 2 hours ago||
Fair point

I guess JS doesn't have to care about this at all because they're not selling their UI to others, just making it in house for in house use

kfse 1 hour ago||||
A lot is said in this thread about user preferences for info density, but it is really a lot more than preference. there's also a big component of it that is user productivity focused. Info-dense UIs simply require a lot less scrolling around and pagination to look at relevant data. For example the ability to look at multiple charts side by side instead of having to scroll one chart after another into position enables users to spot differences that they wouldn't otherwise see.
pgwhalen 7 hours ago||||
From experience I can say that traders prefer extraordinarily little whitespace in their UIs.
troupo 7 hours ago||||
I'd kill for tight UIs now. Everything insists on having 15000-mile wide margins, and at most two items visible on an 8K screen.

We are at a point when TUIs from 1990s running in 12" screens with at best a 480x240 resolution display more info than almost anything we have now.

steve_adams_86 58 minutes ago||
This makes me think about the bizarre UI regressions in macOS in the last few years. I’ve got this giant, beautiful display and somehow it becomes less rather than more useful over time due to the software it’s presenting.
stronglikedan 3 hours ago||||
Margins on an info dashboard are wasted space.
ctxc 7 hours ago|||
Probably because they skew towards higher information density
cachius 6 hours ago||
What does JaneStreet do besides sponsoring nerdy Youtube channels and writing UI libraries?
markoman 2 hours ago||
Jane Street made it's way into today's Wall St Journal for its quantitative prowess and hiring of Math PhD's. What was stunning to hear was that their 2nd quarter profits were a record $10.3 billion, nearly double that of Goldman Sachs and Morgan Stanley (much larger firms).
RugnirViking 5 hours ago|||
They're a trading firm that hires really clever people to use math to trade. Their strategies are, presumably, very complicated and ever changing, and secrecy about them is the point - you get bigger margins for longer if people don't learn about your 'one weird trick' (that and also that there is presumably another side to your trades losing out on upside, and they might not be best pleased to learn about it.
rudedogg 5 hours ago||
> really clever people

Sam Bankman-Fried and his League of Legend rankings would like a word

affyboi 3 hours ago|||
They’re a market maker
morkalork 5 hours ago|||
Print money?
andor 4 hours ago||
Governments print money, high frequency traders extract money. They would say that they provide liquidity to the market as a service.
morkalork 3 hours ago||
hn: come for the tech news, stay for the pedantry
phplovesong 6 hours ago||
[flagged]
monooso 4 hours ago|||
This doesn't seem quite as clear-cut as you're making out.

The Securities and Exchange Board of India (SEBI) have accused Jane Street (JS) of market manipulation, JS claims it was legitimate arbitrage, and the case is still ongoing [1].

As I understand it, the ban only applied to Indian securities (not Asian markets as a whole), and was lifted back in July 2025 after JS paid ~$560 million (the alleged ill-gotten gains) into an escrow fund. They don't appear to have resumed trading, though [2].

[1]: https://www.reuters.com/legal/government/us-trading-firm-jan...

[2]: https://www.reuters.com/sustainability/boards-policy-regulat...

hatred 5 hours ago||||
The above might be too far-fetched as it only applied to India? They did pay a fine to the regulator and resumed trading (might not be the same strategy though)

To OP’s original question, they made $20B last year and have a niche in several financial products

phplovesong 5 hours ago||
Yes, the fraud was done in india. Why does that matter?
fn-mote 2 hours ago||
“Banned from the Asian markets” was the original claim. The actual fact is: banned from Indian markets, with the ban now lifted.
wbl 4 hours ago||||
Trading the underlying to offset your derivative position isn't fraud.
vovavili 4 hours ago|||
>Janestreet PR team is downvoting. Like always, radio silence and just downvotes.

You're being downvoted for having a needlessly confrontational underinformed hot take on a quant trading firm that is essentially a market maker.

user2342 7 hours ago||
Interesting! What are Bonsai's dependencies? I use OCaml but - so far - none of Janestreets libraries etc.
LeonidasXIV 6 hours ago|
Basically most of Jane Street's published code[0] via its dependency on Core.

[0]: https://github.com/janestreet/bonsai/blob/f31661450eb133fe89...

Schlagbohrer 8 hours ago||
Can someone who understands web UI programming tell me if this would be good for my local agent to use to produce HTML based reports and outputs for me? Or for TUI outputs?
tikhonj 5 hours ago||
The main thing that Bonsai gets you is a nice programming model for making your UIs interactive. If you're mostly producing static reports (with maybe some basic interactive visualization widgets or something), it will not get you much over generating some variant on HTML + JS.

It makes more sense for applications where you have complex interactive logic in the UI, with a lot of different components that need to control and display some shared state.

derdi 7 hours ago|||
There was this submission two months ago: https://news.ycombinator.com/item?id=48365904 . Basically they have a TUI frontend for the same thing. And the blog post says: "Bonsai_term would feel familiar to anyone who’d ever done web development here, and it had the huge advantage of being especially amenable to AI assistance. It was actually somewhat of a mystery to us how good the models were at writing Bonsai_term code, given how relatively obscure it is [...]"
antonvs 7 hours ago||
Probably not, because your agent won’t have much info about this tool in its training set.
disconcision 10 minutes ago||
i maintain a codebase that uses Bonzai (https://github.com/hazelgrove/hazel/); agent based development works just fine, though probably a bit more token churn
xvilka 11 hours ago||
Looks like it's Web-only, no mention of the native UI support (terminal UI excluded).
avsm 10 hours ago|
There's a full terminal implementation of Bonsai as well. I actually use it in my personal workflow these days to manage my contacts database! https://anil.recoil.org/notes/aoah-2025-9
abtinf 5 hours ago|||
Seconding the sibling comment - what are you using to run your personal site? It is very nice.
aquariusDue 9 hours ago|||
Unrelated but what do you use to manage your personal website? I love how everything is interconnected.
avsm 5 hours ago||
Custom infrastructure; I use my site as a playground for various things over the years. It ran as the first MirageOS unikernel for many years, and recently it's been running on a zero-allocation OxCaml webserver https://anil.recoil.org/notes/oxcaml-httpz to help me get to grips with the new extensions.
ubercore 9 hours ago||
Not sure why, but reminds me of Fog Creek's Wasabi.
hahahaa 11 hours ago|
Oh it needs a userland trampoline!

> JSOO does not have tail call optimization

debugnik 5 hours ago|
Jsoo supports self-recursive and mutually recursive tail calls, but for general tail calls it would need to trampoline every single call, since the only major browser with proper tail calls is Safari.
More comments...