Jane Street Blog
Jane Street Blog Homepage
OCaml / F#FPGA / HDLAI / MLSoftware / engineering practiceEngineering blogs
- Posts
- 268 from 25 Apr 2008 to 13 Oct 2026
- Posting
- weekly (26 in the last year)
- Kind
- company blog
- Feed
- https://blog.janestreet.com/feed.xml
2026 24
- Flex Model: an event-driven feature engineering system
- Building and testing a config management orchestrator for Windows
- Scaling and benchmarking a critical message bus using a new indexing strategy
- How recurring network maintenance exposed 6 bugs
- Results from the ASIC puzzle
- A resilient kernel log reporter
- A FUSE server for our in-house storage backend
- What the interns have wrought, special jumbo 2026 edition
- What the SP interns have wrought, 2026 edition
- Trading off compute for memory with activation checkpointing
- What the TDOE interns have wrought, 2026 edition
- Mitigating memorization in LLMs
- Can you use autoregressive diffusion to generate market data?
- A study of sequence weighting at scale
- Can you design a chip? Announcing the protocol emulator ASIC competition
- Can you reverse engineer an ASIC?
- Using OxCaml to implement type-safe reference counting between OCaml and Python
- Formal methods and the future of programming
- strace-ui, Bonsai_term, and the TUI renaissance
- Using group theory to explore the space of positional encodings for attention
- Can you reverse engineer our neural network?
- Results from the Advent of FPGA Challenge
- I design with Claude more than Figma now
- Fun with Algebraic Effects - from Toy Examples to Hardcaml Simulations
2025 7
2024 4
2023 7
2022 8
- Accelerating zk-SNARKs - MSM and NTT algorithms on FPGAs with Hardcaml
- Visualizing information propagation in markets
- Computations that differentiate, debug, and document themselves
- Introducing the Jane Street Graduate Research Fellowship
- What the interns have wrought, 2022 edition
- Research internships in our Tools and Compilers group
- How Jane Street Pairs Interns to Projects and Teams During the Software Engineering Internship
- Magic-trace: Diagnosing tricky performance issues easily with Intel Processor Trace
2021 4
2020 12
- Growing the Hardcaml toolset
- Announcing Our Market Prediction Kaggle Competition
- Finding memory leaks with Memtrace
- Memory allocator showdown
- Announcing Signals and Threads, a new podcast from Jane Street
- What the interns have wrought, 2020 edition
- The Jane Street Interview Process — 2020 Edition
- Really low latency multipliers and cryptographic puzzles
- Using ASCII waveforms to test hardware designs
- Chrome extensions: Finding the missing proof
- Watch all of Jane Street's tech talks
- Troubleshooting systemd with SystemTap
2019 14
- Using Python and OCaml in the same Jupyter notebook
- Deep-Learning the Hardest Go Problem in the World
- Commas in big numbers everywhere: An OpenType adventure
- What the interns have wrought, 2019 edition
- Using OCaml to drive a Raspberry Pi robot car
- Do applied programming languages research at Jane Street!
- A look at OCaml 4.08
- Of Pythons and Camels
- Thoughts from AAAI 2019
- Learning ML Depth-First
- Machining the ultimate hackathon prize
- Accelerating Self-Play Learning in Go
- L2 Regularization and Batch Norm
- A tutorial for building web applications with Incr_dom
2018 9
2017 19
- Work on the OCaml compiler at Jane Street!
- Does batch size matter?
- How Jane Street Does Code Review (Jane Street Tech Talk)
- Jane Street Tech Talk, Verifying Network Data Planes
- Real world machine learning (part 1)
- How to design a tree diffing algorithm
- Ironing out your development style
- Hiring an FPGA engineer
- What the interns have wrought, 2017 edition
- When Bash Scripts Bite
- Looking for a technical writer
- Caveat Configurator: how to replace configs with code, and why you might not want to
- This is not the performance you were looking for: the tricks systems play on us
- Trivial meta-programming with cinaps
- One more talk, two more videos
- What a Jane Street software engineering interview is like
- Jane Street Tech Talks: Verifying Puppet Configs
- How to Build an Exchange
- A brief trip through Spacetime
2016 14
- A solution to the ppx versioning problem
- Observations of a functional programmer
- What the interns have wrought, 2016
- Unraveling of the tech hiring market
- Do you love dev tools? Come work at Jane Street.
- Let syntax, and why you should use it
- ppx_core: context-free rewriters for better semantics and faster compilation
- Seven Implementations of Incremental
- OCaml 4.03: Everything else
- A better inliner for OCaml, and why it matters
- Self Adjusting DOM and Diffable Data
- Self Adjusting DOM
- Incremental computation and the web
- Why OCaml?
2015 15
- Testing with expectations
- Quickcheck for Core
- rsync rounds timestamps to the nearest second
- No (functional) experience required
- Introducing Incremental
- Converting a code base from camlp4 to ppx
- CPU Registers and OCaml
- Reverse web proxy in ~50 lines of BASH
- Building a lower-latency GC
- Faster OCaml to C calls
- Why GADTs matter for performance
- A lighter Core
- Centralizing distributed version control, revisited
- Making making better
- 13 Virtues
2014 29
- Inspecting the Environment of a Running Process
- How to choose a teaching language
- Interviewing At Jane Street
- What the interns have wrought: RPC_parallel and Core_profiler
- What is gained and lost with 63-bit integers?
- Clearly Failing
- The ML Workshop looks fantastic
- Simple top-down development in OCaml
- What's in a name?
- Inspecting Internal TCP State on Linux
- Making “never break the build” scale
- Notes on Naming
- Reading Lamport, again
- Iron out your release process
- Scrutinize your code in style
- Code review that isn't boring
- OCaml 4.02: everything else
- Pattern matching and exception handling, unite!
- Core_bench: better micro-benchmarks through linear regression
- Hiring a compiler engineer
- Why change is hard
- Better namespaces through module aliases
- Extension Points, or how OCaml is becoming more like Lisp
- How to fail -- introducing Or_error.t
- Disabling Chrome's x-webkit-speech vulnerability
- How Does Automount Work Anyway?
- Generic mapping and folding in OCaml
- Breaking down FRP
- Async Parallel
2013 8
2012 20
- Maps, sets, and hashtables in core
- Bootstrapping OCaml/async on the Raspberry Pi
- Announcing OCaml Labs
- Jane Street at OUD
- Observer effect and YOU (NSLCD and GetPWNam()-a-plenty)
- Repos, RPMs, and bootstraps, oh my!
- Speed Up
- Finding references to lazily unmounted filesystems
- OCaml for the Sysadmins
- S-Expressions in ruby
- Linux disk crypto, now with ease
- ML workshop
- Do you solve real problems with FP? Then come talk about it at CUFP!
- The adventures in NIC bonding
- OpenLDAP, DBD, and you.
- Iterative email problem solving with python, Part 2
- Iterative email problem solving with python.
- Making staging explicit
- Fork Core!
- Moving files via rsync
2011 16
- OCaml, the ultimate refactoring tool
- Announcing Async
- +'a and -'a
- A mailing list for Core
- Coming to ICFP/CUFP? Propose a BOF!
- Using types to track defaults
- Rethinking Univ
- Time to register for CUFP!
- Dropping history with Mercurial
- Core Gems: many happy returns
- OCaml is smarter than I thought
- OCamlPro and the future of OCaml
- Effective ML Revisited (with videos)
- Core 0.7.0 is out!
- Do you use FP in anger? Then talk about it at CUFP this year!
- Effective ML Revisited
2010 10
- A trick: recursive modules from recursive signatures
- BOFs, Tutorials and Talks, oh my!
- Effective ML video
- More expressive GADT encodings via first class modules
- OCaml as a scripting language
- Ensuring that a function is polymorphic in Ocaml 3.12
- Making something out of nothing (or, why None is better than NaN and NULL)
- Another use for private type abbreviations
- Effective ML
- CUFP 2010 is coming!
2009 16
- Jane Street OCamldocs now available
- Core Gems: Time
- Optimizing List.map
- Core 0.6.0 release
- Another JSSP post
- Jane Street Summer Project round-up
- Designing a code-review tool, Part 2: Patches or Diffs
- Designing a code-review tool, Part 1
- OCaml in Japan, and its Meeting in Tokyo
- What do Haskellers have against exhaustiveness?
- Presenting the 2009 JSSP projects
- Proposals in, application period is closed
- Caml Trading talk at CMU
- Do you use FP as a means rather than an end?
- Private type abbreviations, what are they good for?
- Summer Project '09
2008 14
- Lightweight versioning for lightweight protocols
- The OSP meeting
- A Working Programmer's Guide to Type-Indexed Values
- Centralizing distributed version control
- Building a better compare
- Ask and ye shall receive
- The perils of polymorphic compare
- Better float unboxing
- Folding over fields
- The dangers of being too partial
- Ensuring that a function is polymorphic
- Core Principles: uniformity of interface
- Core has landed
- using with type on a variant type
Undated 18
- OCaml Annoyance #23: type declarations are implicitly recursive
- The ML sweet spot
- Bind without tears
- Variable-argument functions
- Typing RPCs
- Using let module for matching
- Extracting an exception from a module
- A universal type?
- Talking at Penn
- We've got a blog!
- HOWTO: Static access control using phantom types
- Where FP meets the real world. If you're interested in working at a place where functional programming meets the real world, then apply for a job at Jane Street. Learn more
- Who We Are
- The Latest
- Contact Us
- Disclosures & Policies
- Privacy
- Cookies