10 interesting stories served every morning and every evening.

Gemini 3.5: frontier intelligence with action

blog.google

May 19, 2026

Gemini 3.5 is built to help you ex­e­cute com­plex, agen­tic work­flows.

In this story

Gemini 3.5 Flash

Frontier in­tel­li­gence, ex­cep­tional speed

Agentic tasks at scale

Richer graph­ics

Real-world im­pact

Personal AI agents

Built with Frontier safe­guards

Available to­day

Today, we’re in­tro­duc­ing Gemini 3.5, our lat­est fam­ily of mod­els com­bin­ing fron­tier in­tel­li­gence with ac­tion. This rep­re­sents a ma­jor leap for­ward in build­ing more ca­pa­ble, in­tel­li­gent agents. We’re kick­ing off the se­ries by re­leas­ing 3.5 Flash. It de­liv­ers fron­tier per­for­mance for agents and cod­ing, ex­celling at com­plex long-hori­zon tasks that de­liver real-world util­ity.

3.5 Flash is avail­able to­day to bil­lions of peo­ple glob­ally:

For every­one via the Gemini app and AI Mode in Google Search

For de­vel­op­ers in our agent-first de­vel­op­ment plat­form Google Antigravity and Gemini API in Google AI Studio and Android Studio

For en­ter­prises in Gemini Enterprise Agent Platform and Gemini Enterprise.

We’re also hard at work on 3.5 Pro. It’s al­ready be­ing used in­ter­nally, and we look for­ward to rolling it out next month.

3.5 Flash: fron­tier per­for­mance for agents and cod­ing

Gemini 3.5 Flash de­liv­ers in­tel­li­gence that ri­vals large flag­ship mod­els on mul­ti­ple di­men­sions, at the speeds you have come to ex­pect from the Flash se­ries. It’s our strongest agen­tic and cod­ing model yet, out­per­form­ing Gemini 3.1 Pro on chal­leng­ing cod­ing and agen­tic bench­marks like Terminal-Bench 2.1 (76.2%), GDPval-AA (1656 Elo) and MCP Atlas (83.6%), and lead­ing in mul­ti­modal un­der­stand­ing (84.2% on CharXiv Reasoning). When look­ing at out­put to­kens per sec­ond, it is 4 times faster than other fron­tier mod­els.

Landing in the top-right quad­rant of the Artificial Analysis in­dex, 3.5 Flash de­liv­ers fron­tier-level in­tel­li­gence at ex­cep­tional speed — prov­ing you no longer have to trade qual­ity for la­tency.

3.5 Flash: agen­tic tasks at scale

This bal­ance of speed and per­for­mance makes 3.5 Flash ideal for tack­ling long-hori­zon agen­tic tasks. What used to take a de­vel­oper days or an au­di­tor weeks, 3.5 Flash can now help com­plete in a frac­tion of the time, of­ten at less than half the cost of other fron­tier mod­els. It rapidly plans, builds and it­er­ates to solve real-world prob­lems, whether it’s de­vel­op­ing new ap­pli­ca­tions, main­tain­ing code­bases or help­ing to pre­pare fi­nan­cial doc­u­ments.

When cou­pled with the up­dated Antigravity har­ness, 3.5 Flash be­comes a pow­er­ful en­gine for de­ploy­ing col­lab­o­ra­tive sub­agents to tackle prob­lems at scale for the most de­mand­ing use cases. Under su­per­vi­sion, it can re­li­ably ex­e­cute multi-step work­flows and cod­ing tasks while sus­tain­ing fron­tier per­for­mance.

Powered by Antigravity, 3.5 Flash ex­e­cutes multi-step work­flows to au­to­mat­i­cally re­name and cat­e­go­rize un­struc­tured as­sets based on dy­namic cri­te­ria.

Leveraging Antigravity, 3.5 Flash uses two agents to syn­the­size the AlphaZero pa­per and code a fully playable game in six hours.

3.5 Flash uses the Antigravity har­ness to trans­form a messy legacy code­base to Next.js.

3.5 Flash uses sub­agents to cre­ate new city land­scapes in Antigravity.

3.5 Flash uses two agents: a builder and a player, work­ing in a rapid self-im­prove­ment loop to de­velop a game in Antigravity.

Building on the strong mul­ti­modal foun­da­tion of Gemini 3, 3.5 Flash gen­er­ates richer, more in­ter­ac­tive web UIs and graph­ics.

3.5 Flash cre­ates in­ter­ac­tive an­i­ma­tions for a re­search pa­per on AI Studio.

3.5 Flash turns a plain text de­scrip­tion into in­ter­ac­tive hard­ware on AI Studio.

3.5 Flash ex­e­cutes mul­ti­ple con­cepts in par­al­lel to build a full brand­ing con­cept for a school fundraiser on AI Studio.

3.5 Flash gen­er­ates dif­fer­ent UX ap­proaches for a check­out flow in just 60 sec­onds on AI Studio.

3.5 Flash: real-world im­pact

3.5 Flash’s real-world agen­tic ca­pa­bil­i­ties are al­ready dri­ving mean­ing­ful progress for our de­vel­op­ers and en­ter­prises alike. In de­vel­op­ing the 3.5 model se­ries, we worked closely with in­dus­try part­ners to un­der­stand where toil and com­plex­ity arose in their work­flows. Partners are see­ing mean­ing­ful im­pact — from banks and fin­techs au­tomat­ing multi-week work­flows to data sci­ence teams un­earthing in­sights amidst com­plex data en­vi­ron­ments.

Shopify is run­ning sub­agents in par­al­lel to an­a­lyze com­plex data over a long hori­zon for more ac­cu­rate mer­chant growth fore­casts at a global scale.

Macquarie Bank is pi­lot­ing how 3.5 Flash can ac­cel­er­ate cus­tomer on­board­ing by rea­son­ing over com­plex 100+ page doc­u­ments, re­triev­ing rel­e­vant in­for­ma­tion and mak­ing re­li­able rec­om­men­da­tions with low la­tency.

Salesforce is in­te­grat­ing 3.5 Flash into Agentforce to re­li­ably au­to­mate com­pli­cated en­ter­prise tasks by de­ploy­ing mul­ti­ple sub­agents that re­tain con­text and ex­e­cute com­plex, multi-turn tool call­ing.

3.5 Flash is help­ing Ramp en­able smarter, more re­li­able OCR through mul­ti­modal un­der­stand­ing of com­plex in­voices com­bined with rea­son­ing over his­tor­i­cal pat­terns.

Xero is de­ploy­ing agents to au­tonomously man­age com­plex, multi-week work­flows, such as iden­ti­fy­ing sup­pli­ers and gath­er­ing in­for­ma­tion for 1099 tax forms, en­abling small busi­nesses to au­to­mate te­dious ad­min tasks.

Databricks is us­ing agen­tic work­flows to mon­i­tor and re­trieve real-time in­for­ma­tion, rea­son across mas­sive datasets to di­ag­nose is­sues, iden­tify fixes and pro­pose so­lu­tions for data sci­en­tists.

Personal AI agents: built with 3.5 Flash

3.5 Flash is now the de­fault model for the Gemini app and AI Mode in Search glob­ally. At I/O to­day, we showed how its agen­tic ca­pa­bil­i­ties are pow­er­ing new fea­tures to bring fron­tier-level in­tel­li­gence to your daily life.

The new Gemini Spark, your per­sonal AI agent, uses 3.5 Flash. It runs 24/7, help­ing you nav­i­gate your dig­i­tal life, tak­ing ac­tion on your be­half while un­der your di­rec­tion. We’re start­ing to roll out Gemini Spark to trusted testers to­day, and we’re plan­ning on bring­ing the Beta to Google AI Ultra sub­scribers in the US next week.

Gemini Spark uses 3.5 Flash to help ac­com­plish these tasks

Gemini Spark uses 3.5 Flash to help ac­com­plish these tasks

Gemini Spark uses 3.5 Flash to help ac­com­plish these tasks

Gemini Spark uses 3.5 Flash to help ac­com­plish these tasks

Gemini Spark uses 3.5 Flash to help ac­com­plish these tasks

The en­hanced agen­tic cod­ing ca­pa­bil­i­ties of 3.5 Flash are also de­liv­er­ing even more in­tel­li­gent ex­pe­ri­ences across Search, from in­tro­duc­ing new in­for­ma­tion agents that work for you 24/7 to un­lock­ing more dy­namic gen­er­a­tive UI ex­pe­ri­ences. Learn more in our blog post.

Search lever­ages 3.5 Flash to build an in­ter­ac­tive vi­sual ex­plain­ing Gyroid pat­terns.

Gemini 3.5: built with fron­tier safe­guards

Gemini 3.5 was de­vel­oped in ac­cor­dance with our Frontier Safety Framework. We have strength­ened our cy­ber and CBRN safe­guards, which means it’s less likely to gen­er­ate harm­ful con­tent, and to mis­tak­enly refuse to an­swer safe queries. We achieve this with new, more ad­vanced safety train­ing and mit­i­ga­tions, in­clud­ing in­ter­pretabil­ity tools that help check and un­der­stand the AIs in­ner rea­son­ing be­fore it pro­vides a re­sponse.

3.5 Flash is avail­able to­day

Gemini 3.5 Flash is gen­er­ally avail­able via Google Antigravity, the Gemini API in Google AI Studio and Android Studio, Gemini Enterprise Agent Platform and Gemini Enterprise. It’s also now avail­able to every­one in the Gemini app and AI Mode in Search. On be­half of the en­tire Gemini team, we can’t wait to see what you build.

Get more sto­ries from Google in your in­box.

Done. Just one step more.

Check your in­box to con­firm your sub­scrip­tion.

You are al­ready sub­scribed to our newslet­ter.

You can also sub­scribe with a

The Virtual OS Museum

virtualosmuseum.org

This is a vir­tual mu­seum of op­er­at­ing sys­tems (and stand­alone ap­pli­ca­tions) run­ning un­der em­u­la­tion, im­ple­mented as a Linux VM for QEMU, VirtualBox, or UTM.

A cus­tom em­u­la­tor-in­de­pen­dent launcher is pro­vided, and all OSes and em­u­la­tors are pre-in­stalled and pre-con­fig­ured. The launcher in­cludes a snap­shot fea­ture to quickly re­vert bro­ken in­stal­la­tions back to a work­ing state. Hypervisor in­stallers and short­cuts to run the VM on Windows, ma­cOS, and Linux are also in­cluded.

Want to see the ear­li­est res­i­dent mon­i­tors? The an­ces­tor of all mod­ern OSes (CTSS)? The ear­li­est ver­sions of Unix? The first OS with a desk­top metaphor GUI (Xerox Star Pilot/ViewPoint)? Early ver­sions of main­stream OSes? If you want to ex­plore his­tor­i­cal OSes and plat­forms with­out hav­ing to worry about con­fig­ur­ing/​in­stalling em­u­la­tors and OSes or cor­rupt­ing em­u­lated in­stal­la­tions, you’ve come to the right place.

Just about every well-known OS and plat­form (and also a lot of ob­scure ones) is in­cluded in some form, span­ning the en­tire his­tory of stored-pro­gram com­put­ing from the Manchester Baby of 1948 (the first stored-pro­gram com­puter) to the pre­sent day.

The cat­a­logue cov­ers, among many other things:

The ear­li­est main­frames: Manchester Baby test/​demo pro­grams, Mark 1 Scheme A/B/C/T (the ear­li­est ex­am­ples of sys­tem soft­ware that could be con­sid­ered as an OS), var­i­ous EDSAC soft­ware, etc.

Later main­frames and mini­com­put­ers: CTSS, MVS, VM/370, TOPS-10/20, ITS, Multics, RSX, RSTS, and more

Workstations and Unix vari­ants: PERQ OSes, SunOS, IRIX, OSF/1, A/UX, NeXTSTEP, Plan 9, var­i­ous BSDs, plus Linux dis­tri­b­u­tions across the decades, and more

Home com­put­ers: var­i­ous CP/M vari­ants, Apple II, Commodore 8-bit ma­chines, Atari 8-bit, MSX, Tandy TRS-80, BBC Micro, ZX Spectrum, Sharp MZ, and more

Personal com­puter op­er­at­ing sys­tems: var­i­ous DOS vari­ants, OS/2, BeOS, Windows from 1.0 to early Longhorn be­tas, clas­sic Mac OS through Mac OS X 10.5 PPC, and more

Mobile and em­bed­ded: PalmOS, EPOC/Symbian, Windows CE, Newton OS, early Android and iOS where em­u­la­tion per­mits, QNX, etc.

Research and ob­scure sys­tems: ZetaLisp, Smalltalk en­vi­ron­ments, Oberon, Plan 9, and many more that few peo­ple now have ever booted

If a work­ing ver­sion of an op­er­at­ing sys­tem ex­ists some­where, the goal is to have it here, in a form any­one can run on a rea­son­ably mod­ern lap­top/​desk­top.

By the Numbers

1700+

in­stalls

250+

plat­forms

570+

dis­tinct oses

1948-now

era

Downloads

Both a full and a lite ver­sion are avail­able. The full ver­sion ships with every­thing pre-down­loaded and runs of­fline. The lite ver­sion down­loads disk/​tape/​etc. im­ages for guest VMs the first time they are run. Automatic and man­ual up­dates are sup­ported on both edi­tions so new in­stal­la­tions land with­out re-down­load­ing the whole VM.

Download the Virtual OS Museum

Screenshots

0. Launcher main win­dow

1. Launcher VM info

2. Unix PC SVR2 and XVM RSX

AFROS (XaAES) 8.12 – 00 TeraDesk

AO-DOS 2.10 – 00 Intro

ATT Unix PC System V R2 3.51m - 00 File Manager and Terminal

A_UX 3.1.1 – 00 Finder with util­i­ties

Amiga UNIX (AMIX) 2.1c - 00 OpenLook desk­top with ap­pli­ca­tions

CP_M for PSI98 2.2 (6.31-Z) - 00 DIR

CSIDOS 3.32 – 00 Intro

