LifeWiki Entity Store 2025

Source Notebook

An updated and cleaned entity store of the Game of Life wiki website

Details

The LifeWiki Entity Store 2025 is an EntityStore containing information extracted from the LifeWiki, the most comprehensive online resource for Conway's Game of Life. This dataset has been meticulously cleaned and formatted for use in computational analysis, pattern discovery, and historical research in cellular automata.
"Name"The name of the pattern
"Year"The year the pattern was first discovered
"MatrixData"The initial pattern in the form of a 2D Sparse Array
"Class"The type of pattern, potential classes include "Oscillator", "Strict still life", "Spaceship" and more
"InitialWeight"The number of black cells in the initial array
"Wiki"URL to the wiki page for this particular pattern
"DataFiles"Name of files on the LifeWiki website. Use the link https://conwaylife.com/patterns/[DataFile] to view the file
"Speed"For gliders and spaceships, this gives the distance the object moves per step

Examples

Basic Examples

In[1]:=
ResourceData[\!\(\*
TagBox["\"\<LifeWiki Entity Store 2025\>\"",
#& ,
BoxID -> "ResourceTag-LifeWiki Entity Store 2025-Input",
AutoDelete->True]\)]
Out[1]=
In[2]:=
EntityRegister[ResourceData[\!\(\*
TagBox["\"\<LifeWiki Entity Store 2025\>\"",
#& ,
BoxID -> "ResourceTag-LifeWiki Entity Store 2025-Input",
AutoDelete->True]\)]]
Out[2]=
In[3]:=
EntityValue["GameOfLife2025", "Properties"]
Out[3]=

Scope & Additional Elements (1) 

