Evidence ledger
One row per claim in Putting the services back together: ten years of Airbnb, read from its own artefacts: 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.
Topic: how Airbnb re-aggregated a microservice estate between 2015 and 2026, reconstructed from its own published artefacts (repositories, design documents, package registries, advisories).
All links fetched 2026-09-23. One row per claim. Quotes are copied, not paraphrased; (R) marks
a reported figure taken from the artefact, (E) an exact quotation, (D) a figure derived by
counting what the artefact lists.
Evidence limits, stated up front
- Airbnb publishes no public incident postmortems. Nothing in this corpus is an incident
review written by Airbnb. The two
postmortem-graded rows are security advisories filed against Airbnb-published packages. Every failure claim in the guide that is not one of those two is either Airbnb's own account of an architectural failure (gradedblog) or an inference from artefacts (marked as such). - The network policy for this session blocked most of the open web. medium.com (which hosts the Airbnb Tech Blog), airbnb.io, viaduct.airbnb.tech, infoq.com, arxiv.org, usenix.org, wikipedia.org and sec.gov all returned 403 at the egress proxy. There are therefore no papers and no conference talks in this ledger, and the engineering-blog tier is limited to the posts Airbnb keeps inside the Viaduct repository. Where a claim would normally be corroborated against a blog post, it is corroborated against a registry timestamp instead.
- Consequence for the reader: the guide is strong on what was built, when it shipped and when it stopped, and weak on what it cost to run and what broke. Treat the operational claims in row 4 as Airbnb's own reporting, uncorroborated.
| # | Org | Title | Tier | Published | Checked | URL | Claim I take from it | Supporting quote or figure |
|---|---|---|---|---|---|---|---|---|
| 1 | Airbnb | Viaduct — About | adr | 2025-09 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/docs/docs/about/index.md | Viaduct exists because the microservice dependency graph became the problem | (E) "The Viaduct project was initially started in 2020 to address the complexity and inefficiencies caused by an ever-growing dependency graph of microservices at Airbnb." |
| 2 | Airbnb | Viaduct — About | adr | 2025-09 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/docs/docs/about/index.md | The stated method is composition around data, not RPC | (E) "organizing service interactions around data rather than remote procedure calls" |
| 3 | Airbnb | Viaduct — About | adr | 2025-09 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/docs/docs/about/index.md | The aggregator decayed and was rebuilt from the ground up starting in 2024 | (E) "At the beginning of 2024, Airbnb began a rebuild of the original Viaduct system... the previous system had become complex, with multiple ways to implement functionality and weak abstraction boundaries, making it hard to evolve without disrupting users." |
| 4 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/docs/docs/blog/posts/2025-09-15-viaduct-five-years-on/index.md | The scale and the operational outcome, as Airbnb reports them | (E) "Since 2020, traffic through Viaduct has grown by a factor of eight. The number of teams hosting code in Viaduct has doubled to 130+ (with hundreds of weekly active developers). The codebase hosted by Viaduct has tripled to over 1.5M lines (plus about the same in test code). We've achieved all this while keeping operational overhead constant, halving incident-minutes, and keeping costs growing linearly with QPS." |
| 5 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | Hosting logic in the aggregator is a deliberate break with GraphQL orthodoxy | (E) "From the beginning, we've encouraged teams to host their business logic directly in Viaduct. This runs counter to what many consider to be best practices in GraphQL, which is that GraphQL servers should be a thin layer over microservices that host the real business logic." |
| 6 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | Teams retire standalone services by migrating into the graph | (E) "As we migrate our media APIs into Viaduct, we're looking forward to retiring a handful of standalone services. Centralizing everything means less overhead, fewer moving parts, and a much smoother developer experience!" |
| 7 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | The module replaces the service as the unit of ownership and isolation | (E) "Microservices achieve this via service definitions and RPC API boundaries; Viaduct achieves it via modules plus re-entrancy." and (E) "we discourage direct code dependencies between modules. Instead, modules compose via GraphQL fragments and queries." |
| 8 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | The decay was specific: no formal module, conventions not enforced | (E) "Initially, all we had was a vague set of conventions for organizing code into team-owned directories. There was no formal concept of a module, and schema and code were kept in separate source directories with unenforced naming conventions to connect the two." |
| 9 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | The engine/tenant boundary is the load-bearing new abstraction | (E) "The most significant change is the boundary between the engine and the developer-facing tenant API. In the previous system, that boundary hardly existed. Viaduct Modern defines a strong engine API whose core is a dynamically-typed representation of GraphQL values" |
| 10 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | Migration constraint: no step-function cutover was possible | (E) "Viaduct Modern would be a non-starter if it required a step-function migration of a million+ lines of code... we're shipping two tenant APIs side-by-side—the new Modern API and the existing Classic API—both on top of the new engine." |
| 11 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | Blast radius inside one runtime is handled by sharding the deployment, not the code | (E) "We run Viaduct as a horizontally-scaled Kubernetes app. To mitigate blast radius, we use a dispatcher that routes operations to deployment shards, applying shuffle sharding." |
| 12 | Airbnb | Viaduct, Five Years On | blog | 2025-09-15 | 2026-09-23 | (same URL as 4) | Most traffic is service-to-service, not client-facing | (E) "Over 75% of Viaduct requests are internal because Viaduct has become a 'one-stop' data-oriented mesh" |
| 13 | Airbnb | Viaduct — Remote Resolver Architecture | adr | 2026 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/core/x/remoteresolvers/impldocs/architecture.md | In the 2026 platform, running a resolver in another process is the experiment | (E) "This document describes the current experimental implementation in core/x/remoteresolvers" and (E) "Only the tenant resolver executor call moves to a remote resolver server." |
| 14 | Airbnb | Viaduct — Remote Resolver Architecture | adr | 2026 | 2026-09-23 | (same URL as 13) | The price of a process boundary, written down by the team that removed it | (E) "The two processes do not share an engine, injector, schema object, executor instance, or registry. They must independently load compatible tenant code and schemas." |
| 15 | Airbnb | Viaduct — Access Checks | adr | 2026 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/impldocs/modern-access-check.md | Authorisation moved into the execution engine as a per-field SPI with its own data needs | (E) "for queries, the checker and resolver run in parallel; for mutations and subscriptions, the checker runs first and the resolver is only executed if the check passes" and (E) "Each field and list element has two slots: RAW_VALUE_SLOT (resolver result) and ACCESS_CHECK_SLOT (checker result)." |
| 16 | Airbnb | Viaduct — AGENTS.md | source | 2026 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/AGENTS.md | Viaduct is embedded in the host server, not deployed beside it | (E) "A systems builder embeds viaduct.service.api.Viaduct in their server and routes requests to Viaduct.execute" |
| 17 | Airbnb | Viaduct — AGENTS.md | source | 2026 | 2026-09-23 | (same URL as 16) | Runtime discovery was deliberately removed in favour of build-time config | (E) "Tenant bootstrapping uses generated module config JSON under META-INF/viaduct/modules/... TenantAPIBootstrapper and runtime scanning for resolver classes have been removed." |
| 18 | Airbnb | Viaduct — Roadmap | adr | 2026 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/docs/docs/roadmap/index.md | The in-flight work is boundary enforcement, not features | (E) "Build Time Validation ... 'Shift-left' mechanisms to validate schema violations at build time." and (E) "Visibility ... Implement a @visibility directive that controls what internal module code can see." and (E) "Factory types are a straight-forward way for tenants to share functions in a Kotlin-native manner without breaking our principle of interacting 'only through the graph.'" |
| 19 | Airbnb | airbnb/viaduct README | source | 2026-09 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/README.md | The engine is production-proven; the developer API is not yet stable | (E) "The Viaduct engine is in production, at scale, at Airbnb where it has proven reliable. The developer API of Viaduct is under active development." |
| 20 | Airbnb | airbnb/viaduct (repository) | source | 2026-09-23 | 2026-09-23 | https://github.com/airbnb/viaduct | Repository shape and scale of the published platform | (R) 173 stars, 39 forks, 1,617 commits on main, Apache-2.0; root carries AGENTS.md, CLAUDE.md, OWNERS, impldocs/, config/security |
| 21 | Airbnb | com.airbnb.viaduct:runtime on Maven Central | source | 2025-09-04 → 2026-05-13 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/viaduct/runtime/ | The public release train, dated to the day | (R) 0.1.0 published 2025-09-04; 1.0.0 published 2026-05-13; roughly weekly minor releases between |
| 22 | Airbnb | com.airbnb.viaduct:bom on Maven Central | source | 2025-09-17 → 2026-05 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/viaduct/bom/ | Two minor versions were assigned but never published | (D) the published sequence runs 0.14.0, 0.16.0 and 0.20.0, 0.22.0 — 0.15.0 and 0.21.0 are absent, and the repository's release-notes posts skip the same two numbers |
| 23 | Airbnb | com.airbnb.skipper:skipper-core on Maven Central | source | 2026-09-08 → 2026-09-16 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/skipper/skipper-core/ | The newest Airbnb platform artefact is eight days old at the date of this guide | (R) 0.2.0 on 2026-09-08; 0.9.0 on 2026-09-16; eight releases in nine days |
| 24 | Airbnb | airbnb/skipper | source | 2026-09 | 2026-09-23 | https://github.com/airbnb/skipper | Durable execution ships as a library inside your service, not as a cluster | (R) "a lightweight workflow engine"; embeds into existing services; persists state to databases already in use; "eliminates the need for dedicated workflow orchestration clusters"; pre-release badge; Apache-2.0; 6 stars |
| 25 | Airbnb | airbnb/dynein | source | archived 2021-12-16 | 2026-09-23 | https://github.com/airbnb/dynein | The cluster-shaped predecessor was retired four and a half years before the library-shaped successor shipped | (E) "This repository was archived by the owner on Dec 16, 2021. It is now read-only." Description: "Dynein is Airbnb's Open-source Distributed Delayed Job Queueing System." 391 stars |
| 26 | Airbnb | airbnb/synapse | source | last gem 2018-11-01 | 2026-09-23 | https://github.com/airbnb/synapse | The service-discovery layer that made the split possible is unmaintained and unlabelled | (E) README still opens "Synapse is Airbnb's new system for service discovery." Repository not archived; 2.1k stars |
| 27 | RubyGems | synapse gem versions | source | 2012-11-09 → 2018-11-01 | 2026-09-23 | https://rubygems.org/api/v1/versions/synapse.json | Exact end date of SmartStack's client-side discovery | (R) 24 versions; first 0.0.1 on 2012-11-09; last 0.16.2 on 2018-11-01; 115,628 downloads |
| 28 | RubyGems | nerve gem versions | source | 2012-12-22 → 2017-09-04 | 2026-09-23 | https://rubygems.org/api/v1/versions/nerve.json | The registration half stopped a year before the routing half | (R) 11 versions; first 0.0.1 on 2012-12-22; last 0.8.1 on 2017-09-04; 59,678 downloads |
| 29 | Airbnb | airbnb/istio | source | last commits 2026-01 | 2026-09-23 | https://github.com/airbnb/istio | The mesh Airbnb runs today is someone else's project, kept as a fork | (R) "forked from istio/istio"; 25,771 commits on master; most recent commits are upstream synchronisations, not Airbnb-specific changes; 13 stars |
| 30 | Airbnb / Slack | airbnb/kaldb | source | 2026-09-22 | 2026-09-23 | https://github.com/airbnb/kaldb | Log and trace search is also a fork of another company's engine | (E) README opens "Astra is a cloud-native search and analytics engine for log, trace, and audit data."; repository is "forked from slackhq/astra"; licence notice "Licensed under MIT. Copyright © 2024 Slack" |
| 31 | Airbnb | airbnb/chronon | source | active 2026 | 2026-09-23 | https://github.com/airbnb/chronon | The feature platform is published because it defines how application code is written | (R) "Chronon is a platform that abstracts away the complexity of data computation and serving for AI/ML applications."; 1.1k stars; Apache-2.0; README lists production users including Airbnb, Stripe, OpenAI, Netflix, Uber and Monzo |
| 32 | PyPI | chronon-ai release history | source | 2022-06-07 → 2026-08-12 | 2026-09-23 | https://pypi.org/pypi/chronon-ai/json | Dated span of the feature platform's public life | (R) 103 releases; first 0.0.1 on 2022-06-07; latest 0.0.114 on 2026-08-12 |
| 33 | Docker Hub | airbnb organisation images | source | 2024-04-04 / 2026-07-10 | 2026-09-23 | https://hub.docker.com/v2/repositories/airbnb/ | The previous ML platform's build image stopped moving in April 2024 | (R) airbnb/bighead-ci: 302,937 pulls, last updated 2024-04-04. airbnb/airtrace: 14,238 pulls, last updated 2026-07-10 |
| 34 | npm | enzyme package metadata | source | 2015-12-06 → 2019-12-20 | 2026-09-23 | https://registry.npmjs.org/enzyme | A widely used package stopped shipping without any published notice | (R) created 2015-12-06; 54 versions; latest 3.11.0 published 2019-12-20; no deprecated field on the latest version |
| 35 | Airbnb | airbnb/enzyme | source | 2026-09-23 | 2026-09-23 | https://github.com/airbnb/enzyme | The repository gives no signal that the project ended | (R) 19.8k stars, 251 open issues, not archived, no deprecation notice; README documents adapters for React 0.13.x through 16.x |
| 36 | npm | hypernova package metadata | source | 2015-11-17 → 2019-01-02 | 2026-09-23 | https://registry.npmjs.org/hypernova | The one Airbnb package that was formally deprecated | (E) deprecation string on 2.5.0: "Package no longer supported." Last publish 2019-01-02 |
| 37 | Airbnb | airbnb archived repositories | source | 2018 → 2024 | 2026-09-23 | https://github.com/orgs/airbnb/repositories?q=archived%3Atrue&type=all&sort=updated | The archive notices cluster years after the code stopped | (R) 24 archived repositories; hypernova and its four bindings archived Oct 2023 (5.8k stars); superset-fork Sep 2023; airpal 2021 (2.7k stars); smartstack-cookbook 2020; dynein 2020–2021; reair 2019; infinity 2018 ("UITableViews for the web (DEPRECATED)", 2.8k stars) |
| 38 | npm | eslint-config-airbnb package metadata | source | 2015-05-22 → 2021-12-25 | 2026-09-23 | https://registry.npmjs.org/eslint-config-airbnb | The enforcement half of the style guide froze while the document kept being edited | (R) created 2015-05-22; 62 versions; latest 19.0.4 published 2021-12-25; not deprecated. The airbnb/javascript repository shows 148k stars and an April 2026 update |
| 39 | npm | react-dates package metadata | source | 2016-08-17 → 2020-01-29 | 2026-09-23 | https://registry.npmjs.org/react-dates | The web component library stopped in January 2020 | (R) 164 versions; latest 21.8.0 published 2020-01-29 |
| 40 | npm | airbnb-prop-types package metadata | source | 2016-10-09 → 2020-06-30 | 2026-09-23 | https://registry.npmjs.org/airbnb-prop-types | Airbnb handed the name away rather than archiving it | (E) deprecation string: "This package has been renamed to 'prop-types-tools'". Last publish 2020-06-30 |
| 41 | Maven Central | com.airbnb.android:epoxy versions | source | 2016-08-25 → 2026-01-23 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/android/epoxy/ | The measured shape of a platform library's life | (D) 104 published versions; by year: 2016 → 6, 2017 → 28, 2018 → 20, 2019 → 12, 2020 → 13, 2021 → 17, 2022 → 3, 2023 → 2, 2024 → 1, 2025 → 1, 2026 → 1 |
| 42 | Maven Central | com.airbnb.android:mavericks versions | source | 2021-02-04 → 2026-02-07 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/android/mavericks/ | The Android state framework is still shipping in 2026 | (D) 24 versions; first 2.0.0 on 2021-02-04; last 3.1.0 on 2026-02-07 |
| 43 | Maven Central | com.airbnb:deeplinkdispatch versions | source | 2015-06-30 → 2026-01-29 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/deeplinkdispatch/ | An eleven-year-old Android library is still maintained | (D) 39 versions; first 1.1.0 on 2015-06-30; last 7.2.2 on 2026-01-29 |
| 44 | Maven Central | com.airbnb.android:airmapview versions | source | 2015-03-25 → 2019-10-10 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/android/airmapview/ | The 2015 Android library cohort ended in 2019 | (D) 18 versions; first 1.1.1 on 2015-03-25; last 2.1.1 on 2019-10-10 |
| 45 | Maven Central | com.airbnb:rxgroups versions | source | 2016-01-20 → 2018-01-06 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/rxgroups/ | A library abandoned before it reached 1.0 | (D) 10 versions; last published version is 1.0.0-alpha2 on 2018-01-06 |
| 46 | Maven Central | com.airbnb group listing | source | 2026-09-23 | 2026-09-23 | https://repo1.maven.org/maven2/com/airbnb/ | The whole public JVM surface is eight artefact families | (D) android, deeplinkdispatch, okreplay, rxgroups, skipper, viaduct, walkman |
| 47 | GitHub Advisory DB | GHSA-xmw7-848p-p95w | postmortem | 2022-05-14 (NVD 2018-06-17) | 2026-09-23 | https://github.com/advisories/GHSA-xmw7-848p-p95w | The only vulnerability filed against an Airbnb-authored application | (E) "Cross-site scripting (XSS) vulnerability in Airbnb Knowledge Repo prior to 0.9.0 allows remote attackers to inject arbitrary web scripts or HTML via the post comments functionality"; CVE-2018-12104; CVSS 6.1; fixed in 0.9.0 |
| 48 | GitHub Advisory DB | GHSA-m852-866j-69j8 | postmortem | 2020-09-01 | 2026-09-23 | https://github.com/advisories/GHSA-m852-866j-69j8 | A lookalike of an Airbnb package became a credential-theft vector | (E) "Version 2.0.0 of eslint-config-airbnb-standard was published with a bundled version of eslint-scope that was found to contain malicious code." The code would "read the users .npmrc file and send it's contents to a remote server"; CVSS 9.8 |
| 49 | GitHub Advisory DB | advisory search, npm ecosystem, "airbnb" | postmortem | 2026-09-23 | 2026-09-23 | https://github.com/advisories?query=ecosystem%3Anpm+airbnb | The public failure record for Airbnb code is almost empty | (D) one npm advisory matches, and it is the lookalike package in row 48; a search for lottie in the npm ecosystem returns zero advisories |
| 50 | Airbnb | airbnb/viaduct closed-unmerged pull requests | source | 2026-08 → 2026-09 | 2026-09-23 | https://github.com/airbnb/viaduct/pulls?q=is%3Apr+is%3Aclosed+is%3Aunmerged | The public repository is not where the platform's code lands | (D) the most recent 18 closed-unmerged PRs are all build, CI and release plumbing from one contributor, none with a stated reason for closing; one is titled "fix(ci): run Copybara on Java 25", naming the tool used to mirror an internal monorepo |
| 51 | Airbnb | airbnb/viaduct open issues | source | 2026-04 → 2026-09 | 2026-09-23 | https://github.com/airbnb/viaduct/issues?q=is%3Aissue+is%3Aopen | Boundary enforcement is being pushed into static analysis | (R) issue #334, 2026-04-29: "build: Add Detekt rules to enforce Viaduct's tenant/framework error attribution protocol" |
| 52 | Airbnb | Viaduct CONTRIBUTING.md and OWNERS | source | 2026 | 2026-09-23 | https://raw.githubusercontent.com/airbnb/viaduct/main/CONTRIBUTING.md | Governance is Airbnb's, and security reports route to Airbnb's bounty programme | (E) "Any security issues should be submitted directly to the Airbnb bug bounty program"; OWNERS lists four named approvers and the airbnb/ductworks team as watchers |
| 53 | Gradle Plugin Portal | com.airbnb.viaduct.application-gradle-plugin | source | 2026 | 2026-09-23 | https://plugins.gradle.org/plugin/com.airbnb.viaduct.application-gradle-plugin | The platform ships as build tooling as well as a runtime | (E) publisher "Viaduct Maintainers at Airbnb"; latest version 2.0.0; description "Empty scaffold for the Viaduct application plugin." |
| 54 | PyPI | airflow (the vacated name) | source | 2018-11-27 | 2026-09-23 | https://pypi.org/pypi/airflow/json | Airbnb gave away a name as well as a codebase | (E) summary: "Placeholder for the old Airflow package"; single release 0.6 on 2018-11-27; home page points at github.com/apache/incubator-airflow |
| 55 | PyPI | knowledge-repo release history | source | 2016-09-27 → 2023-02-22 | 2026-09-23 | https://pypi.org/pypi/knowledge-repo/json | The internal knowledge tool shipped for six and a half years and stopped | (R) 32 releases; first 0.6.1 on 2016-09-27; latest 0.9.3 on 2023-02-22 |
| 56 | Airbnb | airbnb/streamalert | source | 2026-09-23 | 2026-09-23 | https://github.com/airbnb/streamalert | Another unarchived, unmaintained security project presented in the present tense | (E) README opens "StreamAlert is a serverless, real-time data analysis framework which empowers you to ingest, analyze, and alert on data from any environment"; 2.9k stars; not archived |
| 57 | Airbnb | airbnb/agent-harness-optimizer | source | 2026-08-31 | 2026-09-23 | https://github.com/airbnb/agent-harness-optimizer | The 2026 cohort of published work is agent tooling, not infrastructure | (E) "Agent Harness Optimizer (AHO) is a benchmark-agnostic framework for automatically optimizing LLM agent harnesses."; Apache-2.0; 5 stars; one commit on main |
| 58 | Airbnb | airbnb/lottie-ios releases | source | 2023 → 2024 | 2026-09-23 | https://github.com/airbnb/lottie-ios/releases | Shipped defects are visible in release notes even where no postmortem exists | (E) 4.3.4 release note: "Fix parsing regression in 4.3.0 from addition of parsing layer effects"; 4.4.1: "Fix crash in Main Thread rendering engine path interpolation implementation" |
Tier mix
postmortem 3 · source 24 · adr 6 · blog 9 · casestudy 0 · paper 0 · talk 0 ·
vendor 0.
Distinct hosts: github.com, raw.githubusercontent.com, repo1.maven.org, registry.npmjs.org, rubygems.org, pypi.org, hub.docker.com, plugins.gradle.org — eight.
Organisations with production material in the corpus: Airbnb (primary), Slack (the upstream of the log-search fork), the Istio project (the upstream of the mesh fork). This is a single-company guide by design; the cross-organisation breadth the skill normally asks for is deliberately traded for depth on one decade.