Coherent 4.2.14 – 00 olwm with ap­pli­ca­tions

Domain_OS SR10.4 – 01 VUE desk­top

E_OS LX 0.2.5 – 00 Terminal

FlexOS 2.3 (COROS LS-B 4.01) - 03 About

GNO_ME 2.0.6 – 01 TMTerm

HP-UX 11i v1 (B.11.11) - 00 CDE with util­i­ties

Human68K 3.02 – 00 LHES

IBM 1130 DMS V2M12 - 00 LET list­ing

IBM OS_2 (Extended Edition) 1.1 – 00 Desktop Manager

IRIX 6.5.22m - 00 IMD with ap­pli­ca­tions

Inferno Fourth Edition (20100115) - 00 GUI with ap­pli­ca­tions

LisaOS 3.1 – 02 LisaDraw

MOS for BBC Master Compact 5.10 (Base) - 02 Desktop

Mac OS (Classic) 1.0 al­pha; Sony Test (System 7.0’, Finder 1983 – 10-04) - 00 Finder

Mac OS 9.0.4 – 00 Finder, Internet Explorer,and Help

Mach386 2.6 1.0 (X108_MSD) - 00 X11 with ap­pli­ca­tions

Minerva 1.98 (QL_E (shares disk im­ages with SMSQ_E QL_E)) - 00 Desktop with ap­pli­ca­tions

Minix 3.4.0rc6 – 00 X11 Terminal and Links

NeXTStep (68k) 3.3 – 00 Desktop with ap­pli­ca­tions

OS-9_x86 (a.k.a. OS-9000_x86) 6.1 – 00 XiBase

PSI-OS 12.2 – 00 Start

Plan 9 4th Edition - 01 acme filesys­tem server

QNX 1.2 – 00 boot

RISC OS 3.11 (Minimal (Old boot)) - 00 Desktop with ap­pli­ca­tions

SILLIAC soft­ware col­lec­tion - 00 Blob demo

SINIX (PC-X) 1.2 – 01 Login Prompt

SX-WINDOW 3.1 – 00 Desktop

Sharp Personal CP_M for MZ-2500 (MZ-6Z001) 1.0a - 00 VCCP

Softlanding Linux System 1.0 – 00 ls un­ame and ker­nel source

Solaris_SPARC 9 (s9_58shwpl3) - 00 CDE ter­mi­nal help and file man­ager

Syllable 0.5.2 – 00 Desktop with ap­pli­ca­tions

SymbOS 1.0 Beta - 01 About

Tru64 UNIX 5.1B - 00 CDE with util­i­ties

ULTRIX_VAX 4.0 – 00 DECwindows with ap­pli­ca­tions

UNICOS 10.0.0.2 – 01 X11 with util­i­ties

More screen­shots

Why this ex­ists

While the state of soft­ware preser­va­tion has im­proved sig­nif­i­cantly over the past two decades, many of the ex­ist­ing soft­ware preser­va­tion pro­jects are still not par­tic­u­larly ac­ces­si­ble.

When I started col­lect­ing em­u­la­tor im­ages (2003), there were only a few small archives of soft­ware im­ages and the cor­re­spond­ing doc­u­men­ta­tion, and rel­a­tively few em­u­la­tors for any­thing other than well-known con­sumer-ori­ented plat­forms. Nowadays there are many large archives of his­tor­i­cal soft­ware and doc­u­men­ta­tion, and a lot of em­u­la­tors for even a lot of very ob­scure plat­forms.

However, while such ef­forts are valu­able when it comes to keep­ing his­tor­i­cal soft­ware avail­able and runnable (and with­out them this pro­ject would have never been pos­si­ble; see the cred­its page for a list of em­u­la­tors, pre-in­stalled im­ages, and me­dia archives I have used), it of­ten still takes time and ef­fort to get runnable VM in­stal­la­tions from them. OSes may have com­pli­cated in­stall pro­ce­dures. Some may de­pend on par­tic­u­lar de­vice con­fig­u­ra­tions within an em­u­la­tor. Some will only run in cer­tain em­u­la­tor ver­sions, break­ing in later ones due to re­gres­sions. Some em­u­la­tors might have com­plex con­fig­u­ra­tion files, or may re­quire a spe­cific en­vi­ron­ment on the host sys­tem.

This pro­ject is an at­tempt to keep reach­able as much of the his­tory that’s been pre­served in var­i­ous places as pos­si­ble. Not the­o­ret­i­cally reach­able. Not bootable in prin­ci­ple if you as­sem­ble the right tool­chain on a Tuesday.” Reachable. You click an en­try, it runs, and where pos­si­ble it runs with soft­ware of the era al­ready loaded the way some­one might ac­tu­ally have used the ma­chine at the time.

The work be­hind it

This is the re­sult of over 20 years of col­lect­ing. OS in­stal­la­tions have been sourced from var­i­ous places. Some have been down­loaded as pre-in­stalled im­ages, whereas oth­ers were in­stalled from im­ages of orig­i­nal in­stall me­dia. Some were in­stalled in less than an hour, whereas oth­ers took al­most a week.

A de­cent num­ber only run in par­tic­u­lar em­u­la­tor ver­sions due to re­gres­sions in later ver­sions, and some em­u­la­tors needed mi­nor patches to run on mod­ern Linux or to play nice with the launcher. A few em­u­la­tors have been patched to run OSes that were pre­vi­ously bro­ken.

Many in­stal­la­tions also in­clude var­i­ous add-on soft­ware - ap­pli­ca­tions, de­vel­op­ment tools, games, util­i­ties, etc. - set up the way it ac­tu­ally might have been used.

This is still far from fin­ished; I have many more im­ages sit­ting around that I have yet to in­stall and em­u­la­tors I want to fix; check out my YouTube chan­nel, blog, or BlueSky to see what I’m cur­rently work­ing on.

Support the pro­ject

This is a per­sonal pro­ject, run and cu­rated by one per­son, sus­tained by pa­tience and time. If you find it in­ter­est­ing, the eas­i­est ways to sup­port it are:

Patreon for on­go­ing sup­port

Ko-fi for one-off con­tri­bu­tions

Discord/Fluxer to talk about it, ask ques­tions, or sug­gest new plat­forms/​OSes to add (new en­tries may not be added im­me­di­ately since I’ve got a lot of stuff to add)

GitLab to sub­mit bug re­ports or patches re­lated to the launcher and scripts

Telling some­one who works on, writes about, or stud­ies the his­tory of com­put­ing that this ex­ists

Minnesota becomes first state to ban prediction markets

www.npr.org

Minnesota has en­acted the most far-reach­ing crack­down on mas­sively pop­u­lar ser­vices like Kalshi and Polymarket.

Steve Karnowski/Associated Press

hide cap­tion

tog­gle cap­tion

Steve Karnowski/Associated Press

Minnesota Gov. Tim Walz has signed the na­tion’s first law ban­ning pre­dic­tion mar­ket sites from op­er­at­ing in the state, and in re­sponse, the Trump ad­min­is­tra­tion has sued, tee­ing up a le­gal bat­tle over the most far-reach­ing crack­down on pop­u­lar ser­vices like Kalshi and Polymarket.

It comes as states con­front a grow­ing stand­off with the Trump ad­min­is­tra­tion over how to reg­u­late the in­dus­try, which al­lows peo­ple to bet on vir­tu­ally any­thing.

The new state law makes it a crime to host or ad­ver­tise a pre­dic­tion mar­ket, which it de­fines as a sys­tem that lets con­sumers place a wa­ger on a fu­ture out­come, like sports, elec­tions, live en­ter­tain­ment, some­one’s word choice and world af­fairs.

The pro­hi­bi­tion ex­tends to ser­vices sup­port­ing pre­dic­tion mar­kets, like vir­tual pri­vate net­works, that could al­low con­sumers to dis­guise their lo­ca­tion and get around the ban.

It would force pre­dic­tion mar­ket sites like Kalshi and Polymarket to leave the state, or face pos­si­ble felony charges. The law takes ef­fect in August.

We as a state should de­cide how best and what reg­u­la­tions we think should at­tach to gam­bling, to pro­tect pub­lic safety, to pro­tect our kids,” said Minnesota Rep. Emma Greenman, the Democrat who in­tro­duced the mea­sure.

The law has a carve-out for event con­tracts that serve as an in­sur­ance pol­icy in the event of harm, or loss sus­tained” and for the pur­chase of se­cu­ri­ties and other com­modi­ties.

The Commodity Futures Trading Commission’s law­suit seeks to block the law be­fore it starts, ar­gu­ing the pre­dic­tion mar­ket in­dus­try should be ex­clu­sively reg­u­lated by fed­eral of­fi­cials.

This Minnesota law turns law­ful op­er­a­tors and par­tic­i­pants in pre­dic­tion mar­kets into felons overnight,” said CFTC Chairman Michael Selig. Minnesota farm­ers have re­lied on crit­i­cal hedg­ing prod­ucts on weather and crop-re­lated events for decades to mit­i­gate their risks. Governor Walz chose to put spe­cial in­ter­ests first and American farm­ers and in­no­va­tors last.”

An up­dated ver­sion of the pre­dic­tion mar­ket bill al­lows trad­ing on weather, an ex­cep­tion that fol­lowed push­back from the agri­cul­tural in­dus­try, which has his­tor­i­cally used fu­tures trad­ing on weather as a hedge against storms and other in­clement weather that can af­fect a har­vest. Walz is ex­pected to sign it soon.

Besides Minnesota, bills crack­ing down on the pre­dic­tion mar­ket in­dus­try have been in­tro­duced in 14 other states, ac­cord­ing to the National Conference of State Legislators. Two of those states, Hawaii and North Carolina, have pend­ing bills seek­ing to ban the in­dus­try statewide.

Experts say the cloud of le­gal un­cer­tainty hang­ing over pre­dic­tion mar­kets apps have not slowed their rapid growth.

The states are us­ing any tac­tic they can to go af­ter the pre­dic­tion mar­ket com­pa­nies,” said Melinda Roth, a pro­fes­sor at Washington and Lee University’s School of Law, who stud­ies the in­dus­try. But they’ve em­barked on a too big to fail strat­egy and have be­come quite main­stream,” she said. It will be hard to put that ge­nie back in the bot­tle.”

A le­gal fight over the Minnesota ban is ex­pected. Questions over whether states or the fed­eral gov­ern­ment should over­see the pre­dic­tion mar­ket in­dus­try have al­ready trig­gered more than 20 law­suits. One of those cases, in Nevada, led to Kalshi paus­ing its sports bet­ting in the state af­ter a judge found it indistinguishable” from state-reg­u­lated sports gam­bling.

The Commodity Futures Trading Commission has filed fed­eral law­suits against five states, in­clud­ing Arizona, Wisconsin and New York, at­tempt­ing to over­ride state reg­u­la­tors’ at­tempts to rein in the bet­ting sites.

The CFTC has ar­gued it has ex­clu­sive ju­ris­dic­tion over pre­dic­tion mar­kets, even though for­mer CFTC mem­bers and le­gal ex­perts say bets on foot­ball games, words President Trump might say dur­ing a press con­fer­ence and whether Ricky Martin will make an ap­pear­ance at the Super Bowl are mat­ters far out­side its tra­di­tional scope.

In a state­ment to NPR, Kalshi spokes­woman Elisabeth Diana said ban­ning pre­dic­tion mar­kets is a blatant vi­o­la­tion” of the law.

Minnesota ban­ning pre­dic­tion mar­kets is like try­ing to ban the New York Stock Exchange,” said Diana, adding that this ac­tively harms users be­cause it re­duces com­pe­ti­tion and dri­ves ac­tiv­ity off­shore.”

A Polymarket spokesman told NPR that Minnesota’s ban runs counter to the fed­eral gov­ern­men­t’s established frame­work” for reg­u­lat­ing pre­dic­tion mar­kets.

Tribal-owned casi­nos op­er­ate in Minnesota, but on­line gam­bling and sports bet­ting are not le­gal in the state.

Prediction mar­kets like Kalshi and Polymarket have given ac­cess to sports bet­ting to peo­ple in states where the ac­tiv­ity is pro­hib­ited, since the Trump ad­min­is­tra­tion reg­u­lates the sites as a type of event con­tract,” rather than gam­bling, which typ­i­cally is over­seen by state gam­ing au­thor­i­ties.

Nonetheless, sports gam­bling pow­ers the sites. On Kalshi, for in­stance, more than 85% of trad­ing ac­tiv­ity is re­lated to a sport­ing event, some of those trades be­ing parlays,” high-risk wa­gers that mul­ti­ple things, points scored, fouls, passes, will all hap­pen.

Bettors on the sites are mak­ing bil­lions of dol­lars in trades every week, even as ques­tions around in­sider trad­ing and how the mar­kets can cre­ate per­verse in­cen­tives for peo­ple to ma­nip­u­late real world out­comes con­tinue to vex the com­pa­nies.

Minnesota Public Radio News re­porters Dana Ferguson and Peter Cox con­tributed re­port­ing to this story.

A new era for AI Search

blog.google

May 19, 2026

We’re bring­ing our ad­vanced model ca­pa­bil­i­ties to Search with new AI fea­tures, en­abling you to use agents just by ask­ing a ques­tion. We’re also in­tro­duc­ing a new, in­tel­li­gent AI-powered Search box, mark­ing its biggest up­grade in over 25 years.

In this story

Powerful AI

Search agents

Agentic cod­ing

Personal Intelligence

The goal of Search has al­ways been sim­ple: to help you ask any­thing on your mind — from quick facts to the deep, com­plex or hy­per-spe­cific ques­tions that can be hard to ar­tic­u­late.

To make this pos­si­ble, we’ve con­tin­ued to reimag­ine what Search can do with AI. The mo­men­tum has been in­cred­i­ble: Just one year af­ter its de­but, AI Mode has sur­passed one bil­lion monthly users, with queries more than dou­bling every quar­ter since launch. As peo­ple have re­al­ized just how much more Search can do for them, they’re search­ing more than ever be­fore — so much so that last quar­ter, we saw queries reach an all-time high.