In[4]:=
MapAt[ArrayPlot, SortBy[EntityValue[
   EntityClass[
    "GameOfLife2025", {"Class" -> "Oscillator", "InitialWeight" -> TakeSmallest[5]}], {"Period", "InitialWeight",
     "MatrixData", "Year"}, "Dataset"], #InitialWeight &], {All, Key["MatrixData"]}]
Out[4]=
In[5]:=
MapAt[ArrayPlot, SortBy[EntityValue[
   EntityClass[
    "GameOfLife2025", {"Class" -> "Spaceship", "InitialWeight" -> TakeSmallest[5]}], {"Period", "InitialWeight",
     "MatrixData", "Year"}, "Dataset"], #InitialWeight &], {All, Key["MatrixData"]}]
Out[5]=

Group by class:

In[6]:=
GroupBy[EntityValue[
  EntityClass["GameOfLife2025", All], {"Class", "Name", "Year"}, "Dataset"], #Class & -> (#Year &)]
Out[6]=

Visualizations (5) 

See the pattern:

In[7]:=
ArrayPlot[
 First[EntityValue[
   EntityClass["GameOfLife2025", "Name" -> EqualTo["Gosper glider gun"]],
    "MatrixData"]]]
Out[7]=
In[8]:=
Options[CellularAutomatonHistoryPlot] = {Mesh -> True, MeshStyle -> Opacity[.1], ColorRules -> {-1 -> Black, x_ /; x != -1 :> Blend[RGBColor /@ {Hue[0., 0., 1.], Hue[0.12, 0.43, 0.98], Hue[
         0.12, 1, 0.99]}, x]}, "Decay" -> .8, "Margin" -> 1};
CellularAutomatonHistoryPlot[rule_, init_, t_, opts___] :=
 Module[{allops = Merge[{Options[CellularAutomatonHistoryPlot], opts}, Last]},
  ArrayPlot[
   With[{u =
      ArrayPad[#, allops["Margin"]] & /@ CellularAutomaton[rule, init, t]}, MapThread[
     If[#2 == 1, -1, #] &, {Fold[allops["Decay"] # + #2 &, u], Last[u]},
      2]], Sequence @@ FilterRules[Normal@allops, Options[ArrayPlot]]]]
CellularAutomatonHistoryPlot["GameOfLife", {First[
   EntityValue[
    EntityClass["GameOfLife2025", "Name" -> EqualTo["Gosper glider gun"]], "MatrixData"]], 0}, 150,
  ImageSize -> 260]
Out[9]=
In[10]:=
CellularAutomatonPlot3D[rule_, init_, t_, opts___] := ArrayPlot3D[
  CellularAutomaton[rule, init, t], opts,
    ColorFunction -> (If[# == 1, SetAlphaChannel[ RGBColor[1., 0.6436, 0.03622], 1], Transparent] &),
    ColorFunctionScaling -> False, ImageSize -> 500, Mesh -> None, MeshStyle -> Opacity[.3]]
CellularAutomatonPlot3D["GameOfLife", {First[
   EntityValue[
    EntityClass["GameOfLife2025", "Name" -> EqualTo["Gosper glider gun"]], "MatrixData"]], 0}, 100,
  ImageSize -> 140, ViewPoint -> {-2.198487002413733`, -2.3413385931086927`, 1.0652645176845457`}]
Out[11]=
In[12]:=
CellularAutomatonSpacetimePlot[rule_, init_, t_, opts___] :=
 Module[{allops = Merge[{Mesh -> True, MeshStyle -> Opacity[.1], ColorRules -> {-1 -> Black, x_ /; x != -1 :> Blend[RGBColor /@ {Hue[0., 0., 1.], Hue[0.12, 0.43, 0.98], Hue[0.12, 1, 0.99]}, x]}, opts}, Last]},
  ArrayPlot[With[{u = Transpose@CellularAutomaton[rule, init, t]},
    MapThread[
     If[#2 == 1, -1, #] &, {Fold[allops["Decay"] # + #2 &, u], Last[u]},
      2]], Sequence @@ FilterRules[Normal@allops, Options[ArrayPlot]]]]
CellularAutomatonSpacetimePlot["GameOfLife", {First[
   EntityValue[
    EntityClass["GameOfLife2025", "Name" -> EqualTo["Gosper glider gun"]], "MatrixData"]], 0}, 150,
  "Decay" -> .99, ImageSize -> 95, Mesh -> None]
Out[14]=

See the accumulation of discoveries in different classes over time:

In[15]:=
With[{d = EntityValue[
    EntityClass["GameOfLife2025", All], {"Class", "Period", "InitialWeight", "MatrixData", "Year"}, "Association"]}, Module[{topclasses = Keys[TakeLargest[CountsBy[Values[d], #Class &], 5]]},
  vals = Accumulate[#] / Total[#, 2] &[
    Table[Lookup[#, i, Table[0, 5]] &[
      Lookup[CountsBy[#, #Class &], topclasses, 0] & /@ GroupBy[Values[d], #Year &]],
      {i, 1969, 2025}]] ;
  BarChart[vals, ChartLayout -> "Stacked", ChartStyle -> "Pastel", FrameTicks -> {Automatic, {Table[{i, i + 1967}, {i, 3, 57, 10}], Automatic}}, Frame -> True, ChartLegends -> topclasses, FrameLabel -> {None, "relative number of patterns"}, AspectRatio -> .4]]
 ]
Out[15]=

View the size and number of discoveries by decade:

In[16]:=
With[{d = EntityValue[
    EntityClass["GameOfLife2025", All], {"Class", "Period", "InitialWeight", "MatrixData", "Year"}, "Association"]}, Module[{}, bw = ReverseSortBy[#, #InitialWeight &] & /@ GroupBy[Values[d], Round[#Year, 10] &];
  bubs = MapIndexed[{#2[[1, 1]], #2[[2]], #InitialWeight} &, bw, {2}];
  BubbleChart[Values[bubs], ChartElements -> Graphics[Rectangle[]], FrameLabel -> {None, "number of patterns"}, AspectRatio -> .4]]]
Out[16]=

See the decreases in different periods over time:

In[17]:=
d = EntityValue[
   EntityClass["GameOfLife2025", All], {"Class", "Period", "InitialWeight", "MatrixData", "Year"}, "Association"];
byp = SortBy[(SortBy[#, #Year &] & /@ GatherBy[
      Values[Select[
        d, #Class === "Oscillator" && KeyExistsQ[#, "Period"] && 1 <= #[["Period"]] < 60 &]], #Period &]), #[[1, "Period"]] &];
allis = Discard[
   DeleteDuplicates[
      FoldList[
       Function[{min, next}, If[Times @@ Dimensions[next["MatrixData"]] < Times @@ Dimensions[min["MatrixData"]], next, min]], #]] & /@
     byp, Length[#] == 1 &];
ListLinePlot[
 MapIndexed[{#Year, Times @@ Dimensions[#MatrixData]} &, allis, {2}],  ScalingFunctions -> "Log", Mesh -> All, Frame -> True, FrameLabel -> {None, "Size of pattern"}, AspectRatio -> .4]
Out[18]=

Frequency as a function of size:

In[19]:=
d = EntityValue[
   EntityClass["GameOfLife2025", All], {"Class", "Period", "InitialWeight", "MatrixData", "Year"}, "Association"];
iws = ReverseSort[CountsBy[Values[d], #InitialWeight &]];
ListLogLogPlot[iws, PlotRange -> All, Frame -> True, FrameLabel -> {"frequency", "size"}, AspectRatio -> .4]
Out[20]=

Wolfram Research, "LifeWiki Entity Store 2025" from the Wolfram Data Repository (2025)  

Data Resource History

Source Metadata

See Also

Data Downloads

Publisher Information