Back to the map

About this map

Air War Over Europe

An interactive map of Allied bombing raids over Europe, from the first days of the Second World War in September 1939 to its end in May 1945. It replays the war one day at a time, using the US Air Force’s own records. Made by Bruce.

Attacks recorded
…
Places hit
…
First and last attack
… to …
Tons of bombs recorded
…

What you’re looking at

Each small plane on the map stands for a group of bombers flying together, called a formation. It might be 2 aircraft or 50. The plane flies from the area where its group was based to the place it attacked, and leaves a ring where it struck. Places glow when they’re hit and slowly fade.

Press play to watch the war unfold day by day. Each year begins with a short introduction, and small diamonds on the timeline mark important dates. Click any place to see its history, from the whole city down to a single attack. Filters let you focus on particular air forces, aircraft, or dates.

The records give the date of each attack but not the time of day, so the moment each plane arrives on the map is made up.

Where the information comes from

The attacks come from a US Air Force database called THOR (short for Theater History of Operations Reports). It was built from mission reports written during the war, and it covers both American and British (Royal Air Force) bombing around the world.

The US Air Force’s original download pages are no longer online, so this map uses a public copy of the same files. The copy is saved exactly as downloaded, so it can be checked against an official version if one becomes available again.

During the war, each bomber unit wrote its own report, and each report became one record in the database. So a single big raid can show up as dozens of records, and on this map, as dozens of planes. To make raids easier to follow, the details panel groups every record for the same place, site and date into a single raid, with the combined number of aircraft and bombs.

How the records were cleaned up

Records typed up decades ago contain mistakes. Before anything appears on the map, a script checks the records and fixes or sets aside the ones that don’t add up. Every change is counted, and corrected records are labeled when you open them.

Records in the original database…
Set aside (see below)…
Appear on the map…
What we foundHow manyWhat we did
Attacks outside Europe, in the Pacific, Asia, and Africa … Left out, since this map covers Europe
The same record entered twice from two collections of paperwork … Removed
Records with no usable location … Left out, since they can’t be placed on the map
American records identical to another record in every detail … Hidden by default after a check against official wartime figures (see “How we checked the numbers”). Turn on “Show suspected duplicate records” in the filters to see them.
British records with the same pattern … Kept and shown, because no British source has been checked yet
Places put in the wrong spot, like Münster, which was placed at a small village with the same name … Moved to the right spot
Places labeled with the wrong country … Corrected
Records missing their air force … Filled in from the type of aircraft, and labeled “inferred”
Berlin attacks credited to the 15th Air Force, which flew from Italy, on days when only the 8th Air Force from England bombed Berlin … Credited to the 8th Air Force, and labeled “corrected”
The same factory or site spelled different ways … spellings Merged into … readable names
Records with no factory or site named … Named after the target’s industry, such as “bearings plants,” and labeled “inferred”
Bomb amounts that looked wrong, such as placeholder numbers or loads too heavy for the aircraft … Left out of the totals
Records with no takeoff airfield … Shown flying from the general area their air force used at the time, and labeled “approximate”

Every judgment call, such as which spellings to merge or where a misplaced town really belongs, is kept in a simple spreadsheet next to the code, so anyone can see why it was made.

How we checked the numbers

This log records each time the map’s numbers were compared with an outside source, and what changed as a result, oldest first. A version of the bomb-tonnage check also runs automatically every time the data is updated.

Loading the log…

What the map can’t tell you

GapWhat it means for the map
British raids from 1942 onward are under-recorded. The database holds … British records for 1941, but only … for 1942 and … for 1943, just as Britain’s bombing campaign was growing fastest. The map understates Britain’s share of the bombing from 1942 on.
Most records don’t say where the planes took off from. Only … do. Most flight paths start from an estimated area, not an exact airfield.
Most records don’t name the squadron or group that flew. Only … do, though every record from 1939 does. The map can rarely tell you which unit carried out an attack.
The records have dates but no times. When each plane arrives during the day is made up, and flight paths and heights are drawn for clarity, not accuracy.
Some records place an air force somewhere it rarely flew, such as Italy-based bombers attacking targets far to the north. … of these are shown as recorded, because they couldn’t be confirmed either way.
American bomb totals still run higher than the official wartime figures, most of all for 1944, even with suspected duplicates hidden. Treat American bomb totals, especially for 1944, as somewhat high. The log above explains what was checked.
Each record is a formation, not a single plane’s flight. Counts on the map are formations. The number of aircraft is known for … of them, and the amount of bombs for ….
THOR attack records per year
YearRAFUSAAF

How it was made

I built this map with the help of AI. I set the goals, designed how it looks and works, and made the judgment calls about the data. Claude, an AI model made by Anthropic, wrote the code, one reviewed step at a time.

The records are cleaned up with a script written in Python. The map itself is a single web page, hosted on Cloudflare at airwarmap.pages.dev.

About the historical notes

The yearly introductions and the notes on important dates were drafted by Claude, using trusted sources: the RAF Museum, the Imperial War Museums, the National Museum of the US Air Force, the official British and American air force histories, the US Strategic Bombing Survey, the Army Air Forces Statistical Digest, and Encyclopaedia Britannica. Each note lists its sources, so you can read further.

I’m reading and editing every draft myself: … of … checked so far.

Credits

Attack records THOR (Theater History of Operations Reports), World War II, US Air Force. Public domain.
Official wartime figures Army Air Forces Statistical Digest, World War II, Office of Statistical Control, 1945. Public domain. From the Internet Archive’s scan of the original.
Map OpenFreeMap. Map data © OpenMapTiles and © OpenStreetMap contributors (ODbL license).
Terrain Mapzen Terrain Tiles on AWS Open Data, built from SRTM, GMTED, ETOPO1 and other sources.
Fonts Barlow and Barlow Condensed by Jeremy Tribby, and IBM Plex Mono by IBM. SIL Open Font License, via Google Fonts.
Software MapLibre GL JS (BSD 3-Clause), deck.gl (MIT), pandas (BSD 3-Clause), and NumPy (BSD).