Today at I/O, we shared the next step in our jour­ney to bring to­gether the best of a search en­gine with the best of AI. Here’s a look at what we an­nounced.

Powerful AI, right in Search

Starting to­day, we’re up­grad­ing Search with Gemini 3.5 Flash — our newest Flash model de­liv­er­ing sus­tained fron­tier per­for­mance for agents and cod­ing — as the new de­fault model in AI Mode for every­one glob­ally.

Because your cu­rios­ity does­n’t al­ways fit into key­words, we’re also in­tro­duc­ing the biggest up­grade to our Search box in over 25 years — now com­pletely reimag­ined with AI. This in­tel­li­gent Search box puts our most pow­er­ful AI tools right at your fin­ger­tips, mak­ing it eas­ier to ask your ques­tions.

It’s more in­tu­itive than ever, dy­nam­i­cally ex­pand­ing to give you space to de­scribe ex­actly what you need. Designed to an­tic­i­pate your in­tent, it also helps you for­mu­late your ques­tion with AI-powered sug­ges­tions that go be­yond au­to­com­plete. And you can search across modal­i­ties, us­ing text, im­ages, files, videos or Chrome tabs as in­puts. You’ll con­tinue to get a range of re­sults from Search, just like you do to­day. The new in­tel­li­gent Search box is start­ing to roll out to­day, in all coun­tries and lan­guages where AI Mode is avail­able.

We’re also mak­ing it even sim­pler to con­tinue the con­ver­sa­tion with Search. You can eas­ily ask a fol­low-up ques­tion right from an AI Overview, and flow into a con­ver­sa­tional back and forth with AI Mode. Your con­text stays with you, and as you ex­plore more deeply, the links and sup­port­ing ar­ti­cles get even more rel­e­vant. This seam­less ex­pe­ri­ence is live to­day across desk­top and mo­bile, world­wide.

Search agents

We’re en­ter­ing the era of Search agents, where you can eas­ily cre­ate, cus­tomize and man­age mul­ti­ple AI agents for your many tasks, right in Search. We’re start­ing with in­for­ma­tion agents. Operating in the back­ground, 24/7, these agents in­tel­li­gently rea­son across in­for­ma­tion to find ex­actly what you need at ex­actly the right mo­ment.

With in­for­ma­tion agents, you can stay up­dated on what­ever mat­ters most to you. Your agent will in­tel­li­gently look across every­thing on the web, like blogs, news sites and so­cial posts, plus our fresh­est data, such as real-time info on fi­nance, shop­ping and sports, to mon­i­tor for changes re­lated to your spe­cific ques­tion.

It will send you an in­tel­li­gent, syn­the­sized up­date, with the abil­ity to take ac­tion. So if you’re apart­ment hunt­ing, you can brain dump all of the ex­act re­quire­ments you’re look­ing for, and your agent will con­tin­u­ously scan for you, no­ti­fy­ing you when list­ings meet your needs. Or if you want to know the in­stant any of your fa­vorite pro ath­letes an­nounce a sneaker col­lab, your agent will let you know when a new drop lands so you don’t miss out. Information agents will launch first for Google AI Pro & Ultra sub­scribers this sum­mer.

We’re also ex­pand­ing agen­tic book­ing ca­pa­bil­i­ties in Search to a wide range of new tasks, in­clud­ing lo­cal ex­pe­ri­ences and ser­vices. Just share your spe­cific cri­te­ria — like find­ing a pri­vate karaoke room for six on a Friday night that serves food late — and Search brings to­gether the lat­est pric­ing and avail­abil­ity with di­rect links to fin­ish book­ing through the provider of your choice. And for se­lect cat­e­gories like home re­pair, beauty or pet care, you can ask Google to call busi­nesses on your be­half. These ca­pa­bil­i­ties will roll out to every­one in the U.S. this sum­mer.

We’re also in­tro­duc­ing new agen­tic ca­pa­bil­i­ties to help you shop in Search. Read more in our Shopping blog post.

Agentic cod­ing in Search

We’re bring­ing the power of Google Antigravity and the agen­tic cod­ing ca­pa­bil­i­ties of Gemini 3.5 Flash right into Search. Search can build the ideal re­sponse, in the right for­mat for your ques­tion — com­pletely on the fly. So you can get cus­tom gen­er­a­tive UI, in­clud­ing vi­sual tools and sim­u­la­tions, tai­lored pre­cisely to your needs.

Whether you want to wrap your mind around as­tro­physics or vi­su­al­ize how your watch works, Search can de­sign cus­tom lay­outs, as­sem­bling com­po­nents (like in­ter­ac­tive vi­su­als, ta­bles, graphs or sim­u­la­tions) in real-time. These gen­er­a­tive UI ca­pa­bil­i­ties will be avail­able for every­one in Search this sum­mer, free of charge.

But of­ten, you aren’t ask­ing one-off ques­tions — you have an on­go­ing task you find your­self search­ing for over and over, like plan­ning a wed­ding or man­ag­ing a home move. Search can go a step fur­ther, build­ing you cus­tom dash­boards or track­ers that you can con­tinue to come back to and make progress on. You can think of these like mini apps for your own spe­cific tasks.

Say you’re look­ing to es­tab­lish a new health and well­ness rou­tine. You can ask Search to build you a cus­tom fit­ness tracker. Search will code it for you, tap­ping into fresh, real-time sources in­clud­ing re­views, live maps and lo­cal data like the weather, so you get a tracker that works for you, help­ing you stay on track week af­ter week.

You’ll be able to build cus­tom ex­pe­ri­ences with Antigravity, like mini apps, right in Search in the com­ing months, start­ing first for Google AI Pro and Ultra sub­scribers in the U.S.

Expanded Personal Intelligence in Search

Finally, for AI to be most help­ful, it should­n’t just know the world’s in­for­ma­tion, it should un­der­stand your con­text, too. So to­day, we’re ex­pand­ing Personal Intelligence in AI Mode to more peo­ple in nearly 200 coun­tries and ter­ri­to­ries across 98 lan­guages — no sub­scrip­tion re­quired. You can se­curely con­nect apps like Gmail and Google Photos, and soon Google Calendar. Personal Intelligence was de­signed with trans­parency, choice and con­trol at its core. You’re al­ways in con­trol — you choose if and when you want to con­nect apps like Gmail and Google Photos.

This is the next chap­ter of Google Search: in­tel­li­gent AI that puts the world’s in­for­ma­tion to work for you. So ask what­ev­er’s on your mind, and Search can now do more for you than ever be­fore.

Get more sto­ries from Google in your in­box.

Done. Just one step more.

Check your in­box to con­firm your sub­scrip­tion.

You are al­ready sub­scribed to our newslet­ter.

You can also sub­scribe with a

About the au­thor

Elizabeth Reid

VP, Search

Elizabeth (Liz) Reid leads the Search or­ga­ni­za­tion at Google. Liz joined Google in 2003 as the com­pa­ny’s first fe­male en­gi­neer in its New York of­fice and was part of the team that built Google Local, the foun­da­tion for much of the lo­cal in­for­ma­tion within Google Maps to­day. Since 2021, Liz has led teams reimag­in­ing the Search ex­pe­ri­ence by help­ing peo­ple ask ques­tions in en­tirely new ways, like with Lens and mul­ti­search; mak­ing au­then­tic, hu­man voices more ac­ces­si­ble; and trans­form­ing how peo­ple nav­i­gate and un­der­stand in­for­ma­tion with gen­er­a­tive AI.

GitHub - antoinezambelli/forge: A Python framework for self-hosted LLM tool-calling and multi-step agentic workflows

github.com

A re­li­a­bil­ity layer for self-hosted LLM tool-call­ing. Forge lifts an 8B lo­cal model to the top of its class on multi-step agen­tic work­flows through guardrails (rescue pars­ing, retry nudges, step en­force­ment) and con­text man­age­ment (VRAM-aware bud­gets, tiered com­paction). The cur­rent top self-hosted con­fig (Ministral-3 8B Instruct Q8 on llama-server) scores 86.5% across forge’s 26-scenario eval suite — and 76% on the hard­est tier.

Three ways to use it:

WorkflowRunner — Define tools, pick a back­end, run struc­tured agent loops. Forge man­ages the full life­cy­cle: sys­tem prompts, tool ex­e­cu­tion, con­text com­paction, and guardrails. SlotWorker adds pri­or­ity-queued ac­cess to a shared in­fer­ence slot with auto-pre­emp­tion — for multi-agent ar­chi­tec­tures where spe­cial­ist work­flows share a GPU slot. Best when you’re build­ing on forge di­rectly.

WorkflowRunner — Define tools, pick a back­end, run struc­tured agent loops. Forge man­ages the full life­cy­cle: sys­tem prompts, tool ex­e­cu­tion, con­text com­paction, and guardrails. SlotWorker adds pri­or­ity-queued ac­cess to a shared in­fer­ence slot with auto-pre­emp­tion — for multi-agent ar­chi­tec­tures where spe­cial­ist work­flows share a GPU slot. Best when you’re build­ing on forge di­rectly.

Guardrails mid­dle­ware — Use forge’s re­li­a­bil­ity stack (composable mid­dle­ware) in­side your own or­ches­tra­tion loop. You con­trol the loop; forge val­i­dates re­sponses, res­cues mal­formed tool calls, and en­forces re­quired steps.

Guardrails mid­dle­ware — Use forge’s re­li­a­bil­ity stack (composable mid­dle­ware) in­side your own or­ches­tra­tion loop. You con­trol the loop; forge val­i­dates re­sponses, res­cues mal­formed tool calls, and en­forces re­quired steps.

Proxy server — Drop-in OpenAI-compatible proxy (python -m forge.proxy) that sits be­tween any client (opencode, Continue, aider, etc.) and a lo­cal model server. Applies guardrails trans­par­ently — the client thinks it’s talk­ing to a smarter model.

Proxy server — Drop-in OpenAI-compatible proxy (python -m forge.proxy) that sits be­tween any client (opencode, Continue, aider, etc.) and a lo­cal model server. Applies guardrails trans­par­ently — the client thinks it’s talk­ing to a smarter model.

Supports Ollama, llama-server (llama.cpp), Llamafile, and Anthropic as back­ends.

Requirements

Python 3.12+

A run­ning LLM back­end (see be­low)

Install

pip in­stall forge-guardrails # core only pip in­stall forge-guardrails[anthropic]” # + Anthropic client

For de­vel­op­ment:

git clone https://​github.com/​an­toinezam­belli/​forge.git cd forge pip in­stall -e .[dev]”

Backend setup (pick one)

llama-server (recommended — top 10 eval con­figs all run on llama-server):

# Install from https://​github.com/​ggml-org/​llama.cpp/​re­leases llama-server -m path/​to/​Minis­tral-3 – 8B-In­struct-2512-Q8_0.gguf –jinja -ngl 999 –port 8080

Ollama (alternative — eas­ier setup, slightly weaker on harder work­loads):

# Install from https://​ol­lama.com/​down­load ol­lama pull minis­tral-3:8b-in­struct-2512-q4_K_M

Anthropic (API, no lo­cal GPU needed):

pip in­stall -e .[anthropic]” ex­port ANTHROPIC_API_KEY=sk-…

See Backend Setup for full in­struc­tions and Model Guide for which model fits your hard­ware.

Quick Start

im­port asyn­cio from py­dan­tic im­port BaseModel, Field from forge im­port ( Workflow, ToolDef, ToolSpec, WorkflowRunner, OllamaClient, ContextManager, TieredCompact, )

def get_weather(city: str) -> str: re­turn f”72°F and sunny in {city}”

class GetWeatherParams(BaseModel): city: str = Field(description=“City name”)

work­flow = Workflow( name=“weather”, de­scrip­tion=“Look up weather for a city.”, tools={ get_weather”: ToolDef( spec=Tool­Spec( name=“get_weather”, de­scrip­tion=“Get cur­rent weather”, pa­ra­me­ters=GetWeath­er­Params, ), callable=get_weather, ), }, re­quired_steps=[], ter­mi­nal_­tool=“get_weather”, sys­tem_promp­t_tem­plate=“You are a help­ful as­sis­tant. Use the avail­able tools to an­swer the user.”, )

async def main(): client = OllamaClient(model=“ministral-3:8b-instruct-2512-q4_K_M”, rec­om­mend­ed_sam­pling=True) ctx = ContextManager(strategy=TieredCompact(keep_recent=2), bud­get_­to­kens=8192) run­ner = WorkflowRunner(client=client, con­tex­t_­man­ager=ctx) await run­ner.run(work­flow, What’s the weather in Paris?“)

asyn­cio.run(main())

For multi-step work­flows, multi-turn con­ver­sa­tions, and back­end auto-man­age­ment, see the User Guide. If you’re build­ing a long-run­ning ses­sion (CLI, chat server, voice as­sis­tant), see the long-run­ning ses­sion ad­vi­sory for im­por­tant guid­ance on fil­ter­ing tran­sient mes­sages.

Proxy Server

Drop-in re­place­ment for a lo­cal model server. Point any OpenAI-compatible client at the proxy and get forge’s guardrails for free.

# External mode — you man­age llama-server, forge prox­ies it python -m forge.proxy –backend-url http://​lo­cal­host:8080 –port 8081

# Managed mode — forge starts llama-server and the proxy to­gether python -m forge.proxy –backend lla­maserver –gguf path/​to/​model.gguf –port 8081

Then con­fig­ure your client to use http://​lo­cal­host:8081/​v1 as the API base URL.

Note: The proxy au­to­mat­i­cally in­jects a syn­thetic re­spond tool when tools are pre­sent in the re­quest. The model calls re­spond(mes­sage=”…“) in­stead of pro­duc­ing bare text, keep­ing it in tool-call­ing mode where forge’s full guardrail stack ap­plies. The re­spond call is stripped from the out­bound re­sponse — the client sees a nor­mal text re­sponse (finish_reason: stop”) and never knows the tool ex­ists. This is es­sen­tial for small lo­cal mod­els (~8B), which can­not be trusted to choose cor­rectly be­tween text and tool calls — guid­ing them to a tool is a must. See ADR-013 for the full analy­sis.

