Catalog PyPI
PACKAGE EXPLORERView in registry

abiogenesis

PyPI

Artificial life through symbiogenesis — self-replicating programs emerge from random byte soups

abiogenesisartificial-lifeemergenceself-replicationsymbiogenesis
Versions collected1
Direct dependencies3From release 0.1.0
Last observed20 Oct, 17:26 UTC

README

Version 0.1.0 documentation

Abiogenesis

Self-replicating programs emerge spontaneously from random byte soups through symbiogenesis.

No fitness function. No design. Just random bytes, a 7-instruction interpreter, and time.

Phase Transition

Install

pip install abiogenesis

Quickstart

from abiogenesis import Soup, compression_ratio

soup = Soup(n_tapes=512, tape_len=64, max_steps=10_000, seed=42)
for step in range(100_000):
    soup.interact()
    if (step + 1) % 25_000 == 0:
        cr = compression_ratio(soup.get_state())
        print(f"step {step + 1:>7,}  compression={cr:.4f}")
step  25,000  compression=0.4892
step  50,000  compression=0.3575
step  75,000  compression=0.3044
step 100,000  compression=0.2872

Compression drops below 1.0 as structure self-organizes from noise.

Structure Emerging from Randomness

How It Works

Core Loop

  1. Random initialization — 1024 tapes of 64 random bytes each
  2. Pairwise interaction — pick two tapes, concatenate into 128 bytes, execute as embodied BrainFuck, split back
  3. Symbiogenesis — two partial programs fuse into working programs (the K-term)
  4. Selection pressure — tapes that execute copy instructions replicate; others drift
  5. Mutation (optional) — random bit-flips sustain ecology and prevent crystallization

The interpreter uses 7 instructions (> < + - . [ ]) on a unified code/data tape. The . instruction copies tape[DP] to tape[WP], providing the replication primitive. No fitness function — replication emerges from the physics.

Results

Phase Diagram

Mutation rate is the sole control parameter. Four regimes discovered across 10M-interaction runs:

Phase Diagram

RegimeMutation RateBehavior
Crystal0Single replicator dominates, entropy collapses to 0.018
Soft crystal1e-5Slow crystallization, low diversity
Ecology1e-3Sustained diversity, multiple replicator species coexist
Dissolution1e-1Too much noise, no structure persists (compression ~0.50)

Replicator Emergence

Three types of self-replicators emerge and are classified automatically:

TypeConditionMeaning
Inanimateexecuted ∩ written = ∅Passive — copied but not self-copying
Viralexecuted ∩ written ≠ ∅, written ⊄ executedParasitic — partially self-copying
Cellularwritten ⊆ executedAutopoietic — fully self-replicating

Replicator Timeline

Symbiogenesis Depth

Complexity builds on itself — each interaction layer adds depth to the lineage tree:

Depth Timeline

API

Class / FunctionDescription
Soup(n_tapes, tape_len, max_steps, seed, mutation_rate)Primordial soup of byte tapes
Experiment(config)Full experiment runner with checkpointing
SwarmExperiment(config)Agent-oriented experiment with identity and provenance
Agent(tape, name)Named tape with UUID, lineage, interaction count
KTermFusion(max_steps)Concatenate-execute-split fusion engine
CrystallizationProbe(window_size, critical_threshold)Diversity monitor — detects monoculture onset
DiversityProbe(window_size, critical_threshold)Swarm-level diversity wrapper
compression_ratio(soup)zlib compression ratio (lower = more structure)
shannon_entropy(soup)Shannon entropy over tape distribution
find_replicators(soup, min_length, min_count)Detect and classify self-replicating subsequences
classify_replicator(sequence)Classify as inanimate, viral, or cellular
execute(tape, max_steps)Run the embodied BF interpreter
execute_traced(tape, max_steps)Execute with position tracking

Examples

python examples/quickstart.py             # Basic soup run
python examples/replicator_detection.py   # Find and classify replicators
python examples/swarm_with_probes.py      # Agent swarm with provenance

Development

git clone https://github.com/dopexthrone/abiogenesis.git
cd abiogenesis
pip install -e ".[dev]"
pytest tests/  # 92 tests

Citation

If you use this in research, please cite:

@software{roze2026abiogenesis,
  author = {Roze, Alex},
  title = {Abiogenesis: Self-Replicating Programs from Random Byte Soups},
  year = {2026},
  url = {https://github.com/dopexthrone/abiogenesis}
}

License

MIT — see LICENSE.

Downloads & popularity

1downloads
1-day window · source-reported counts15 Oct 2026
24120
2026-07-18: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-18–2026-07-182026-07-20: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-20–2026-07-202026-07-21: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-21–2026-07-212026-07-23: 5 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-23–2026-07-232026-07-27: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-27–2026-07-272026-07-29: 13 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-29–2026-07-292026-07-30: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-30–2026-07-302026-07-31: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-07-31–2026-07-312026-08-01: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-02–2026-08-022026-08-03: 4 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-03–2026-08-032026-08-04: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-04–2026-08-042026-08-06: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-06–2026-08-062026-08-09: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-09–2026-08-092026-08-13: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-13–2026-08-132026-08-14: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-14–2026-08-142026-08-16: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-16–2026-08-162026-08-17: 4 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-17–2026-08-172026-08-18: 24 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-18–2026-08-182026-08-20: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-20–2026-08-202026-08-22: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-22–2026-08-222026-08-23: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-23–2026-08-232026-08-24: 9 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-24–2026-08-242026-08-28: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-28–2026-08-282026-08-31: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-08-31–2026-08-312026-09-01: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-01–2026-09-012026-09-03: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-03–2026-09-032026-09-04: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-04–2026-09-042026-09-06: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-06–2026-09-062026-09-07: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-07–2026-09-072026-09-08: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-08–2026-09-082026-09-09: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-09–2026-09-092026-09-10: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-10–2026-09-102026-09-12: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-12–2026-09-122026-09-18: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-18–2026-09-182026-09-20: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-20–2026-09-202026-09-21: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-21–2026-09-212026-09-24: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-24–2026-09-242026-09-26: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-26–2026-09-262026-09-27: 2 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-27–2026-09-272026-09-28: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-28–2026-09-282026-09-29: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-29–2026-09-292026-09-30: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-09-30–2026-09-302026-10-04: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-04–2026-10-042026-10-06: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-06–2026-10-062026-10-07: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-07–2026-10-072026-10-08: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-08–2026-10-082026-10-09: 3 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-09–2026-10-092026-10-11: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-11–2026-10-112026-10-13: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-13–2026-10-132026-10-15: 1 · observed 2026-10-20T17:50:25.6229959Z · period 2026-10-15–2026-10-15
18 Jul15 Oct

pypistats · 51 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-15 – 2026-10-1512026-10-20T17:50:25.6229959Z
2026-10-13 – 2026-10-1312026-10-20T17:50:25.6229959Z
2026-10-11 – 2026-10-1112026-10-20T17:50:25.6229959Z
2026-10-09 – 2026-10-0932026-10-20T17:50:25.6229959Z
2026-10-08 – 2026-10-0812026-10-20T17:50:25.6229959Z
2026-10-07 – 2026-10-0712026-10-20T17:50:25.6229959Z
2026-10-06 – 2026-10-0612026-10-20T17:50:25.6229959Z
2026-10-04 – 2026-10-0412026-10-20T17:50:25.6229959Z
2026-09-30 – 2026-09-3012026-10-20T17:50:25.6229959Z
2026-09-29 – 2026-09-2912026-10-20T17:50:25.6229959Z
2026-09-28 – 2026-09-2832026-10-20T17:50:25.6229959Z
2026-09-27 – 2026-09-2722026-10-20T17:50:25.6229959Z
2026-09-26 – 2026-09-2622026-10-20T17:50:25.6229959Z
2026-09-24 – 2026-09-2432026-10-20T17:50:25.6229959Z
2026-09-21 – 2026-09-2122026-10-20T17:50:25.6229959Z
2026-09-20 – 2026-09-2022026-10-20T17:50:25.6229959Z
2026-09-18 – 2026-09-1822026-10-20T17:50:25.6229959Z
2026-09-12 – 2026-09-1212026-10-20T17:50:25.6229959Z
2026-09-10 – 2026-09-1012026-10-20T17:50:25.6229959Z
2026-09-09 – 2026-09-0932026-10-20T17:50:25.6229959Z
2026-09-08 – 2026-09-0822026-10-20T17:50:25.6229959Z
2026-09-07 – 2026-09-0712026-10-20T17:50:25.6229959Z
2026-09-06 – 2026-09-0632026-10-20T17:50:25.6229959Z
2026-09-04 – 2026-09-0422026-10-20T17:50:25.6229959Z
2026-09-03 – 2026-09-0322026-10-20T17:50:25.6229959Z
2026-09-01 – 2026-09-0112026-10-20T17:50:25.6229959Z
2026-08-31 – 2026-08-3122026-10-20T17:50:25.6229959Z
2026-08-28 – 2026-08-2822026-10-20T17:50:25.6229959Z
2026-08-24 – 2026-08-2492026-10-20T17:50:25.6229959Z
2026-08-23 – 2026-08-2332026-10-20T17:50:25.6229959Z
2026-08-22 – 2026-08-2222026-10-20T17:50:25.6229959Z
2026-08-20 – 2026-08-2012026-10-20T17:50:25.6229959Z
2026-08-18 – 2026-08-18242026-10-20T17:50:25.6229959Z
2026-08-17 – 2026-08-1742026-10-20T17:50:25.6229959Z
2026-08-16 – 2026-08-1612026-10-20T17:50:25.6229959Z
2026-08-14 – 2026-08-1432026-10-20T17:50:25.6229959Z
2026-08-13 – 2026-08-1322026-10-20T17:50:25.6229959Z
2026-08-09 – 2026-08-0912026-10-20T17:50:25.6229959Z
2026-08-06 – 2026-08-0612026-10-20T17:50:25.6229959Z
2026-08-04 – 2026-08-0432026-10-20T17:50:25.6229959Z
2026-08-03 – 2026-08-0342026-10-20T17:50:25.6229959Z
2026-08-02 – 2026-08-0212026-10-20T17:50:25.6229959Z
2026-08-01 – 2026-08-0112026-10-20T17:50:25.6229959Z
2026-07-31 – 2026-07-3122026-10-20T17:50:25.6229959Z
2026-07-30 – 2026-07-3032026-10-20T17:50:25.6229959Z
2026-07-29 – 2026-07-29132026-10-20T17:50:25.6229959Z
2026-07-27 – 2026-07-2712026-10-20T17:50:25.6229959Z
2026-07-23 – 2026-07-2352026-10-20T17:50:25.6229959Z
2026-07-21 – 2026-07-2122026-10-20T17:50:25.6229959Z
2026-07-20 – 2026-07-2012026-10-20T17:50:25.6229959Z
2026-07-18 – 2026-07-1812026-10-20T17:50:25.6229959Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.019 Feb 20263

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
dopexthrone/abiogenesis

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:26 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:1cd1293aa61f86575c194905856e860f3e0b133279d7b7a81623d2a5020632bc