fbthrift — Engineering Performance
72 engineers all time · Jan 2025 – Sep 2026 · built 2026-09-30 · GitHub
Performance snapshot
Today's rolling 90-day reading for fbthrift, compared with the start of the series. Pick a window to move that comparison point.
Avg. perf / dev / mo
+107.2%
0.65 → 1.35 ETV
Active engineers
+8.1%
37.0 → 40.0
Features
+4.3pp
29.8% → 34.1%
vs. Meta
0.69x
−31% below Meta
fbthrift vs. Meta
Per-engineer ETV for fbthrift against Meta as a whole. Both lines are 90-day rolling averages scaled to a 30-day month, so they share one axis and can be read against each other at any point. Pick a window to zoom the chart to it.
Performance Composition
Each month's output split by type of work: Features (new value), Maintenance (sustaining systems), Tests, Docs, and Fixes (rework). The yellow line is output per engineer, so when it rises each engineer is delivering more, whatever the team size did. Unit: Engineering Throughput Value (ETV).
Engineering capacity
Effective engineers behind fbthrift, against its pre-AI baseline. Each subject has its own: fbthrift's is 0.65 ETV / dev / mo, its first reading in Q1 2025. Per-engineer ETV divided by that gives a capacity multiple, and that multiple applied to the engineers active in the trailing 90 days turns it into engineer-equivalents. The line is the real headcount, so the gap between line and area is what the leverage is worth. Because each baseline is its own, every subject opens at 1.0x on its first day: multiples measure improvement and are not comparable between subjects.
Knowledge concentration
How dependent is this repo on a small number of engineers? Higher top-1 share = higher key-person risk.
Jack Chistyakov owns 13.3 % of commits.
Behind the numbers
Written summary of the work completed each month.
No monthly reports available yet.
Top engineers
Most impactful commits
Top 10 by ETV in the all-time window.
- 9.6ETVMove frame component for fast_thrift to thrift Summary: 1. Moves frame component for fast_thrift to thrift. 2. Fixes includes 3. Fixes depencies 4. Verifies tests run and pass 5. Verifies benchmarks Reviewed By: islamismailov Differential Revision: D99001071 fbshipit-source-id: 5a5036820db279b858554671f096513323a06327Ankit Kumar · 3c8bdd23 · 2026-04-02
- 9.3ETVMove rocket component for fast_thrift to thrift Summary: 1. Moves rocket component for fast_thrift to thrift. 2. Fixes includes 3. Fixes depencies 4. Verifies tests run and pass 5. Verifies benchmarks Reviewed By: robertroeser Differential Revision: D99004612 fbshipit-source-id: 3e293eefe76b3cf2fddf83d6501d7e2a11552dcaAnkit Kumar · f90956f7 · 2026-04-02
- 8.8ETVMove thrift component for fast_thrift to thrift Summary: 1. Moves thrift component for fast_thrift to thrift. 2. Fixes includes 3. Fixes depencies 4. Verifies tests run and pass 5. Verifies benchmarks Reviewed By: robertroeser Differential Revision: D99006406 fbshipit-source-id: 5b7a432a06264e5fd9bd4565eb964177c706b522Ankit Kumar · 92c6d9c1 · 2026-04-02
- 7.1ETVMove channel pipeline and common for fast_thrift to thrift Summary: 1. Moves channel pipeline and common for fast_thrift to thrift. 2. Fixes includes 3. Fixes depencies 4. Verifies tests run and pass 5. Verifies benchmarks Reviewed By: islamismailov Differential Revision: D98998128 fbshipit-source-id: 0445e2dba16957a294d87e3fd874ac237d111d90Ankit Kumar · d14cef3c · 2026-04-01
- 6.4ETVAdd synchronous Rust handler integration Summary: Build the synchronous Rust handler bridge on top of the native channel_pipeline readiness primitives. Add borrowed callback contexts, message adapters, lifecycle and backpressure handling, panic containment, tests, benchmarks, and design documentation while keeping Rust dependencies opt-in. Reviewed By: pranavtbhat Differential Revision: D113432296 fbshipit-source-id: d14a9b4489ea136c34890b8b84e94eabebf95593Robert Roeser · 999b40c6 · 2026-07-29
- 4.0ETVAdd shared-parser Thrift formatter binary Summary: Add the `thrift-fmt` binary and formatter library using the shared recursive-descent parser core for grammar validation and token collection from the first formatter diff. Formatter-specific trivia handling and layout remain in the formatter implementation; the semantic AST is not used as a formatting transport. Port the existing formatter snapshot coverage into C++ and add fixture round-trip/idempotence coverage plus the fbcode compatibility target. This implementation exactly preserves the behavior of the existing formatter, including all of its deficiencies, to facilitate deployment. The goal is to fix these issues individually and end up with a better formatter, using the flexibility of controlling the whole stack to make the behavior fully configurable while also eliminating divergence caused by parser duplication as the language evolves. Reviewed By: hchokshi, sadroeck Differential Revision: D108951643 fbshipit-source-id: d00e3ec3d0976ece612e7186c842257aa4ab0a2fShai Szulanski · 3751dd95 · 2026-06-29
- 3.9ETVMove `thrift/facebook/json5/*` to `thrift/lib/cpp2/protocol` Summary: This diff moved all files under `thrift/facebook/json5 to `thrift/lib/cpp2/protocol`: * `Json5Protocol.h` is moved to `thrift/lib/cpp2/protocol`. Other files are moved to `thrift/lib/cpp2/protocol/detail`. * `thrift/facebook/json5/test` is moved to `thrift/lib/cpp2/protocol/test` * `thrift/facebook/json5/test/example.thrift` is renamed to `json5_test.thrift` Reviewed By: aristidisp Differential Revision: D95818321 fbshipit-source-id: 19d443e93b3a5ea5965b2e62893407874c9634e2TJ Yin · aadfdb31 · 2026-03-10
- 3.7ETVImplement connection acceptance as a pipeline Summary: Adds a connection acceptor pipeline which ends with it's tail at the ConnectionHandler. All new connections flow through this pipeline. The head of the pipeline is a Listener and the tail is a connection installer. The pipeline is completely rpc agnostic and uses concepts for Connection/ConnectionFactory. Thrift plugs into this connection pipeline with it's own concrete connection and factory. Reviewed By: robertroeser Differential Revision: D106016109 fbshipit-source-id: 45c30f400b89c08df78b5f4d5d62001cfc5dcad3Ankit Kumar · 65e14c62 · 2026-05-26
- 3.4ETVAdd type-based channel pipeline events Summary: Remove the need for one central event enum: each handler declares the typed events it can publish, while other handlers subscribe and implement `on<Event>()`. Event contracts and dispatch thunks are resolved at compile time, with routes cached when the pipeline is built; the bound typed path is also 13.1% faster than legacy enum dispatch. Reviewed By: robertroeser Differential Revision: D119018784 fbshipit-source-id: 7aa2ebaa2a5b8843c1c30b901eaf59b7fdad81a0Ankit Kumar · 1e15d88d · 2026-09-08
- 2.9ETVWhitespace control Summary: Add tilde whitespace trimming (`{{~ ~}}`) to the Whisker template language, giving template authors fine-grained control over whitespace in generated code. Whisker templates generate source code across 12 languages, but producing correctly-formatted output has required pervasive workarounds. **282+ template files** use the `{{!` comment hack — empty comments inserted solely to suppress unwanted newlines and whitespace. The result is templates like this, where the actual logic is buried under noise: ```mustache #[derive({{! }}{{#if struct:copy?}}Copy, {{/if struct:copy?}}{{! }}Clone, PartialEq{{! }}{{#if struct:ord?}}, Eq, PartialOrd, Ord, Hash{{/if struct:ord?}}{{! }}{{#if struct:serde?}}, ::serde_derive::Serialize{{/if struct:serde?}}{{! }}) ``` With tilde trimming, the same template becomes readable at a glance: ```mustache #[derive( {{~ #if struct:copy? }}Copy, {{/if struct:copy? ~}} Clone, PartialEq {{~ #if struct:ord? }}, Eq, PartialOrd, Ord, Hash{{/if struct:ord? ~}} {{~ #if struct:serde? }}, ::serde_derive::Serialize{{/if struct:serde? ~}} )] ``` See whisker.md for more details. Reviewed By: hchokshi Differential Revision: D97992973 fbshipit-source-id: 9a9d6a9738fc6fdfa53f8467c1c7205c65defd24Pranjal Raihan · 66ec2ab4 · 2026-04-08