Backends

See Backend Setup for in­stal­la­tion and Model Guide for which model to pick.

Running Tests

python -m pytest tests/ -v –tb=short

python -m pytest tests/ –cov=forge –cov-report=term-missing

Eval Harness

26 sce­nar­ios mea­sur­ing how re­li­ably a model + back­end combo nav­i­gates multi-step tool-call­ing work­flows — split into an OG-18 base­line tier and an 8-scenario ad­vanced_rea­son­ing tier for top-end sep­a­ra­tion. See Eval Guide for full CLI ref­er­ence.

# llama-server (start in an­other ter­mi­nal first; see Eval Guide) python -m tests.eval.eval_run­ner –backend lla­mafile –llamafile-mode prompt –gguf path/to/Ministral-3 – 8B-Instruct-2512-Q8_0.gguf” –runs 10 –stream –verbose

# Batch eval (JSONL out­put, au­to­matic re­sume) python -m tests.eval.batch_e­val –config all –runs 50

# Reports (ASCII table, HTML dash­board, mark­down views) python -m tests.eval.re­port eval_re­sults.jsonl

Project Structure

src/​forge/ __init__.py # Public API ex­ports er­rors.py # ForgeError hi­er­ar­chy server.py # set­up_back­end(), ServerManager, BudgetMode core/ mes­sages.py # Message, MessageRole, MessageType, MessageMeta work­flow.py # ToolSpec, ToolDef, ToolCall, TextResponse, Workflow in­fer­ence.py # run_in­fer­ence() — shared front half (compact, fold, val­i­date, retry) run­ner.py # WorkflowRunner — the agen­tic loop slot_­worker.py # SlotWorker — pri­or­ity-queued slot ac­cess steps.py # StepTracker guardrails/ nudge.py # Nudge dat­a­class re­sponse_­val­ida­tor.py # ResponseValidator, ValidationResult step_en­forcer.py # StepEnforcer, StepCheck er­ror_­tracker.py # ErrorTracker clients/ base.py # ChunkType, StreamChunk, LLMClient pro­to­col ol­lama.py # OllamaClient (native FC) lla­mafile.py # LlamafileClient (native FC or prompt-in­jected) an­thropic.py # AnthropicClient (frontier base­line) con­text/ man­ager.py # ContextManager, CompactEvent strate­gies.py # CompactStrategy, NoCompact, TieredCompact, SlidingWindowCompact hard­ware.py # HardwareProfile, de­tec­t_hard­ware() prompts/ tem­plates.py # Tool prompt builders (prompt-injected path) nudges.py # Retry and step-en­force­ment nudge tem­plates tools/ re­spond.py # Synthetic re­spond tool (respond_tool(), re­spond_spec()) proxy/ proxy.py # ProxyServer — pro­gram­matic start/​stop API server.py # Raw asyn­cio HTTP server, SSE stream­ing han­dler.py # Request han­dler — bridge be­tween HTTP and run_in­fer­ence con­vert.py # OpenAI mes­sages ↔ forge Messages con­ver­sion tests/ unit/ # 865 de­ter­min­is­tic tests — no LLM back­end re­quired eval/ # Eval har­ness — model qual­i­fi­ca­tion against real back­ends

Documentation

User Guide — Usage pat­terns, multi-turn, con­text man­age­ment, guardrails, slot worker, long-run­ning ses­sion ad­vi­sory

Model Guide — Which model and back­end for your hard­ware

Backend Setup — Backend in­stal­la­tion and server setup

Eval Guide — Eval har­ness CLI ref­er­ence, batch eval

Architecture — Full de­sign doc­u­ment

Workflow Internals — Workflow de­sign and run­ner in­ter­nals

Contributing — How to set up, test, and add new back­ends or sce­nar­ios

Paper

The forge guardrail frame­work and ab­la­tion study are pub­lished as:

Zambelli, A. Forge: A Reliability Layer for Self-Hosted LLM Tool-Calling. https://​doi.org/​10.1145/​3786335.3813193

Zambelli, A. Forge: A Reliability Layer for Self-Hosted LLM Tool-Calling. https://​doi.org/​10.1145/​3786335.3813193

A pre-pub­li­ca­tion preprint is also avail­able at docs/​forge_ieee_preprint.pdf — kept as a his­tor­i­cal ar­ti­fact. Cite the pub­lished ver­sion above; the DOI link may not re­solve im­me­di­ately de­pend­ing on the pub­lish­er’s re­lease tim­ing.

License

MIT — Copyright (c) 2025 – 2026 Antoine Zambelli

Railway Status

status.railway.com

This sta­tus page re­ports in­ci­dents with sig­nif­i­cant, wide­spread user im­pact. Smaller or iso­lated is­sues won’t show up here. If you are ex­pe­ri­enc­ing an is­sue, please re­port it at sta­tion.rail­way.com.

Incident Report: May 19, 2026 - GCP Account Suspension

blog.railway.com

Table of Contents

Impact

Incident Timeline

What Happened?

Preventative Measures

🚅

This re­port re­flects what we know at time of pub­li­ca­tion and may be up­dated pend­ing Google Cloud’s in­ter­nal re­view.

Railway ex­pe­ri­enced a plat­form-wide ser­vice dis­rup­tion due to Google Cloud in­cor­rectly plac­ing our ac­count in a sus­pended sta­tus. This re­sulted in a tem­po­rary loss of ser­vice for all GCP hosted in­fra­struc­ture. This in­fra­struc­ture sup­ports our dash­board, API, and pieces of our net­work in­fra­struc­ture. As cached net­work routes ex­pired, the out­age ex­tended be­yond GCP to af­fect all Railway work­loads.

Below, we walk through what hap­pened, how we re­sponded, and what we’re do­ing to pre­vent a sim­i­lar in­ci­dent in the fu­ture.

Impact

On May 19, 2026 be­tween 22:20 UTC and ap­prox­i­mately 06:14 UTC on May 20 (~8 hours), Railway ex­pe­ri­enced a plat­form-wide out­age af­ter Google Cloud sus­pended ser­vices on our pro­duc­tion ac­count. This took our API, con­trol plane and data­bases of­fline, along with com­pute in­fra­struc­ture hosted on Google Cloud.

Users im­me­di­ately ex­pe­ri­enced 503 er­rors on the dash­board and API, in­clud­ing no healthy up­stream” and unconditional drop over­load” mes­sages, and were un­able to log in. All work­loads hosted on Google Cloud com­pute were taken of­fline.

While work­loads on our own Railway Metal and AWS burst-cloud en­vi­ron­ments re­mained up, Railway’s edge prox­ies rely on a Google Cloud-hosted con­trol plane API to pop­u­late their rout­ing ta­bles, caus­ing the out­age to cas­cade be­yond Google Cloud. As the route caches ex­pired, these other work­loads be­came un­reach­able, re­sult­ing in re­turn­ing 404 er­rors as the net­work con­trol plane could no longer re­solve routes to ac­tive in­stances. At peak im­pact, all Railway work­loads across all re­gions were ren­dered un­reach­able.

As we re­cov­ered our Google Cloud en­vi­ron­ment, builds and de­ploy­ments were blocked plat­form-wide while we re­stored the in­di­vid­ual ser­vices. Once the en­tirety of our in­fra­struc­ture was re­stored, a sig­nif­i­cant back­log of queued de­ploys was grad­u­ally drained to avoid over­whelm­ing the plat­form. In par­al­lel, GitHub be­gan rate-lim­it­ing Railway’s OAuth and web­hook in­te­gra­tions, tem­porar­ily block­ing lo­gins and builds. The vol­ume of these calls in­creased as a re­sult of our caches be­ing cleared from the Google Cloud out­age. As a side ef­fect, Terms-of-service ac­cep­tance records were also re­set, prompt­ing users to re-ac­cept on their next visit to the dash­board.

We take full re­spon­si­bil­ity for the ar­chi­tec­tural de­ci­sions that al­lowed a sin­gle up­stream provider ac­tion to cas­cade into a plat­form-wide out­age, and de­tail be­low what hap­pened, how we re­cov­ered, and the changes we are mak­ing to pre­vent this from hap­pen­ing again.

Incident Timeline

May 19, 22:10 UTC - Our au­to­mated mon­i­tor­ing de­tected API health check fail­ures and paged our on-calls, who started in­ves­ti­gat­ing the is­sue.

May 19, 22:11 UTC - Dashboard re­turn­ing 503 er­rors. Users un­able to log in.

May 19, 22:19 UTC - Root cause iden­ti­fied: Google Cloud Platform has sus­pended Railway’s pro­duc­tion ac­count.

May 19, 22:22 UTC - P0 ticket filed with Google Cloud. Railway’s GCP ac­count man­ager en­gaged di­rectly.

May 19, 22:29 UTC - Incident de­clared.

May 19, 22:29 UTC - GCP ac­count ac­cess re­stored. All com­pute in­stances re­mained stopped and per­sis­tent disks in­ac­ces­si­ble.

May 19, 22:35 UTC - Cached net­work routes be­gan ex­pir­ing; work­loads on Railway Metal and AWS be­gan re­turn­ing 404 er­rors as the net­work­ing could no longer re­solve routes.

May 19, 23:09 UTC - First per­sis­tent disk comes back on­line.

May 19, 23:54 UTC - All per­sis­tent disks re­stored to ready state. Network still down.

May 20, 00:39 UTC - Disks con­firmed ready. Recovery blocked on Google Cloud net­work­ing restora­tion.

May 20, 01:30 UTC - Compute in­stances be­gan re­cov­er­ing.

May 20, 01:38 UTC - Edge traf­fic be­ing served again. Networking re­stored.

May 20, 01:57 UTC - Orchestration and build in­fra­struc­ture re­stored. Deploys tem­porar­ily paused to pre­vent over­whelm­ing sys­tems as queued work at­tempted to ex­e­cute si­mul­ta­ne­ously.

May 20, 02:04 UTC - Compute hosts be­ing brought back on­line in­cre­men­tally.

May 20, 02:47 UTC - GitHub be­gan rate-lim­it­ing Railway’s OAuth and web­hook in­te­gra­tions; some users un­able to log in, builds blocked.

May 20, 02:55 UTC - Dashboard ac­ces­si­ble again.

May 20, 03:59 UTC - Deployments be­gin­ning to process again across all tiers.

May 20, 04:00 UTC - API, dash­board, and OAuth end­points con­firmed op­er­a­tional. Remaining work­loads con­tin­u­ing to re­store.

May 20, 06:14 UTC - Incident moved to mon­i­tor­ing.

May 20, 07:58 UTC - Incident is re­solved.

What Happened?

At 22:20 UTC on May 19, Google Cloud placed Railway’s pro­duc­tion ac­count into a sus­pended sta­tus in­cor­rectly, as part of an au­to­mated ac­tion. This ac­tion ex­tended to many ac­counts within Google Cloud. As this was a plat­form-wide ac­tion, there was no proac­tive out­reach to in­di­vid­ual cus­tomers prior to the re­stric­tion.

This sus­pended sta­tus dis­abled our GCP re­lated in­fra­struc­ture, which sup­ports the Railway Dashboard, API and parts of our Network in­fra­struc­ture, along with ad­di­tional burst-com­pute in­fra­struc­ture hosted on Google Cloud.

Railway’s con­trol plane is a set of a core de­pen­den­cies that serves the dash­board, processes builds and de­ploy­ments, and pop­u­lates the rout­ing ta­bles used by our edge. The im­pact was im­me­di­ate for all work­loads on Google Cloud.

Railway’s edge prox­ies main­tain a cache of rout­ing ta­bles from the net­work con­trol plane, which is hosted within Google Cloud. While that cache held, work­loads on Railway Metal and AWS con­tin­ued to serve traf­fic. Once the cache ex­pired, the edge could no longer re­solve routes to ac­tive in­stances, and work­loads across all re­gions, in­clud­ing Metal and AWS, be­gan re­turn­ing 404 er­rors. This caused the net­work out­age im­pact to cas­cade be­yond Google Cloud, into these re­gions as well, even though the work­loads them­selves re­mained on­line.

Railway’s in­fra­struc­ture is de­signed for high avail­abil­ity. Our data­bases run across mul­ti­ple avail­abil­ity zones, and our net­work uses re­dun­dant con­nec­tions be­tween AWS, GCP, and Railway Metal. However, restor­ing ac­count ac­cess did not re­store these in­di­vid­ual ser­vices. Persistent disks, com­pute in­stances, and net­work­ing all re­quired sep­a­rate re­cov­ery. Due to the na­ture of this re­cov­ery process, the out­age was ex­tended by sev­eral hours. Disks were re­stored to a ready state by 23:54 UTC, but core net­work­ing and edge rout­ing did not fully re­store un­til ap­prox­i­mately 01:30 UTC on May 20. (We are await­ing con­fir­ma­tion to see if this de­lay and as­so­ci­ated er­rors were on Google’s side)

As net­work­ing was re­stored, re­cov­ery of Railway core ser­vices and val­i­da­tion of end user work­loads pro­ceeded layer by layer. To pre­vent over­whelm­ing our build sys­tems we tem­porar­ily paused de­ploys, and grad­u­ally al­lowed them to re­sume. In par­al­lel to our core sys­tem re­cov­ery, GitHub be­gan rate-lim­it­ing Railway’s OAuth and web­hook in­te­gra­tions, due to the vol­ume and burst na­ture of all re­tried re­quests, tem­porar­ily block­ing user lo­gins and builds.

By ap­prox­i­mately 04:00 UTC on May 20, the API, dash­board, and OAuth end­points were con­firmed op­er­a­tional, with re­main­ing work­loads con­tin­u­ing to re­store.

Preventative Measures

Railway’s net­work con­trol plane is de­signed for re­silience. It is a multi-AZ, multi-zone con­trol plane which can tol­er­ate the loss of mul­ti­ple ma­chines and com­po­nents, while still func­tion­ing with zero user im­pact. This has been tested in both stag­ing as well as live traf­fic (prior to its roll­out a few months ago).

