Evidence ledger 38 sources Checked 17 Oct 2026

Evidence ledger

One row per claim in Rent the store, own the layer in front of it: ten years of Figma: who published it, what grade it carries, when it was written, when the link was last checked, and the quote or figure it rests on. Nothing in the guide is cited from memory, so anything not in this table is not in the guide.

Dig: Rent the store, own the layer in front of it: Figma's architecture, 2016 to 2026. Research date: 2026-10-17. All rows checked 2026-10-17.

Retrieval limitation, stated up front. This session's egress policy blocked direct HTTP fetches to every host: curl to www.figma.com was refused by the proxy with a 403 on CONNECT, and WebFetch could not resolve DNS. Two channels worked. The first was search-engine retrieval, which returns excerpts and quoted fragments of a page rather than the whole document. The second was anonymous git reads of public GitHub repositories (redis/redis, pgbouncer/pgbouncer, evanw/skew) through the session's git proxy. So rows graded source were read first-hand from git history: commit hashes, authors, dates, messages, PR head refs, and ancestry checks against the default branch. Every other row rests on retrieved excerpts of the primary page. Quotes below are reproduced only where the retrieval returned them as quotation; otherwise the row says "(retrieved summary)". The HTTP link check in verify.mjs could not run from this session, so links are recorded as indexed, not re-fetched. Where a date was not visible in the excerpt, the row says how it was bounded.

Grading notes. Figma has published no formal ADRs. Two blog posts are graded adr because each names the rejected alternatives and the stated reason for rejecting them (the 2019 multiplayer post rejects OT and "true" CRDTs; the 2024 sharding post rejects CockroachDB, TiDB, Spanner, Vitess and NoSQL). The 2019 plugin-security update is graded postmortem because it is Figma's own account of a sandbox-escape class of vulnerability, its containment (publishing halted) and its structural fix. The SEC S-1 is graded casestudy because it is the only audited production-scale figure in the set.

