The Nuclear Timeline from Trinity to Pyongyang: The Spread of Nuclear Weapons

Author

Mardan Mirzaguliyev

Published

June 21, 2025

On June 13, Israel launched an attack on Iran, claiming concerns that the country is extremely close to developing nuclear weapons. While Iran’s nuclear program started in the 1960s, it’s worth noting that it is far from being the first nation to pursue or possess such weapons.

Nuclear weapons first emerged in the mid-20th century, beginning with the United States’ Trinity test in 1945. Since then, eight other countries have acquired nuclear weapons, most of them doing so sequentially throughout the last century. The only exception is North Korea, which joined the “atomic” club in 2006. The exact size of its arsenal remains unknown.

The visualization and table below trace the global timeline of nuclear weapon development — from the deserts of New Mexico to the mountains of North Korea — highlighting when each nation joined the atomic age.

Libararies

#|label: load necessary libraries

library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
library(ggpubr)
library(knitr)
library(jpeg)
library(cowplot)

Attaching package: 'cowplot'
The following object is masked from 'package:ggpubr':

    get_legend
library(grid)
library(janitor)

Attaching package: 'janitor'
The following objects are masked from 'package:stats':

    chisq.test, fisher.test

Data - Web scraped from two sources via ChatGPT (see references)

#|label: data

nuclear_arsenals <- data.frame(
  Country = c("Russia", "United States", "China", "France",
              "United Kingdom", "Pakistan", "India", "North Korea"),
  Warheads_Total = c(5449, 5277, 600, 290, 225, 170, 180, 50),
  First_Test_Year = c(1949, 1945, 1964, 1960, 1952, 1998, 1974, 2006),
  First_Test_Name = c("RDS-1", "Trinity", "Project 596", "Gerboise Bleue", "Hurricane", "Chagai-I", "Smiling Buddha", "Unknown"),
  Notes = c(
    "Largest stockpile; successor of USSR",
    "First to develop nuclear weapons",
    "Rapid modernization; ~500+ warheads",
    "Maintains ~300 warheads",
    "Sea-based deterrent",
    "Estimated ~160 warheads",
    "Estimated ~160 warheads",
    "Material for 40–50 warheads"),
  stringsAsFactors = FALSE
)
#|label: Format column headings for the table

colnames(nuclear_arsenals) <- c(
  "Country",
  "Warheads Total",
  "First Test Year",
  "First Test Name",
  "Notes"
)
#|:label: Print table

kable(nuclear_arsenals, caption = "Nuclear-Armed States as of 2025")
Nuclear-Armed States as of 2025
Country Warheads Total First Test Year First Test Name Notes
Russia 5449 1949 RDS-1 Largest stockpile; successor of USSR
United States 5277 1945 Trinity First to develop nuclear weapons
China 600 1964 Project 596 Rapid modernization; ~500+ warheads
France 290 1960 Gerboise Bleue Maintains ~300 warheads
United Kingdom 225 1952 Hurricane Sea-based deterrent
Pakistan 170 1998 Chagai-I Estimated ~160 warheads
India 180 1974 Smiling Buddha Estimated ~160 warheads
North Korea 50 2006 Unknown Material for 40–50 warheads
#|label: background image

# load muchroom image
img <- readJPEG("mushroom.jpg")

# create a raster image grob (grid graphic object)
img_grob <- rasterGrob(img, width = unit(1,"npc"), height = unit(1,"npc"))
#|label: create lowercase column names for convenient manipulation

nuclear_arsenals <- clean_names(nuclear_arsenals)
#|label: Plot object to combine with the background image

p <- ggplot(nuclear_arsenals, aes(x = first_test_year, y = reorder(country, first_test_year))) +
  geom_point(size = 4, color = "darkred") +
  geom_text(aes(label = warheads_total), hjust = -0.3, size = 3.5, color = "white") +
  labs(
    title = "The Nuclear Timeline from Trinity to Pyongyang",
    subtitle = "Estimated warheads per country (2025)",
    caption = "While Israel did not conduct any test it is estimated to have 90 warheads",
    x = "First Nuclear Test Year",
    y = "Country"
  ) +
  theme(
    panel.background = element_rect(fill = NA, color = NA),
    plot.background = element_rect(fill = NA, color = NA),
    panel.grid.major = element_blank(),   
    panel.grid.minor = element_blank(),
    title = element_text(color = "white"),
    axis.text.x = element_text(color = "white"),
    axis.text.y = element_text(color = "white"),
    axis.title = element_text(color = "white")
  ) +
  scale_x_continuous(limits = c(1945, 2010), breaks = seq(1945, 2010, by = 5))
#|:label: Timeline

ggdraw() +
  draw_grob(img_grob) +   # Background image
  draw_plot(p)            # Plot on top

REFERENCES

Your questions answered on the Israel-Iran conflict (accessed: 2025/06/21)

Israel-Iran: How did latest conflict start and where could it lead? (accessed: 2025/06/21)

The International Campaign to Abolish Nuclear Weapons (ICAN) (accessed: 2025/06/21, Web Scraped using ChatGPT)

Nuclear Weapons: Who Has What at a Glance (accessed: 2025/06/22, Web Scraped using ChatGPT)

A simple timeline of Iran’s nuclear program (accessed: 2025/06/21)

Nuclear Mushroom Image (accessed: 2025/06/21)