We have in­vested in re­siliency as a re­sult of prior in­ci­dents which have as­sisted us in deal­ing with the im­pact. A prior ex­am­ple of these lessons was Railway be­ing able to grace­fully re­cover user GitHub in­stal­la­tions with­out trig­ger­ing sec­ondary rate-lim­its.

However, many have asked over mul­ti­ple fo­rums, how could Railway have a sin­gle de­pen­dency that would af­fect all cus­tomer work­loads?

Railway’s net­work is a mesh ring, built up of high avail­abil­ity fiber in­ter­con­nects be­tween Metal <> GCP <> AWS. However, in this ring, there was still a hard de­pen­dency on work­load dis­cov­er­abil­ity be­ing tied to the net­work con­trol plane API that was hosted on the ma­chines run­ning in Google Cloud. This meant that de­spite the mesh con­tin­u­ing to op­er­ate for an hour, when the route cache ex­pired, the mesh failed to re-pop­u­late the rout­ing ta­bles.

We are im­me­di­ately work­ing on re­mov­ing this de­pen­dency, mak­ing this a true mesh. This means that if any of the in­ter­con­nects go out, there is al­ways a path be­tween the clouds.

As a re­sult of this, we will be ex­tend­ing the high avail­abil­ity data­base shards across AWS and Metal. In the fu­ture, should all in­stances in a par­tic­u­lar cloud dis­ap­pear in­stantly, data­base quo­rum will keep every­thing run­ning and im­me­di­ately failover any no longer run­ning work­loads.

Finally, we are in plan­ning to re­move Google Cloud ser­vices from our data plane’s hot path, and keep­ing them only for sec­ondary/​failover. This is in par­al­lel to im­ple­ment­ing a new ar­chi­tec­ture for our data plane (enabling con­nec­tiv­ity to hosts), and our con­trol plane (which pow­ers the dash­board you use to ac­cess and man­age Railway). These ar­chi­tec­ture up­grades will en­sure that our core ser­vices, es­pe­cially user fac­ing com­po­nents, are not de­pen­dent on any one ven­dor or plat­form.

Railway owns our ven­dor choices, and we ul­ti­mately own this one. Your cus­tomers don’t care whether the fail­ure was Google or Railway; they see your prod­uct. Your up­time is our re­spon­si­bil­ity, and we’ll keep de­liv­er­ing on it.

A Texas Drainage District Walked Its Ditch on a Routine Inspection. They Found a Pipe They Didn't Recognize Discharging Black Liquid From Tesla's $1 Billion Lithium Refinery

www.autonocion.com

Drainage dis­trict work­ers in Nueces County, Texas, were do­ing rou­tine main­te­nance on a ditch out­side Robstown in January 2026 when they no­ticed some­thing they had not seen be­fore. A pipe they did not rec­og­nize, stretched across an ease­ment they over­see, was dis­charg­ing dark liq­uid into the ditch they man­age. Very dark and murky,” is how Steve Ray, a con­sul­tant for the drainage dis­trict, de­scribed it to KRIS 6 News. I would say it was ac­tu­ally black. We’re used to see­ing good run­ning wa­ter, and so we did­n’t know ex­actly what it was.”

The pipe be­longed to Tesla. The dark liq­uid was waste­water from the com­pa­ny’s nearly $1 bil­lion lithium re­fin­ery, which be­gan op­er­a­tions in December 2024 and was, at the time, the first com­mer­cial-scale spo­dumene-to-lithium-hy­drox­ide re­fin­ery in North America. Tesla had mar­keted the plant for years as an acid-free clean process,” promis­ing sand and lime­stone as the main byprod­ucts. The drainage dis­trict had not been told that 231,000 gal­lons of treated waste­water per day would be flow­ing through its in­fra­struc­ture.

What hap­pened next, across the four months that fol­lowed, is one of the more un­com­fort­able sto­ry­lines in the American elec­tric ve­hi­cle sup­ply chain right now, and al­most no main­stream US au­to­mo­tive press has touched it.

How the drainage dis­trict found out about the pipe

The Texas Commission on Environmental Quality, the state en­vi­ron­men­tal reg­u­la­tor known as TCEQ, had qui­etly is­sued Tesla a waste­water dis­charge per­mit on January 15, 2025. The per­mit, a Texas Pollutant Discharge Elimination System au­tho­riza­tion known as TPDES, al­lowed up to 231,000 gal­lons of treated waste­water per day to be dis­charged into an un­named ditch that flows into Petronila Creek and from there into Baffin Bay, a long­time South Texas salt­wa­ter fish­ing des­ti­na­tion.

What it did not do, ex­plic­itly, was grant Tesla the right to use pub­lic or pri­vate prop­erty for waste­water con­veyance. The drainage dis­trict that man­ages the ditch the pipe was dis­charg­ing into was never no­ti­fied that the per­mit ex­isted. Its work­ers found out the way drainage dis­trict work­ers in any small Texas county find out about things: by walk­ing the ditch and see­ing some­thing new.

Join the con­ver­sa­tion · The Lot

50 own­ers shar­ing real ex­pe­ri­ences

They filed two com­plaints with TCEQ in January and February 2026. A state in­ves­ti­ga­tor vis­ited on February 12, sam­pled the wa­ter flow­ing from Tesla’s out­fall pipe, ran the stan­dard panel of con­ven­tional pol­lu­tants: dis­solved solids, chlo­rides, sul­fates, oil and grease, tem­per­a­ture, dis­solved oxy­gen. Everything in that panel came back in­side the bounds of Tesla’s per­mit. TCEQ ap­proved its in­ves­ti­ga­tion re­port on March 20, find­ing no per­mit vi­o­la­tion.

TCEQ did not test for heavy met­als. Aref Mazloum, a vol­un­teer en­gi­neer con­sult­ing for the drainage dis­trict who has also re­cently joined TCEQs wa­ter sup­ply di­vi­sion, later ex­plained to the Houston Chronicle that heavy met­als were not tested be­cause they had not been part of the orig­i­nal com­plaint the dis­trict filed. The per­mit also did not re­quire any mon­i­tor­ing of lithium it­self, which, as the Texas Tribune later noted, is the pri­mary ma­te­r­ial the fa­cil­ity was built to process.

What the drainage dis­tric­t’s lab ac­tu­ally found

By the time TCEQ closed its in­ves­ti­ga­tion, the drainage dis­trict had al­ready hired its own at­tor­ney and com­mis­sioned its own in­de­pen­dent test. Frank Lazarte, an at­tor­ney rep­re­sent­ing Nueces County Drainage District No. 2, con­tracted Eurofins Environment Testing, an in­ter­na­tion­ally ac­cred­ited en­vi­ron­men­tal lab with a San Antonio fa­cil­ity, to put a sam­pling ma­chine in the ditch for 24 hours and an­a­lyze what it caught. The un­named drainage ditch sits less than a mile up­stream of Tesla’s dis­charge pipe.

The sam­ple was col­lected on April 7. Eurofins is­sued its re­sults on April 10. According to the lab re­port, the 24-hour com­pos­ite found:

Hexavalent chromium at 0.0104 mil­ligrams per liter, just above the lab’s re­port­ing limit of 0.01 mg/​L. Hexavalent chromium is clas­si­fied as a known hu­man car­cino­gen by the US National Toxicology Program. It is the sub­stance the Erin Brockovich case was built around.

Arsenic at 0.0025 mg/​L. That is be­low the fed­eral drink­ing wa­ter stan­dard of 0.01 mg/​L, but pre­sent.

Strontium at 1.17 mg/​L. Mazloum’s tech­ni­cal re­port on the find­ings noted that long-term ex­po­sure can af­fect bone den­sity and kid­ney func­tion in hu­mans and wildlife.

Lithium and vana­dium at con­cen­tra­tions Lazarte’s let­ter de­scribed as ab­nor­mally high rel­a­tive to rain­wa­ter or nor­mal ground­wa­ter.

Elevated lev­els of man­ganese, iron, phos­pho­rus, cal­cium, mag­ne­sium and potas­sium con­sis­tent with in­dus­trial dis­charge. Manganese, a bat­tery process tracer, can have neu­ro­log­i­cal ef­fects at chronic doses. Excess phos­pho­rus can cause al­gae blooms that strip oxy­gen from wa­ter­ways.

Ammonia in the form of ni­tro­gen at 1.68 mg/​L, am­pli­fy­ing the al­gae bloom risk.

Neither hexa­va­lent chromium nor ar­senic ap­pears in Tesla’s TCEQ dis­charge per­mit as an al­low­able pol­lu­tant. Neither was tested for dur­ing TCEQs February in­ves­ti­ga­tion.

Mazloum, whose tech­ni­cal re­port has since been dis­trib­uted to Texas state leg­is­la­tors, de­scribes the lithium sig­na­ture in the waste­water as a fingerprint at a crime scene,” and rec­om­mends that Tesla de­sign and fund an on-site multi-stage treat­ment plant us­ing in­dus­trial re­verse os­mo­sis to strip heavy met­als out of the dis­charge. He has also told the Texas Tribune that the el­e­vated salt con­tent is killing the grass that holds the drainage ditch walls to­gether, with the bare soil wash­ing away in rain and re­duc­ing the ditch’s ca­pac­ity to carry stormwa­ter. Mazloum rec­om­mends Robstown res­i­dents stay away from the ditch.

Lazarte’s cease-and-de­sist let­ter to Tesla’s as­so­ci­ate gen­eral coun­sel, sent in mid-April, asked the com­pany to halt waste­water dis­charge pend­ing a meet­ing to dis­cuss the lab re­sults. He called the find­ings quite dis­turb­ing” and wrote that the com­bi­na­tion of lithium, stron­tium and vana­dium in the sam­ple acted like a chem­i­cal sig­na­ture point­ing back to the bat­tery pro­cess­ing fa­cil­ity.”

What Tesla says

Tesla dis­putes the fram­ing. Jason Bevan, Senior Manager of Site Operations at the Robstown plant, said in a writ­ten state­ment that the com­pany routinely mon­i­tors and tests its per­mit­ted waste­water dis­charge” and remains in com­plete com­pli­ance with all re­quire­ments of its state-is­sued waste­water dis­charge per­mit, in­clud­ing ap­plic­a­ble wa­ter qual­ity stan­dards.” Bevan added that Tesla is currently re­view­ing the let­ter from Nueces County Drainage District #2 and looks for­ward to work­ing co­op­er­a­tively with the dis­trict to ad­dress their con­cerns.”

Tesla also ar­gues that the Eurofins sam­pling method­ol­ogy was in­ap­pro­pri­ate, be­cause the lab placed its sam­pling equip­ment in the ditch down­stream of the out­fall pipe rather than at the out­fall it­self. The per­mit re­quires mon­i­tor­ing at the out­fall point, and the com­pany has pointed out that ditch sam­ples can pick up con­t­a­m­i­nants from sources that have noth­ing to do with Tesla’s waste­water. This is a real ar­gu­ment, and a court con­sid­er­ing the data will have to weigh it. The drainage dis­tric­t’s re­sponse, as ex­pressed by Lazarte’s let­ter, is that the chem­i­cal fin­ger­print in the sam­ple matches the fa­cil­i­ty’s process, not a ran­dom en­vi­ron­men­tal back­ground.

Notably, no party has al­leged that Tesla is in vi­o­la­tion of any law. TCEQ has not found one. Tesla is op­er­at­ing un­der a per­mit the state agency is­sued. The dis­pute, in­stead, is about what the per­mit was sup­posed to cover, and what got left out of it.

Why South Texas, and why now

The tim­ing is what makes this story sting. Corpus Christi, six­teen miles east of the Tesla re­fin­ery, is prepar­ing to de­clare a wa­ter emer­gency. The city’s reser­voirs have been de­scribed in pub­lic meet­ings as fac­ing imminent de­ple­tion” if rain­fall does not ar­rive, and emer­gency wa­ter-use re­stric­tions are ex­pected to be en­acted in September if con­di­tions do not im­prove. The state, more broadly, is in the mid­dle of se­vere drought con­di­tions across most of the af­fected basins.

The plant in Robstown is sup­posed to be part of the so­lu­tion to the United States’ lithium sup­ply prob­lem. Battery-grade lithium hy­drox­ide is the bot­tle­neck in the do­mes­tic EV bat­tery sup­ply chain that Tesla, Ford, GM and every other US au­tomaker is rac­ing to scale. Tesla’s Robstown fa­cil­ity, if it per­forms at de­sign ca­pac­ity, would be the first ma­jor piece of that sup­ply chain to come fully on­line on US soil. Elon Musk has re­peat­edly cited the re­fin­ery as ev­i­dence that lithium pro­duc­tion does not have to be the dirty, acid-in­ten­sive process it has his­tor­i­cally been every­where else in the world.

That ar­gu­ment now has trace con­cen­tra­tions of hexa­va­lent chromium and el­e­vated lithium sit­ting in a drainage ditch six­teen miles from a coastal city about to ra­tion drink­ing wa­ter. The sub­stances may or may not ex­ceed any in­di­vid­ual reg­u­la­tory thresh­old. The com­bi­na­tion of them, leav­ing a re­fin­ery that was mar­keted as the clean­est in the world, in a county that is run­ning out of wa­ter, is the story.

What an American dri­ver should take away from this

The cease-and-de­sist let­ter has not yet been an­swered. TCEQ has not re­opened its in­ves­ti­ga­tion. Tesla is still op­er­at­ing the plant. The pipe is still dis­charg­ing. None of this is il­le­gal as cur­rently con­sti­tuted, be­cause the per­mit that was writ­ten does not re­quire mon­i­tor­ing for the things the in­de­pen­dent lab found.