# Org Title Tier Published Checked URL Claim taken Supporting quote or figure
1 Figma (Evan Wallace) WebAssembly cut Figma's load time by 3x blog 2017-06 2026-10-17 https://www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/ The editor engine is C++ cross-compiled to asm.js, then to WebAssembly; load time fell 3x "drop-in replacement for asm.js that is more efficient in every way"; parses "around 20x faster than asm.js"; title figure 3x (retrieved excerpt)
2 Figma Rust in production at Figma blog 2018-05 2026-10-17 https://www.figma.com/blog/rust-in-production-at-figma/ Multiplayer server rewritten TypeScript to Rust because GC and memory overhead blocked per-document isolation server "written in TypeScript"; garbage collector caused performance issues; a Node process per document had too high VM memory overhead; "each document lives exclusively on one specific worker" (retrieved summary)
3 Figma Rust in production at Figma blog 2018-05 2026-10-17 https://www.figma.com/blog/rust-in-production-at-figma/ Rust compression crates from Servo caused document data loss; Figma reverted to a mature C library both Servo-derived libraries "had minor problems that caused document data loss" (retrieved summary)
4 Figma (Evan Wallace) How Figma's multiplayer technology works adr 2019-10 2026-10-17 https://www.figma.com/blog/how-figmas-multiplayer-technology-works/ Server-authoritative sync; OT rejected; CRDT-inspired but not a true CRDT; last-writer-wins per property "Since Figma isn't a text editor, we didn't need the power of OTs and could get away with something less complicated"; "inspired by something called CRDTs"
5 Jamsocket You might not need a CRDT blog n.d. 2026-10-17 https://jamsocket.xyz/blog/you-might-not-need-a-crdt Quotes Wallace on why a central authority removes CRDT overhead "our server is the central authority, we can simplify our system by removing this extra overhead and benefit from a faster and leaner implementation" (quoted from Figma)
6 Figma How to build a plugin system on the web and also sleep well at night blog 2019-08 2026-10-17 https://www.figma.com/blog/how-we-built-the-figma-plugin-system/ First sandbox attempt was an iframe; plugins talk to the app through whitelisted messages iframe considered "the closest thing to a standard sandboxing solution"; security "guaranteed by browser vendors" (retrieved summary)
7 Figma An update on plugin security postmortem 2019-10 2026-10-17 https://www.figma.com/blog/an-update-on-plugin-security/ Realms-shim sandbox had escape bugs; Figma halted plugin publishing and changed the stack to remove the class "several independent vulnerabilities were recently discovered with the Realms shim that could have allowed code inside the sandbox to escape"; "a fundamental change to our technology stack to prevent this class of bug"
8 GitHub Advisory DB GHSA-7cg8-pq9v-x98q: realms-shim sandbox breakout source 2019-10 2026-10-17 https://github.com/advisories/GHSA-7cg8-pq9v-x98q Upstream advisory, critical, versions before 1.2.1 "versions of realms-shim prior to 1.2.1 are vulnerable"
9 Agoric Realms-shim security updates blog 2019-10-02 2026-10-17 https://agoric.com/realms-shim-security-updates/ Four security-critical bugs fixed upstream "four security-critical bugs were discovered and fixed"; realms-shim-1.2.0 and SES-0.6.3 "released 02-Oct-2019"
10 Figma Postmortem: Service disruption on January 21-22, 2020 postmortem 2020-01 2026-10-17 https://www.figma.com/blog/post-mortem-service-disruption-on-january-21-22-2020/ Day 1: one long-running expensive query saturated the single database's CPU "[6:54 AM PST] We discover a long-running, expensive query that has been causing elevated database CPU. After cancelling this query, performance returns to normal."
11 Figma Postmortem: Service disruption on January 21-22, 2020 postmortem 2020-01 2026-10-17 https://www.figma.com/blog/post-mortem-service-disruption-on-january-21-22-2020/ Day 2: write IOPS and lock contention, not CPU; fixed by disabling a background process and an emergency engine upgrade "increase in write IOPS and lock contention. However, in contrast to the previous day, database CPU is lower than normal"; "restart the database to apply settings to temporarily disable a background process; upgrade the database to a version we had already tested in our staging environment"
12 Figma Postmortem: Service disruptions on June 6 & 7 2022 postmortem 2022-06 2026-10-17 https://www.figma.com/blog/postmortem-service-disruptions-on-june-6-and-7-2022/ Four disruptions; Engine CPU at 100% on a cluster-mode-enabled ElastiCache node "we were using up 100% of the Engine CPU of a Cluster-Mode Enabled ElastiCache node"
13 Figma Postmortem: Service disruptions on June 6 & 7 2022 postmortem 2022-06 2026-10-17 https://www.figma.com/blog/postmortem-service-disruptions-on-june-6-and-7-2022/ Trigger was pub/sub load on CME; loaded files kept working, new opens and collaboration failed "high Publish / Subscribe workloads can trigger a sudden and sustained spike in Engine CPU utilization"; "files that were already loaded continued to work, but it wasn't possible for users to open new files or collaborate with others"; "There was no data loss"
14 Figma Postmortem: Service disruptions on June 6 & 7 2022 postmortem 2022-06 2026-10-17 https://www.figma.com/blog/postmortem-service-disruptions-on-june-6-and-7-2022/ Mixed cluster modes in production; recovery by moving traffic to new clusters after a slow failover "running two instances of ElastiCache—one with Cluster-Mode Enabled (CME) and another with Cluster-Mode Disabled (CMD)"; failover slower than expected, traffic redirected to new ElastiCache clusters (retrieved summary)
15 redis/redis Sharded pubsub implementation (#8621), commit 9f8885760 source 2022-01-03 2026-10-17 https://github.com/redis/redis/pull/8621 Sharded pub/sub landed upstream in 7.0 (first tag 7.0-rc1); co-authored by an AWS engineer git: 9f8885760 2022-01-03 Harkrishn Patro | Sharded pubsub implementation (#8621); "Co-authored-by: Harkrishn Patro harkrisp@amazon.com"; git tag --contains first = 7.0-rc1
16 Redis Redis Pub/Sub documentation vendor n.d. 2026-10-17 https://redis.io/docs/latest/develop/pubsub/ Classic cluster pub/sub propagates each message to every node; sharded pub/sub confines it to the shard sharded pub/sub "restricts the propagation of messages to be within the shard of a cluster" compared with global Pub/Sub "where each message propagates to each node"
17 Figma The growing pains of database architecture casestudy 2023-04 2026-10-17 https://www.figma.com/blog/how-figma-scaled-to-multiple-databases/ Through 2020 one large RDS Postgres held most metadata at 65%+ peak CPU; chose vertical partitioning by table "still using a single, large Amazon RDS database to persist most of our metadata"; "upwards of 65% CPU utilization during peak traffic"; "vertically partition the database by table(s)"
18 Figma The growing pains of database architecture casestudy 2023-04 2026-10-17 https://www.figma.com/blog/how-figma-scaled-to-multiple-databases/ Each vertical move cost about 30 s of partial availability; horizontal sharding deferred because managed options were not Postgres-compatible "~30 second period of partial availability impact (~2% of requests dropped)"; "Many popular managed solutions are not natively compatible with Postgres" (retrieved excerpt)
19 Figma How Figma's databases team lived to tell the scale adr 2024-03-14 2026-10-17 https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale/ Rejected CockroachDB, TiDB, Spanner, Vitess and NoSQL; sharded the existing RDS Postgres behind DBProxy evaluated "CockroachDB, TiDB, Spanner, and Vitess"; not sensible for a small team "to re-implement a generic horizontally sharded database"; "our nine month journey to horizontally shard Figma's Postgres stack" (retrieved summary + quote)
20 Figma How Figma's databases team lived to tell the scale adr 2024-03-14 2026-10-17 https://www.figma.com/blog/how-figmas-databases-team-lived-to-tell-the-scale/ Vertical partitioning ran out because the smallest unit is a table; colos, logical sharding via views before physical moves smallest unit of vertical partitioning "a single table"; colos share a shard key; logical sharding via Postgres views (retrieved summary)
21 Simon Willison How Figma's databases team lived to tell the scale (link note) blog 2024-03-14 2026-10-17 https://simonwillison.net/2024/Mar/14/how-figmas-databases-team-lived-to-tell-the-scale Dates the sharding post dated 14th March 2024
22 pganalyze (Lukas Fittl) How Figma built DBProxy for sharding Postgres blog 2024-03 2026-10-17 https://pganalyze.com/blog/5mins-postgres-figma-dbproxy-sharding-postgres Independent Postgres-specialist reading of DBProxy: query parsing, routing, between app and PgBouncer DBProxy "sits between the application and PgBouncer"; parses and routes sharded queries (retrieved summary)
23 Figma LiveGraph: real-time data fetching at Figma blog 2021-10 2026-10-17 https://www.figma.com/blog/livegraph-real-time-data-fetching-at-figma/ Subscriptions are driven by the Postgres replication stream, not polling; built as a query layer on existing Postgres "provide live updates in the order of milliseconds by reading the database replication stream"; polling "multiply the load on the database beyond what we were comfortable with"
24 Figma (Arushi Bandi, Rudi Chen, Slava Kim) Keeping it 100(x) with real-time data at scale blog n.d. (after 2023 vertical partitioning) 2026-10-17 https://www.figma.com/blog/livegraph-real-time-data-at-scale/ Sharding broke LiveGraph's global-order assumption; stopgap merged streams; replaced by invalidation-based cache sharded by query hash implementation "relied on a globally ordered stream of updates"; stopgap "combined all replication streams into one"; "a global invalidation-based cache sharded by query hash" (retrieved summary)
25 @Scale LiveGraph: scaling real-time data access (talk) talk n.d. 2026-10-17 https://atscaleconference.com/videos/livegraph-scaling-real-time-data-access/ When first built LiveGraph served 500k WAU on a single Postgres; now a subscribe-able distributed query cache abstract: built when Figma had "500,000 weekly active users and only a single Postgres instance"; "subscribe-able distributed query cache". No timestamp available; abstract only
26 Figma (Darren Tsung) Making multiplayer more reliable blog 2022-10 2026-10-17 https://www.figma.com/blog/making-multiplayer-more-reliable/ Checkpoint every 30-60 s to S3 replaced as sole durability by a per-file journal with sequence numbers; 95% of edits saved within 600 ms checkpoint "every 30 to 60 seconds"; journal "asynchronously written to as multiplayer accepts incoming changes"; "95% of edits to a Figma file get saved within 600ms"
27 Figma Figma on X announcing the journal post blog 2022-10 2026-10-17 https://x.com/figma/status/1584655238417764352 The journal tags Rust and DynamoDB "here's the 🔐 to our journal ... @rustlang @dynamodb"
28 Figma (Ian VonSeggern) How we migrated onto K8s in less than 12 months blog 2024-08-08 2026-10-17 https://www.figma.com/blog/migrating-onto-kubernetes/ ECS to EKS; ECS lacked StatefulSets and Helm; scoped to core changes with the user abstraction kept etcd on ECS needed "a custom wrapper around the etcd container startup, which proved fragile and hard to maintain" (retrieved summary)
29 InfoQ Figma moves from ECS to Kubernetes blog 2024-09 2026-10-17 https://www.infoq.com/news/2024/09/figma-ecs-kubernetes-eks Stated motivations: CNCF ecosystem, cost, developer experience, resiliency "the CNCF ecosystem, cost savings, improved developer experience, and increased resiliency" (retrieved summary)
30 Figma The evolution of Figma's mobile engine: compiling away our custom programming language blog 2024-05 2026-10-17 https://www.figma.com/blog/figmas-journey-to-typescript-compiling-away-our-custom-programming-language/ Skew retired by a Skew-to-TypeScript transpiler; hard to hire for, cut off from tooling Skew hard for new hires, hard to integrate, no external tooling (retrieved summary)
31 Simon Willison Figma's journey to TypeScript blog 2024-05-04 2026-10-17 https://simonwillison.net/2024/May/4/figmas-journey-to-typescript/ WebAssembly removed Skew's performance case; transpiler let migration run while teams shipped (retrieved summary)
32 evanw/skew Skew repository history source 2015-03-15 to 2024-02-20 2026-10-17 https://github.com/evanw/skew 858 commits; last code change 2021-03-04; only a README edit since git: first commit a75460f 2015-03-15; a4edb99 2021-03-04 Evan Wallace update "build.py" for python 3; df456e7 2024-02-20 Evan Wallace Update README.md; git rev-list --count HEAD = 858
33 Figma Speeding up file load times, one page at a time blog 2024 2026-10-17 https://www.figma.com/blog/speeding-up-file-load-times-one-page-at-a-time/ Multiplayer's QueryGraph sends only the requested page plus read dependencies; slowest loads 33% faster QueryGraph sends "the requested page to the client, along with any required read dependencies"; slowest load times improved 33% (retrieved summary)
34 Figma (Alex Ringle, Luke Anderson) Figma rendering: powered by WebGPU blog 2025-10 (bounded by repost 2025-10-20) 2026-10-17 https://www.figma.com/blog/figma-rendering-powered-by-webgpu/ Renderer moved from WebGL to WebGPU while keeping a WebGL path WebGPU for compute shaders, avoiding WebGL "bug-prone global state"; keep "WebGL compatibility while adding WebGPU" (retrieved summary)
35 Figma From multi-day latency to near real-time insights: Figma's data pipeline upgrade blog n.d. 2026-10-17 https://www.figma.com/blog/figmas-data-pipeline-upgrade/ Daily batch sync replaced by in-house CDC to Kafka, one topic per table, into Snowflake daily synchronization tasks "started taking hours or even days to complete"; CDC service "publishes Postgres changes to one topic per table in Kafka" (retrieved summary)
36 Figma (Kevin Lin) Figma's next-generation data caching platform blog 2026 (on or before 2026-05-05) 2026-10-17 https://www.figma.com/blog/figmas-next-generation-data-caching-platform/ FigCache: stateless RESP proxy in front of ElastiCache; motivated by connection limits and the June 2022 incident; six nines claimed "scalability and reliability gaps in our Redis platform were a growing threat to Figma's site availability"; "act as a connection multiplexer, isolating connection scalability on Redis clusters from connections created by Redis clients"; "achieved six nines of uptime" since 2H 2025
37 InfoQ Figma builds in-house Redis proxy to hit six nines uptime blog 2026-05-05 2026-10-17 https://www.infoq.com/news/2026/05/figma-redis-figcache/ FigCache built on ResPC, Figma's Go RPC framework over RESP; in production since 2H 2025 "stateless service built on ResPC" (retrieved summary)
38 Figma (Lihao He, Tim Goh, Mehant Baid) PGKeeper: building the bouncer we needed for Postgres blog 2026 (on or before 2026-05-06) 2026-10-17 https://www.figma.com/blog/pgkeeper-building-the-bouncer-we-needed-for-postgres/ PgBouncer replaced by a Go gRPC pooler with priority admission (CoDel) and fair sharing; PGCat evaluated "PgBouncer's single-threaded architecture imposed a ceiling on vertical scalability"; "no way to prioritize critical traffic above misbehaving, lower-priority traffic"; load-tested at 3x peak QPS; database SLO above 99.99% since rollout (daily.dev summary)
39 Postgres Weekly Issue #647 blog 2026-05-06 2026-10-17 https://postgresweekly.com/issues/647 Dates PGKeeper; PGCat evaluated first "Figma outgrew PgBouncer, evaluated PGCat, and ended up building its own pooler (PGKeeper) with Go and PGX"
40 pgbouncer/pgbouncer Add PgBouncer peering support (#666) source 2023-04-20 2026-10-17 https://github.com/pgbouncer/pgbouncer/pull/666 Upstream's scale-out answer was multiple processes plus peering, not threads git: 8bdfc6f 2023-04-20 Jelte Fennema | Add PgBouncer peering support (#666); de33cd0 2024-05-06 ... rolling restarts using so_reuseport (#902)
41 pgbouncer/pgbouncer Multithread mode PR (#1386) source 2025-09-28 to 2026-08-27 2026-10-17 https://github.com/pgbouncer/pgbouncer/pull/1386 A multithread mode exists as an unmerged PR; an earlier attempt (#1244) is also unmerged git: refs/pull/1386/head = 12 commits not on master, 2025-09-28 gyang193 | Support multithread mode to 2026-08-27 Merge branch 'master' into multithread-on-main; merge-base --is-ancestor false for #1386 and #1244 as of 2026-10-17
42 Figma, Inc. Form S-1 casestudy 2025-07 2026-10-17 https://www.sec.gov/Archives/edgar/data/1579878/000162828025033742/figma-sx1.htm Renewed AWS agreement (2025-05-31): minimum $545M over five years renewed agreement "entered into on May 31, 2025"; minimum spend "of $545 million in cloud hosting services over the next five years" (retrieved excerpt)
43 Duckbill Figma's $300k daily AWS bill isn't the scandal you think it is blog 2025-07 2026-10-17 https://www.duckbillhq.com/blog/figmas-300k-daily-aws-bill-isnt-the-scandal-you-think-it-is/ About $109M a year, roughly 12% of $821M revenue "about $109 million annually, or roughly 12% of their $821 million in rolling revenue" (retrieved summary)
44 Postgres FM Episode 100: To 100TB, and beyond! (Sammy Steele, Figma; with Notion and Adyen) talk 2024 2026-10-17 https://postgres.fm/episodes/to-100tb-and-beyond Figma's databases tech lead discussing sharded Postgres operation alongside Notion and Adyen guest list only from retrieved page; no timestamped claim available
45 Shapiro, Preguiça, Baquero, Zawirski Conflict-free replicated data types (SSS 2011, INRIA RR-7687) paper 2011 2026-10-17 https://hal.sorbonne-universite.fr/inria-00609399v1 CRDTs guarantee convergence without a coordinator; the overhead Figma removed exists to serve the no-authority case INRIA research report RR-7687, 2011; LNCS 6976 pp. 386-400
46 Nichols, Jacobson Controlling Queue Delay (ACM Queue 10(5)) paper 2012-05 2026-10-17 https://people.engr.tamu.edu/xizhang/ECEN619/research_papers/ACM_COMMUNICATIONS_2012_2208917.2209336_Controlling_Queue_Delay_Van_Jacobson.pdf CoDel drops on sojourn time, not queue length; the mechanism PGKeeper's first admission stage borrows CoDel "uses a packet's sojourn time (time in queue)" (ns-3 description of the paper's algorithm)