What it should do, for any American dri­ver whose next EV is go­ing to be built around do­mes­ti­cally re­fined lithium, is force a real con­ver­sa­tion about what clean lithium” ac­tu­ally means and who gets to de­fine it. Tesla called its process acid-free. The waste­water leav­ing the fa­cil­ity, on the day Eurofins sam­pled it, con­tained a known car­cino­gen above a de­tec­tion thresh­old, an en­vi­ron­men­tal poi­son be­low the drink­ing wa­ter stan­dard but pre­sent, and ab­nor­mally el­e­vated lev­els of the very metal the plant was built to pro­duce. None of those facts are in dis­pute. What they mean is.

CISA Admin Leaked AWS GovCloud Keys on Github

krebsonsecurity.com

Until this past week­end, a con­trac­tor for the Cybersecurity & Infrastructure Security Agency (CISA) main­tained a pub­lic GitHub repos­i­tory that ex­posed cre­den­tials to sev­eral highly priv­i­leged AWS GovCloud ac­counts and a large num­ber of in­ter­nal CISA sys­tems. Security ex­perts said the pub­lic archive in­cluded files de­tail­ing how CISA builds, tests and de­ploys soft­ware in­ter­nally, and that it rep­re­sents one of the most egre­gious gov­ern­ment data leaks in re­cent his­tory.

On May 15, KrebsOnSecurity heard from Guillaume Valadon, a re­searcher with the se­cu­rity firm GitGuardian. Valadon’s com­pany con­stantly scans pub­lic code repos­i­to­ries at GitHub and else­where for ex­posed se­crets, au­to­mat­i­cally alert­ing the of­fend­ing ac­counts of any ap­par­ent sen­si­tive data ex­po­sures. Valadon said he reached out be­cause the owner in this case was­n’t re­spond­ing and the in­for­ma­tion ex­posed was highly sen­si­tive.

A redacted screen­shot of the now-de­funct Private CISA repos­i­tory main­tained by a CISA con­trac­tor.

The GitHub repos­i­tory that Valadon flagged was named Private-CISA,” and it har­bored a vast num­ber of in­ter­nal CISA/DHS cre­den­tials and files, in­clud­ing cloud keys, to­kens, plain­text pass­words, logs and other sen­si­tive CISA as­sets.

Valadon said the ex­posed CISA cre­den­tials rep­re­sent a text­book ex­am­ple of poor se­cu­rity hy­giene, not­ing that the com­mit logs in the of­fend­ing GitHub ac­count show that the CISA ad­min­is­tra­tor dis­abled the de­fault set­ting in GitHub that blocks users from pub­lish­ing SSH keys or other se­crets in pub­lic code repos­i­to­ries.

Passwords stored in plain text in a csv, back­ups in git, ex­plicit com­mands to dis­able GitHub se­crets de­tec­tion fea­ture,” Valadon wrote in an email. I hon­estly be­lieved that it was all fake be­fore an­a­lyz­ing the con­tent deeper. This is in­deed the worst leak that I’ve wit­nessed in my ca­reer. It is ob­vi­ously an in­di­vid­u­al’s mis­take, but I be­lieve that it might re­veal in­ter­nal prac­tices.”

One of the ex­posed files, ti­tled importantAWStokens,” in­cluded the ad­min­is­tra­tive cre­den­tials to three Amazon AWS GovCloud servers. Another file ex­posed in their pub­lic GitHub repos­i­tory — AWS-Workspace-Firefox-Passwords.csv” — listed plain­text user­names and pass­words for dozens of in­ter­nal CISA sys­tems. According to Caturegli, those sys­tems in­cluded one called LZ-DSO,” which ap­pears short for Landing Zone DevSecOps,” the agen­cy’s se­cure code de­vel­op­ment en­vi­ron­ment.

Philippe Caturegli, founder of the se­cu­rity con­sul­tancy Seralys, said he tested the AWS keys only to see whether they were still valid and to de­ter­mine which in­ter­nal sys­tems the ex­posed ac­counts could ac­cess. Caturegli said the GitHub ac­count that ex­posed the CISA se­crets ex­hibits a pat­tern con­sis­tent with an in­di­vid­ual op­er­a­tor us­ing the repos­i­tory as a work­ing scratch­pad or syn­chro­niza­tion mech­a­nism rather than a cu­rated pro­ject repos­i­tory.

The use of both a CISA-associated email ad­dress and a per­sonal email ad­dress sug­gests the repos­i­tory may have been used across dif­fer­ently con­fig­ured en­vi­ron­ments,” Caturegli ob­served. The avail­able Git meta­data alone does not prove which end­point or de­vice was used.”

The Private CISA GitHub repo ex­posed dozens of plain­text cre­den­tials for im­por­tant CISA GovCloud re­sources.

Caturegli said he val­i­dated that the ex­posed cre­den­tials could au­then­ti­cate to three AWS GovCloud ac­counts at a high priv­i­lege level. He said the archive also in­cludes plain text cre­den­tials to CISAs in­ter­nal artifactory” — es­sen­tially a repos­i­tory of all the code pack­ages they are us­ing to build soft­ware — and that this would rep­re­sent a juicy tar­get for ma­li­cious at­tack­ers look­ing for ways to main­tain a per­sis­tent foothold in CISA sys­tems.

That would be a prime place to move lat­er­ally,” he said. Backdoor in some soft­ware pack­ages, and every time they build some­thing new they de­ploy your back­door left and right.”

In re­sponse to ques­tions, a spokesper­son for CISA said the agency is aware of the re­ported ex­po­sure and is con­tin­u­ing to in­ves­ti­gate the sit­u­a­tion.

Currently, there is no in­di­ca­tion that any sen­si­tive data was com­pro­mised as a re­sult of this in­ci­dent,” the CISA spokesper­son wrote. While we hold our team mem­bers to the high­est stan­dards of in­tegrity and op­er­a­tional aware­ness, we are work­ing to en­sure ad­di­tional safe­guards are im­ple­mented to pre­vent fu­ture oc­cur­rences.”

A re­view of the GitHub ac­count and its ex­posed pass­words show the Private CISA repos­i­tory was main­tained by an em­ployee of Nightwing, a gov­ern­ment con­trac­tor based in Dulles, Va. Nightwing de­clined to com­ment, di­rect­ing in­quiries to CISA.

CISA has not re­sponded to ques­tions about the po­ten­tial du­ra­tion of the data ex­po­sure, but Caturegli said the Private CISA repos­i­tory was cre­ated on November 13, 2025. The con­trac­tor’s GitHub ac­count was cre­ated back in September 2018.

The GitHub ac­count that in­cluded the Private CISA repo was taken of­fline shortly af­ter both KrebsOnSecurity and Seralys no­ti­fied CISA about the ex­po­sure. But Caturegli said the ex­posed AWS keys in­ex­plic­a­bly con­tin­ued to re­main valid for an­other 48 hours.

CISA is cur­rently op­er­at­ing with only a frac­tion of its nor­mal bud­get and staffing lev­els. The agency has lost nearly a third of its work­force since the be­gin­ning of the sec­ond Trump ad­min­is­tra­tion, which forced a se­ries of early re­tire­ments, buy­outs, and res­ig­na­tions across the agen­cy’s var­i­ous di­vi­sions.

The now-de­funct Private CISA repo showed the con­trac­tor also used eas­ily-guessed pass­words for a num­ber of in­ter­nal re­sources; for ex­am­ple, many of the cre­den­tials used a pass­word con­sist­ing of each plat­for­m’s name fol­lowed by the cur­rent year. Caturegli said such prac­tices would con­sti­tute a se­ri­ous se­cu­rity threat for any or­ga­ni­za­tion even if those cre­den­tials were never ex­posed ex­ter­nally, not­ing that threat ac­tors of­ten use key cre­den­tials ex­posed on the in­ter­nal net­work to ex­pand their reach af­ter es­tab­lish­ing ini­tial ac­cess to a tar­geted sys­tem.

What I sus­pect hap­pened is [the CISA con­trac­tor] was us­ing this GitHub to syn­chro­nize files be­tween a work lap­top and a home com­puter, be­cause he has reg­u­larly com­mit­ted to this repo since November 2025,” Caturegli said. This would be an em­bar­rass­ing leak for any com­pany, but it’s even more so in this case be­cause it’s CISA.”

Disney erased FiveThirtyEight

www.natesilver.net

Last Thursday night, I was work­ing late, try­ing to put some of the fin­ish­ing touches on our forth­com­ing World Cup model — and ac­tu­ally look­ing up an ar­ti­cle I’d writ­ten for FiveThirtyEight in 2014 about my pre­vi­ous soc­cer model, SPI. Although the qual­ity of the archive has grad­u­ally de­te­ri­o­rated since Disney shut down the site in 2025 (I left two years ear­lier in 2023), at least our text-based ar­ti­cles were mostly still there, or so I thought. Instead, I was auto-redi­rected to ABC News’s home page, which looked some­thing like this:

Sometimes weird things hap­pen on the in­ter­net late at night, so I re­sisted the temp­ta­tion to tweet some­thing about it. But one of my for­mer col­leagues no­ticed the same thing on Friday. ABC News has­n’t made any pub­lic com­ment that I’m aware of — they de­clined to make a state­ment to the New York Times, which wrote about FiveThirtyEight’s dis­ap­pear­ance. It’s pos­si­ble that they have some­thing up their sleeve, I sup­pose. But pre­sum­ably, this was ei­ther in­ten­tional or will­fully ne­glect­ful. All of the for­mer FiveThirtyEight site from my nearly decade-long tenure at ESPN/Disney/ABC is gone.1

It’s com­mon to read things like: what hap­pens on the Internet stays on the Internet”, the no­tion be­ing that you can never es­cape your dig­i­tal past. But this is­n’t re­ally true. A Pew study of a ran­dom sam­ple of Internet links con­ducted in October 2023 found sig­nif­i­cant link rot”: al­most 40 per­cent of links that had been ac­tive 10 years ear­lier were bro­ken. And that’s prob­a­bly an un­der­es­ti­mate: the study was based on the Common Crawl web archive (the same one that AI labs use to train their mod­els), which is quite com­pre­hen­sive but prob­a­bly con­tains some bias to­ward more promi­nent sites. Another study by ahrefs found a two-thirds at­tri­tion rate for web links af­ter 11 years.

Yes, you can still ac­cess (for now) Disney-era FiveThirtyEight con­tent via the in­valu­able Internet Archive, and pre-Dis­ney-era con­tent from The New York Times (which I part­nered with from 2010 through 2013). And ob­vi­ously, we’re try­ing to recre­ate some of the most pop­u­lar parts of FiveThirtyEight at Silver Bulletin. The elec­tion mod­els and polling av­er­ages are here, and new-and-im­proved ver­sions of the sports mod­els (PELE, ELWAY, COOPER) are grad­u­ally re­turn­ing too.2 Galen Druke, Clare Malone and I have even been get­ting the old pod­cast crew back to­gether for live shows.

To be clear, we’re not try­ing to cre­ate a full-fledged ver­sion of FiveThirtyEight. Having a smaller team gives me more time for cre­ative work, such as writ­ing and build­ing mod­els. In fact, post-Dis­ney life is bet­ter along pretty much every quan­tifi­able and in­tan­gi­ble di­men­sion.

Still, these ab­strac­tions about link rot” don’t quite cap­ture the feel­ing of see­ing so much hard work erased.

Here are some num­bers roughly in the right ball­park: dur­ing the Disney era, which lasted about 10 years, FiveThirtyEight pub­lished about 20 sto­ries a week. Let’s say that each story took about 20 hours to pro­duce be­tween re­search, writ­ing, graph­ics and edit­ing.3 Do the math, and that works out to about 200,000 per­son-hours of work that ABC News just deleted.

What’s prob­a­bly harder to see from the out­side is that none of this was ever smooth sail­ing: that con­tent was pro­duced through a lot of blood, sweat, and tears (sometimes lit­er­ally on cer­tain elec­tion nights).

Maybe the dele­tion of the site has me feel­ing wist­ful, but I thought I’d write about the var­i­ous phases of FiveThirtyEight, in­clud­ing some in­side-base­ball stuff that I’ve never re­ally talked about pub­licly.

I’m just go­ing to speak from my van­tage point, not on be­half of the sev­eral dozen peo­ple who worked on the site in its var­i­ous it­er­a­tions. I’m not go­ing to talk about com­pet­ing ed­i­to­r­ial vi­sions or per­son­al­ity clashes or any of that, though we had our fair share of news­room drama. Instead, this is in­tended as more of a busi­ness school case study: a study of a large cor­po­ra­tion, The Walt Disney Company, be­hav­ing in an in­cred­i­bly ne­glect­ful way to­ward a smaller brand it ac­quired, with dozens of em­ploy­ees who worked ex­cep­tion­ally hard de­spite con­stant ex­is­ten­tial un­cer­tainty.

Share

I want to state one thing up front: I think FiveThirtyEight could have been a highly valu­able busi­ness if it had been man­aged more care­fully. I know the New York Times con­sid­ered FiveThirtyEight a valu­able part of its sub­scrip­tion of­fer­ing. I know some of the sharper minds be­hind sub­scrip­tion-based busi­nesses tried to ac­quire FiveThirtyEight at var­i­ous times. And I know the eco­nom­ics of Silver Bulletin, and they’re good. There are chal­lenges: our traf­fic is highly cycli­cal, in­creas­ing sev­er­al­fold around ma­jor elec­tions and sport­ing events. Still, my guess is that FiveThirtyEight could have had north of 100,000 pay­ing sub­scribers by this point: in the same gen­eral ball­park as The Free Press, which re­cently sold for $150 mil­lion.

The think­ing at Disney is pre­sum­ably that they in­vested a lot of money in FiveThirtyEight and were left with noth­ing to show for it. But to my mind, how­ever much they spent on FiveThirtyEight, they never in­vested a dol­lar in it. There was never re­ally any ef­fort, or even any pre­tense of try­ing, to make it a prof­itable unit of the com­pany. At one point, other se­nior staffers and I ba­si­cally begged Disney to turn on a pay­wall, fig­ur­ing this could pro­vide some se­cu­rity, and were told, es­sen­tially, that it just was­n’t worth Disney’s band­width to fig­ure out the me­chan­ics of one. We were treated like an un­used gym mem­ber­ship: you don’t want to can­cel be­cause you think you ought to be hit­ting the gym, but every month a charge hits your credit card state­ment and you aren’t get­ting any fit­ter.

I founded FiveThirtyEight.com un­der the pseu­do­nym poblano” in March 2008 as a spin-off from a pop­u­lar se­ries of posts at the pro­gres­sive blog Daily Kos. For the pre­vi­ous sev­eral years, af­ter quit­ting my cor­po­rate con­sult­ing job in 2004, I’d had two main sources of in­come. One of them was build­ing sta­tis­ti­cal mod­els like PECOTA for Baseball Prospectus, an early adopter of a sub­scrip­tion-based busi­ness model that still ex­ists to­day and has grad­u­ated dozens of staffers into Major League front of­fices. BP had good tim­ing go­ing for it — this was the dawn of the Moneyball era in sports. But the sub­scrip­tion-based of­fer­ings were rel­a­tively rare at the time. BP churned out enough rev­enue to sup­port a mid­dle-class in­come for around a dozen co-own­ers/​stat nerds/​writ­ers but not much more than that.

However, I did­n’t re­ally care be­cause my real source of in­come was play­ing on­line poker. Yes, there re­ally was a time when you could click but­tons for a liv­ing and make a pretty good in­come by work­ing the late shift against what I imag­ined to be drunk Scandinavians. It seemed too good to be true, and ul­ti­mately it was. The pas­sage of the UIGEA in late 2006 es­sen­tially cut off new money flow­ing into the game, the re­main­ing play­ers were get­ting sharper, and the for­mat I spe­cial­ized in at the time (limit hold em) was grad­u­ally los­ing ground to no-limit hold em, which I would­n’t be­come pro­fi­cient at un­til years later.

The UIGEA, passed on the last day be­fore Congress ad­journed for the 2006 midterm elec­tions, did pique my in­ter­est in American pol­i­tics, how­ever. I wanted the bas­tards who had de­prived me of a liv­ing to be voted out of of­fice, and they largely were, in­clud­ing the chief spon­sor of the bill, the 15-term Iowa Congressman Jim Leach.

Moneyball, but for elec­tions” was a log­i­cal enough pitch, but I did­n’t an­tic­i­pate the de­gree to which FiveThirtyEight.com would be­come a vi­ral hit in 2008. It helped that the elec­tion fea­tured a num­ber of com­pelling per­son­al­i­ties, in­clud­ing a guy whose name I’d vaguely re­mem­bered from my time at the University of Chicago: Barack Obama. I ran ads on FiveThirtyEight, and the money was­n’t fan­tas­tic by any means, but dig­i­tal ad­ver­tis­ing rates were com­par­a­tively health­ier back then, so it was enough to pay the rent.

FiveThirtyEight, de-anonymized mid­way through the 2008 cy­cle, drew a lot of me­dia at­ten­tion, par­tic­u­larly af­ter the mod­el’s highly con­fi­dent call” that Obama would de­feat John McCain proved cor­rect. On a train plat­form on my way back from the MIT Sloan Sports Analytics Conference con­fer­ence in 2009, I en­coun­tered a se­nior ed­i­tor at the New York Times who had been in at­ten­dance. I’ve long been an ad­mirer of the NYT — my par­ents in East Lansing, Michigan even had a rit­ual of walk­ing to the book­store every day to buy the print edi­tion. Long story short, the NYT made a good-enough of­fer. The fi­nances weren’t fan­tas­tic, but it was an ex­tremely clean deal: I was a con­trac­tor, not an em­ployee, so I was free to pur­sue other sources of in­come, and I re­gained full own­er­ship of the mod­els and the other IP af­ter I left the Times.

Honestly, I ex­pected to re­new with the Times. At the risk of be­ing im­mod­est, the 2012 elec­tion fore­cast had been a smash­ing suc­cess, with the FiveThirtyEight model fa­mously calling” all 50 states cor­rectly that year in a stroke of luck that later felt like a bit of a curse. (There was only about a 3 per­cent chance this would hap­pen, ac­cord­ing to the mod­el’s in­ter­nal logic.) The Times had launched a dig­i­tal pay­wall mid­way through my time there, and its sub­scrip­tion rev­enues had grown sig­nif­i­cantly in the 4Q of 2012, co­in­cid­ing with the Obama-Romney elec­tion. How much FiveThirtyEight was re­spon­si­ble for this was hard to say — the Times has had a lot of suc­cess with­out us, ob­vi­ously — but I had a lot of lever­age.

We” (my at­tor­ney and I) ba­si­cally de­cided to give the Times an ex­clu­sive ne­go­ti­at­ing win­dow be­fore ex­plor­ing the mar­ket. My keen sense at the time was that the NYT would not be the high­est bid­der, but I re­ally did like work­ing there, and they de­ployed me cre­atively on every­thing from the Magazine to the book re­view. The Times was a deeply fac­tional place in those days, though, and the FiveThirtyEight prod­uct had both in­ter­nal cham­pi­ons and in­ter­nal crit­ics.4 The Times was also in the midst of a lead­er­ship tran­si­tion, and new man­age­ment tends to want to move on from the old regime’s pet pro­jects, even if they were suc­cess­ful. Although I’d moved to an apart­ment within walk­ing dis­tance of the NYT of­fice in an­tic­i­pa­tion of a new deal, the Times dragged its feet to the point where we even­tu­ally felt like we had no choice but to test the mar­ket.

We wound up sign­ing up with ESPN. It does­n’t seem like the most ob­vi­ous fit now, but this came dur­ing an era when ESPN ba­si­cally thought of it­self as the best busi­ness in the world, guar­an­teed an an­nu­ity based on ca­ble rights fees. Its then-pres­i­dent, John Skipper, had high­brow am­bi­tions for pre­mium prod­ucts, no­tably Grantland. Grantland, built around an­other spiky founder, was quite ex­plic­itly a prece­dent for FiveThirtyEight @ Disney. I don’t catch up much with Bill Simmons these days, but he was a help­ful con­sigliere dur­ing the ne­go­ti­a­tions, of­fer­ing re­li­able ad­vice on nav­i­gat­ing any and all things Disney-related.

For the record, other of­fers we se­ri­ously con­sid­ered came from NBC News, Bloomberg and the Times. The lat­ter two would prob­a­bly have been bet­ter fits, be­cause they’re ba­si­cally in the same busi­ness as Silver Bulletin/FiveThirtyEight: sell­ing pre­mium sub­scrip­tion prod­ucts.5 ESPN and NBC are pri­mar­ily tele­vi­sion net­works, by con­trast. I’ve never re­ally liked go­ing on TV, and it’s prob­a­bly my worst medium de­spite some gen­uinely good-faith ef­forts by ABC News to make it work.

In hind­sight, I chose poorly. Skipper had been fairly ex­plicit that he did­n’t re­ally care whether FiveThirtyEight made money: like Grantland, we were es­sen­tially a hood or­na­ment on ESPNs over­sized SUV and a rounding er­ror” rel­a­tive to Disney’s gi­gan­tic P&L.

That might seem like a fan­tas­tic sit­u­a­tion — Disney’s pitch was ba­si­cally we’ll cut you a nice check to be max­i­mally cre­ative” — and I con­sider my­self priv­i­leged to have been given the op­por­tu­nity. But there were sev­eral prob­lems with the arrange­ment.

The b-school way to put this is that there was never brand or in­cen­tive align­ment — with Disney be­ing very macro” (it takes huge swings: theme parks, Marvel movies, NFL rights deals) and FiveThirtyEight be­ing very niche”. Furthermore, the Disney at­ti­tude ba­si­cally seemed to be that creatives” were sen­si­tive artist types who did­n’t care about money so long as they made enough of it, but I’ve al­ways had a fairly en­tre­pre­neur­ial spirit.

But most of all, this sort of arrange­ment makes you ex­tremely de­pen­dent on your boss­es’ good­will, and Skipper abruptly left ESPN one morn­ing in 2017 be­cause of an ex­tor­tion scan­dal.

FiveThirtyEight re­launched @ Disney/ESPN in March 2014 to mixed” re­views. And by mixed” re­views, I mean mostly bad ones. The launch was kind of a dis­as­ter, re­ally. I’ve writ­ten be­fore about some of the Mistakes That Were Made, most of which were pre­dictable mis­takes that I made. Among other prob­lems, I did too much brag­ging in the me­dia and did­n’t an­tic­i­pate the ex­tent to which pub­lic opin­ion to­ward FiveThirtyEight would shift once we be­came a cor­po­rate-backed in­cum­bent rather than an ec­cen­tric up­start. We added too many staffers too quickly, per­haps an­tic­i­pat­ing that we’d never have more lever­age to add headcount” than when we were a new, shiny ob­ject for Disney. Relatedly, we put too much em­pha­sis on quan­tity and not enough on core prod­ucts.

The core mis­take, though, was that al­most no­body was think­ing about how to make FiveThirtyEight a vi­able busi­ness. We had es­sen­tially no ded­i­cated busi­ness peo­ple or product” peo­ple or any­one else whose job de­scrip­tion de­pended on the site be­ing eco­nom­i­cally vi­able. We never de­vel­oped the mus­cle mem­ory or the in­fra­struc­ture to be a com­mer­cial prod­uct.

Despite all of this, FiveThirtyEight even­tu­ally rounded into a very good and pop­u­lar web­site, or so I’d like to think. Our 2016 elec­tion fore­cast was lit­er­ally the most engaging” fea­ture on the in­ter­net, ac­cord­ing to Chartbeat, and our pod­cast re­ceived hun­dreds of thou­sands of down­loads per episode.

But it never quite felt that way. Whenever we felt like we fi­nally had some open run­way, we’d en­counter an un­wel­come hur­dle.

In 2015, I was taken aside while walk­ing with my boss one warm spring af­ter­noon and told that Bill Simmons would be dis­missed from Grantland. Grantland had a brief and tu­mul­tuous post-Bill pe­riod but was shut­tered com­pletely by late 2015. This was a very omi­nous prece­dent: Grantland had lit­er­ally been in the same sub-unit of ESPN as FiveThirtyEight, with much of the same se­nior man­age­ment.

Then in 2016, there was the whole … Trump thing. Being dis­mis­sive of Trump’s chances early on in the Republican pri­mary was the biggest an­a­lyt­i­cal mis­take of my ca­reer, and I think I de­served a lot of blame for that.6 I will in­sist that our gen­eral elec­tion fore­cast did an ex­cel­lent job that year, though. Our model fa­mously/​in­fa­mously gave Trump about a 30 per­cent chance of win­ning, much higher than pre­dic­tion mar­kets, other mod­els or the con­ven­tional wis­dom at the time. That’s not how the rest of the in­ter­net saw it, how­ever. It was a dif­fi­cult elec­tion night and a dif­fi­cult af­ter­math pe­riod. Everyone had their own way of cop­ing; I re­mem­ber play­ing an in­or­di­nate amount of the EA Sports NHL game and try­ing to take the Rangers to the Stanley Cup.

Honestly, ESPN took the Trump stuff rel­a­tively well. FiveThirtyEight had pro­duced a truly ex­tra­or­di­nary amount of traf­fic in 2016, at least — even if none of it was be­ing mon­e­tized. But at some point in early/​mid 2017, with my ini­tial con­tract with ESPN set to ex­pire in early 2018, Skipper called me up to his of­fice one morn­ing and told me ba­si­cally that FiveThirtyEight could no longer be a thing at ESPN, but he’d work his con­nec­tions to find a good land­ing place for it. I don’t know what the im­pe­tus was for this — al­though it came amidst the whole stick to sports” pe­riod at ESPN, and FiveThirtyEight ob­vi­ously mostly was­n’t sports. For what it’s worth, though, I thought Skipper was rel­a­tively sin­cere, and we did take a lot of meet­ings.

But the re­sult­ing ne­go­ti­a­tions were fraught. There were plenty of suitors” in­ter­ested in a pared-down ver­sion of FiveThirtyEight, which would trim staff by per­haps half to two-thirds. For bet­ter or worse, I’d cho­sen to place a big em­pha­sis on staff re­ten­tion, even though the mar­ket con­sen­sus was prob­a­bly right that the busi­ness model would be bet­ter with a leaner staff. The two main ex­ter­nal suit­ors were The Athletic (later sold to the New York Times) and, con­fus­ingly, The Atlantic. I think highly of the lead­er­ship at both or­ga­ni­za­tions, and they had the right idea: FiveThirtyEight could be a com­pelling sub­scrip­tion prod­uct even if it was­n’t vi­able based on web ad­ver­tis­ing alone.

We came quite close to se­cur­ing a deal with The Athletic, close enough that the founders came to New York for an en­tire week of meet­ings to sort through every de­tail. I’d ex­pected things to cul­mi­nate with a hand­shake agree­ment and a cel­e­bra­tory lunch be­fore they headed back to California. If you know any­thing about my or­ga­ni­za­tional skills, they aren’t great, but I thought we (me and the other se­nior staff) did a rea­son­ably good job of soft­en­ing the ground for a po­ten­tial tran­si­tion to The Athletic and a sub­scrip­tion-based busi­ness model. This was­n’t a hard sell be­cause most of the staff would be of­fered jobs at the new or­ga­ni­za­tion.

Long story short: the po­ten­tial deal with The Athletic hit a last-minute snafu, which there might have been time to work around if there had­n’t been a hard dead­line im­posed by Disney, but Disney needed a de­ci­sion from us. The sale process was com­plex: Disney owned some of the key IP (the trade name and site archive), while I owned some of it (the mod­els). Moreover, Disney was both run­ning the sales process and rep­re­sented one of the bid­ders (ABC News). Somewhat bizarrely, ABC, a Disney re­lated party, had en­tered the bid­ding at some point mid­way through the process; ap­par­ently, there had been some sig­nals crossed about this in Burbank, and ESPN had­n’t re­al­ized that ABC had been in­ter­ested.

So we put our tail be­tween our legs and signed up for an­other tenure at Disney, do­ing our best to make it seem as though this had been the plan all along when it ob­vi­ously was­n’t. Although ABC News was nom­i­nally a bet­ter fit than ESPN — they did put me and other staffers on TV more of­ten — I was quite cer­tain at the time that this was go­ing to be our last hur­rah at Disney. It be­came ap­par­ent, even be­fore there was any ink on the deal, that while ABC News was happy enough to spend money on FiveThirtyEight with ma­jor elec­tions forth­com­ing, there was the same is­sue as with ESPN: they weren’t re­ally look­ing to in­vest in the prop­erty in a way that might make it prof­itable and sus­tain­able. And even more so than ESPN, ABC News was a di­nosaur of a busi­ness that at­tracted mostly older cus­tomers and man­age­r­ial tal­ent.

Nevertheless, the pe­riod from roughly 2018 to 2019 was prob­a­bly the high point of FiveThirtyEight at Disney. It helped that our 2018 midterms fore­cast ba­si­cally to­tally nailed the out­come, off­set­ting at least some of the stink from 2016. Still, the ex­is­ten­tial un­cer­tainty about Disney’s loy­alty to the site per­sisted.

This was when we pitched the pay­wall idea to up­per man­age­ment. Disney bat­ted it around and ul­ti­mately turned us down. We never quite got a co­her­ent ra­tio­nale for why: some­thing some­thing about Disney be­ing busy with its Hulu ac­qui­si­tion and not want­ing to launch mul­ti­ple sub­scrip­tion-based busi­nesses at the same time.

It did­n’t make much sense. My con­tent had been pay­walled at the New York Times and at Baseball Prospectus be­fore that. Long be­fore Substack came along, it was the busi­ness model that works for dif­fer­en­ti­ated, high-qual­ity con­tent. (For niche sites”, if you will, al­though elec­tions and sports are large niches.) I don’t know what the pay­wall would have made, but af­ter a year or two to get set­tled, it would prob­a­bly have been com­fort­ably in the seven fig­ures an­nu­ally: let’s call it $5 mil­lion. The cost might be an­noy­ing some cus­tomers who were used to free con­tent, but we were hardly run­ning any ads on the site any­way.7

What sort of busi­ness ba­si­cally turns down a free” $5 mil­lion? Well, ap­par­ently, a com­pany like Disney, a com­pany that made $69 bil­lion in rev­enues in 2019. If you’re a round­ing er­ror when you’re los­ing a cou­ple of mil­lion bucks a year, you’re a round­ing er­ror if you’re mak­ing a few mil­lion also.

The most gen­er­ous in­ter­pre­ta­tion is that Disney only un­der­stands things that op­er­ate at very large scales to truly mass-mar­ket au­di­ences. ESPN.com had once been the ex­cep­tion to this, full of quirky of­fer­ings like Page 2 and Grantland. But it has largely been lo­bot­o­mized, too, with tal­ents like Pablo Torre and Zach Lowe hav­ing been let go.

Then came the COVID pan­demic in 2020. We thought we were smart by telling staff to start work­ing from home a day or two be­fore of­fi­cial Disney guid­ance, not re­al­iz­ing that the news­room would never re­ally be the same again.

Honestly, I think peo­ple for­get how dif­fi­cult this whole pe­riod was. I con­sider my­self lucky never to have got­ten se­ri­ously sick or to have lost any close friends to COVID. But there were chal­lenges if you were work­ing in the me­dia at the time: the ad­just­ment to going re­mote” and the po­lit­i­cal reckoning” that ba­si­cally any non-ex­plic­itly-con­ser­v­a­tive-coded me­dia busi­ness ex­pe­ri­enced, and all of this com­ing on top of an elec­tion year.

Even as the world awk­wardly and un­steadily got back to nor­mal,” FiveThirtyEight never re­ally did. Key staffers like Clare Malone were let go with­out any real plan to re­place them. Slowly, the oxy­gen tubes were be­ing re­moved.

There was also the mat­ter of my con­tract. The new deal I’d signed with ABC News in 2018 was nom­i­nally 5 years long but in­cluded a mu­tual opt-out af­ter 3.5 years, orig­i­nally timed to December 2021. Either I or ABC had the right to pull the plug, but if nei­ther of us did, the deal would ex­tend through the 2022 midterms by de­fault.

The sig­nals I was get­ting from ABC News were quite bear­ish, but they also weren’t quite ready to make a de­ci­sion. What I wanted, frankly, was to pare down my re­spon­si­bil­i­ties to Disney — and take an ap­pro­pri­ate pay cut — in ex­change for non-ex­clu­siv­ity. I’d li­cense the mod­els to them for 2022, pro­duce some des­ig­nated num­ber of columns and TV ap­pear­ances. But I wanted to be of­fi­cially free of man­age­r­ial re­spon­si­bil­i­ties, serv­ing as more of a men­tor/​founder, and also free to start a Substack and be­gin build­ing an au­di­ence for it.

ABCs re­sponse to this was ba­si­cally ra­dio si­lence. There was never any sort of coun­terof­fer or se­ri­ous con­ver­sa­tion about it. Surely, then, they’d ex­er­cise their opt-out right, and we’d each go our sep­a­rate ways in December?

Well, no. Disney re­peat­edly asked to push back the dead­line for mak­ing a go/​no-go de­ci­sion, and my agents and I agreed to sev­eral ex­ten­sions un­til we got tired of the de­lays.

The even­tual, thrice-de­layed dead­line came on an ex­cep­tion­ally cold Saturday in February.8 I had a late din­ner reser­va­tion with my sis­ter and some friends, and we went back to her apart­ment af­ter­ward. I checked my in­box in be­tween sips of wine, half ex­pect­ing to get an email from ABC at 11:59 p.m., but noth­ing came. I don’t know if they lit­er­ally for­got about it, but that’s how it felt.

To be fair, I could have opted out also, and if I’d known at the time how much bet­ter life af­ter Disney would be, I would have. But I was pretty ex­plic­itly in a lame-duck pe­riod from that point on­ward. I’d to­tally busted my ass for the first seven or eight years of my 10-year tenure with Disney, but in this late phase, I was mostly fo­cused on my book, which I ex­plic­itly had the right to work on per my con­tract.

I re­ceived an ur­gent text mes­sage from my boss one morn­ing in April 2023. There had been ru­mors of job cuts at ABC News, and it could only mean one thing. What was sur­pris­ing, though, was that while the cuts were both deep and hap­haz­ard — while you might have been able to take a go at 2024 with a skele­ton crew, you prob­a­bly would­n’t have wanted to cut all the man­agers and ed­i­tors, as ABC did — they weren’t quite ready to shut down the site en­tirely. I was not, tech­ni­cally speak­ing, a part of this lay­off, but with only two months to go on my con­tract, it was safe to as­sume that they weren’t go­ing to of­fer me a new deal and I would­n’t have taken one any­way with the staff gut­ted and the re­main­ing staffers left in an in­cred­i­bly chal­leng­ing place.

To be hon­est, I’m not sure that ABC News re­al­ized that they had no more rights to the mod­els: the li­cense term on the elec­tion mod­els ex­pired with my con­tract.9 But they did even­tu­ally hire an­other model guy”, G. Elliott Morris, to re­place me. I am ab­solutely not look­ing to ex­tend a beef with Morris, who, like me, seems much hap­pier with his post-Dis­ney life on Substack. But it’s im­por­tant con­text to state that this is­n’t the per­son I’d have hired; we’d had a long-run­ning feud, in fact.

I chat­ted with my ex-boss at about this point in time and asked if they’d con­sider dis­con­tin­u­ing use of the FiveThirtyEight trade name. Even leav­ing the Morris hire aside, there were a num­ber of other things I did not like, such as be­gin­ning to styl­ize FiveThirtyEight” as 538” and re­plac­ing our care­fully re­fined site de­sign with an ugly ABC News tem­plate. (Even though FiveThirtyEight rou­tinely drove more web traf­fic than the en­tirety of ABCNews.com.) There was no more sports sec­tion, ei­ther. The brand was very much be­ing de­pre­ci­ated, and I did­n’t want peo­ple to as­so­ci­ate this stage of the site with its glory days.

What hap­pened in 2024 is­n’t some­thing I’d have scripted, though. Basically, their new elec­tion model was lit­er­ally bro­ken, con­tin­u­ing to show Joe Biden vir­tu­ally tied with Trump even af­ter his dis­as­trous de­bate. (Evidently be­cause Morris’s de­sign for it had been over­com­pli­cated. These mod­els are hard to de­sign, by the way.) The model was taken of­fline for more than a month af­ter Biden dropped out, miss­ing ba­si­cally the en­tirety of the Kamala Harris Brat Summer” pe­riod. My un­der­stand­ing is that the new, de­bugged ver­sion had been ready ear­lier, but ABC News PR was ex­cep­tion­ally sen­si­tive about pub­lic per­cep­tions around the model, speak­ing about it only cryp­ti­cally in con­trast to the trans­parency the site had been known for.

Meanwhile, I had a good year. Silver Bulletin re­ceived more sup­port than I ever ex­pected, and I was all over the me­dia dur­ing my book tour. I’m not go­ing to lie: af­ter 10 years feel­ing jerked around by Disney, the whole se­quence was pretty sat­is­fy­ing. But it also proved the point about a sub­scrip­tion-based model be­ing the right call.

ABC fi­nally fully shut down FiveThirtyEight in March 2025, 11 years af­ter its de­but at Disney. Eleven years is a long time in the me­dia busi­ness, and the site cov­ered one of the most tu­mul­tuous pe­ri­ods in American po­lit­i­cal his­tory with its unique blend of an­a­lyt­ics, bru­tal hon­esty and ir­rev­er­ence.

It would be nice if that work could be pre­served for the pub­lic record. I don’t know what plans Disney has for FiveThirtyEight, if any. But I did ap­proach Disney a year or two ago, through my agent, about ac­quir­ing the re­main­ing IP. I’m prob­a­bly the log­i­cal high bid­der, though the value is rapidly de­pre­ci­at­ing as what’s left of the site falls into dis­re­pair. At a min­i­mum, we’d re­store the archive, with promi­nent links to Silver Bulletin.

We were told to ba­si­cally get lost: ABC was an­noyed with my crit­i­cal pub­lic com­ments about their man­age­ment of FiveThirtyEight. It ap­par­ently was­n’t a long con­ver­sa­tion, so I don’t have a lot more color to re­port than that.

Hanlon’s Razor states: Never at­tribute to mal­ice that which can be ad­e­quately ex­plained by stu­pid­ity. But hon­estly, I don’t know which ex­pla­na­tion is bet­ter suited to ABC. During the sec­ond half of my tenure with Disney, it felt like they were putting al­most lit­er­ally zero ef­fort into any de­ci­sions in­volv­ing FiveThirtyEight (other than my be­ing fea­tured promi­nently in their elec­tion night cov­er­age10).

The one good thing about the bit­ter end­ing is that it pre­vents the temp­ta­tion to feel overly awash in nos­tal­gia. Because FiveThirtyEight was al­ways pro­duced with a lot of care, in­clud­ing at­ten­tion to copy edit­ing and graph­ics, it tended to im­press peo­ple as a more smoothly run­ning op­er­a­tion than it ac­tu­ally was. Internally, there was al­ways a lot of con­flict: be­tween bright but opin­ion­ated staffers, all of whom had slightly dif­fer­ent ideas about what data jour­nal­ism” was, be­tween staffers and their opin­ion­ated boss/​founder, be­tween the news cy­cle and our dead­lines, and be­tween pretty much every­one and Disney. The re­la­tion­ship with Disney was­n’t par­tic­u­larly heated, so there weren’t a lot of sto­ries that would make for good movie scenes. But mostly we just felt ne­glected.

Disney HR did send me a lit­eral Mickey Mouse plaque af­ter I left, cel­e­brat­ing my 10 years as a castmember”. There was one small prob­lem, though: they mis­spelled my first name as Nataniel”.

1

Some late-stage con­tent pub­lished un­der abc­news.com URLs still sur­vives.

2

Although I still own the IP to the orig­i­nal ver­sions of the sports mod­els, most of them were last worked on 5 – 10 years ago, so I’ve ba­si­cally de­cided to do a com­plete re­fresh on our suite of sports mod­els in­stead.

3

That’s prob­a­bly about right. The av­er­age Silver Bulletin story takes some­thing like 15 hours from start to fin­ish, and I write faster than most peo­ple.

4

The Times is a dif­fer­ent news­room now, both more data-friendly and more plu­ral­is­tic, but at the time, the main ten­sions were with the pol­i­tics desk, which did not ap­pre­ci­ate FiveThirtyEight’s im­plicit crit­i­cism of horse-race” type cov­er­age dur­ing what was ul­ti­mately a pretty bor­ing 2012 elec­tion

5

In Bloomberg’s case, pri­mar­ily the Bloomberg Terminal.

6

We’d also been dis­mis­sive of Bernie Sanders’s chances against Hillary Clinton, a call” that was tech­ni­cally cor­rect but maybe not cor­rect in spirit given that Sanders won quite a few states in a way that fore­shad­owed Clinton’s weak­nesses.

7

And we’d prob­a­bly have wanted to hire a cou­ple of staff de­voted to things like pric­ing strat­egy and cus­tomer re­ten­tion. Let’s call it $400K-$500K/year for two se­nior staffers. Still a pretty good re­turn on in­vest­ment.

8

Or maybe a cold Friday night in January. A good night to eat pizza at Lucali, in any event.

9

Disney re­tained a non-ex­clu­sive li­cense to con­tinue pub­lish­ing the sports mod­els (but not the pol­i­tics mod­els) in the con­di­tion they were in as of my de­par­ture. Instead, they fired the en­tire sports staff and stopped pub­lish­ing them any­way.

10

ABC was also con­stantly beg­ging us to repli­cate the New York Times needle”. The nee­dle is an ex­cep­tion­ally chal­leng­ing en­gi­neer­ing and sta­tis­ti­cal prod­uct; we had nowhere near the re­sources for it, and al­ways found a way to turn them down.

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

Visit pancik.com for more.