{"id":32118247,"url":"https://github.com/stsoftwareau/neat-ai","last_synced_at":"2026-06-16T13:00:55.675Z","repository":{"id":37338277,"uuid":"454279688","full_name":"stSoftwareAU/NEAT-AI","owner":"stSoftwareAU","description":"DenoJS Neural network project written in typescript.","archived":false,"fork":false,"pushed_at":"2026-06-15T23:43:53.000Z","size":19984,"stargazers_count":9,"open_issues_count":10,"forks_count":0,"subscribers_count":2,"default_branch":"Develop","last_synced_at":"2026-06-16T00:20:43.581Z","etag":null,"topics":["ai","deno-module","neural-network","typescript","typescript-library"],"latest_commit_sha":null,"homepage":"https://jsr.io/@stsoftware/neat-ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stSoftwareAU.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-02-01T06:05:47.000Z","updated_at":"2026-06-13T10:53:34.000Z","dependencies_parsed_at":"2026-02-04T06:01:44.631Z","dependency_job_id":"013c35a2-9664-4961-8953-1c39f9ee5be2","html_url":"https://github.com/stSoftwareAU/NEAT-AI","commit_stats":null,"previous_names":[],"tags_count":1058,"template":false,"template_full_name":null,"purl":"pkg:github/stSoftwareAU/NEAT-AI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stSoftwareAU%2FNEAT-AI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stSoftwareAU%2FNEAT-AI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stSoftwareAU%2FNEAT-AI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stSoftwareAU%2FNEAT-AI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stSoftwareAU","download_url":"https://codeload.github.com/stSoftwareAU/NEAT-AI/tar.gz/refs/heads/Develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stSoftwareAU%2FNEAT-AI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34406824,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","deno-module","neural-network","typescript","typescript-library"],"created_at":"2025-10-20T17:01:54.252Z","updated_at":"2026-06-16T13:00:55.668Z","avatar_url":"https://github.com/stSoftwareAU.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧬 NEAT-AI Neural Network for DenoJS\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"100\" height=\"100\" src=\"docs/logo.png\" align=\"right\" alt=\"NEAT-AI logo\"\u003e\n\u003cstrong\u003eNEAT-AI\u003c/strong\u003e started from \u003cstrong\u003eNEAT\u003c/strong\u003e — the\nNeuroEvolution of Augmenting Topologies algorithm published by\n\u003ca href=\"http://nn.cs.utexas.edu/downloads/papers/stanley.ec02.pdf\"\u003eStanley \u0026amp; Miikkulainen (2002)\u003c/a\u003e\n— and has grown into a hybrid evolutionary plus gradient-based system, written\nin DenoJS using TypeScript. NEAT-AI keeps the speciation and structure-mutation\nideas from standard NEAT but layers on much more recent research: memetic\nevolution, error-guided \u003cstrong\u003eDiscovery\u003c/strong\u003e, Markov Chain Monte Carlo\n(MCMC) mutation acceptance, synthetic synapses, predictive coding, Muon-style\northogonalised gradients, and other algorithms (some published only weeks\nbefore this paragraph was written).\n\u003c/p\u003e\n\n\u003e [!IMPORTANT]\n\u003e **NEAT** refers to the original 2002 algorithm. **NEAT-AI** refers to this\n\u003e project — they are no longer the same thing. See the\n\u003e [NEAT vs NEAT-AI terminology rule in AGENTS.md](./AGENTS.md#-neat-vs-neat-ai--which-term-to-use)\n\u003e for the convention used throughout this repository.\n\nFor project terminology, coding conventions, and development guidelines, see\n[AGENTS.md](./AGENTS.md).\n\n## 📖 Docs map\n\nNew here? Skim this section first; every topic guide is one link away.\n\n- **[docs/README.md](./docs/README.md)** — full topic index with a \"where to\n  start\" reading path and one-line summaries for every long-form guide.\n- **[CONTRIBUTING.md](./CONTRIBUTING.md)** — development setup, workflow, and\n  how to bump the pinned NEAT-AI-core revision.\n- **[AGENTS.md](./AGENTS.md)** — terminology and coding conventions for human\n  and AI contributors.\n- **[Glossary](./docs/GLOSSARY.md)** — the canonical reference for every acronym\n  and house term used here (Creature, Discovery, Grafting, CRISPR, Intelligent\n  Design, MCMC, FFI, WASM, …). When a themed word below is unfamiliar, this is\n  the place to look it up.\n- **[COMPARISON.md](./COMPARISON.md)** — how NEAT-AI compares to other AI\n  approaches (and to standard NEAT).\n- **Topic guides** — quick jumps to the most-used docs:\n  - Compute / WebAssembly (WASM):\n    [Activation Functions](./docs/ACTIVATION_FUNCTIONS.md),\n    [Backprop Elasticity](./docs/BACKPROP_ELASTICITY.md),\n    [GPU Acceleration](./docs/GPU_ACCELERATION.md)\n  - Discovery / Foreign Function Interface (FFI):\n    [Discovery Guide](./docs/DISCOVERY_GUIDE.md),\n    [DiscoveryDir API](./docs/DISCOVERY_DIR.md),\n    [Discovery Architecture](./docs/DISCOVERY_ARCHITECTURE.md)\n  - Performance: [Performance Tuning](./docs/PERFORMANCE_TUNING.md),\n    [Performance Research](./docs/PERFORMANCE_RESEARCH.md)\n  - Reference: [API Reference](./docs/API_REFERENCE.md),\n    [Configuration Guide](./docs/CONFIGURATION_GUIDE.md),\n    [Troubleshooting](./docs/TROUBLESHOOTING.md)\n  - Specialised: [CRISPR Guide](./docs/CRISPR_GUIDE.md),\n    [Intelligent Design](./docs/INTELLIGENT_DESIGN.md),\n    [Predictive Coding](./docs/PREDICTIVE_CODING.md)\n  - Topic guides:\n    [Reinforcement learning / agent rollouts](./docs/REINFORCEMENT_LEARNING.md)\n  - Governance: [Core Dependency Policy](./docs/CORE_DEPENDENCY_POLICY.md),\n    [Parity Gate](./docs/PARITY_GATE.md), [Security](./SECURITY.md),\n    [Changelog](./CHANGELOG.md)\n\n## 🏗️ High-level architecture\n\nA creature is a NEAT-AI genome that mutates and breeds in TypeScript, then runs\nits forward pass inside a vendored WebAssembly (WASM) module. When the optional\nRust extension is present, error-guided structural proposals come back over a\nForeign Function Interface (FFI) call.\n\n```mermaid\nflowchart LR\n    Pop[\"Population\u003cbr/\u003e(Creatures)\"] --\u003e|select / mutate / breed| Pop\n    Pop --\u003e|forward pass| WASM[\"WebAssembly (WASM)\u003cbr/\u003eactivation + scoring\"]\n    WASM --\u003e|fitness| Pop\n    Pop -.-\u003e|optional via FFI| Rust[\"Rust Discovery extension\u003cbr/\u003e(GPU-accelerated)\"]\n    Rust -.-\u003e|structural candidates| Pop\n```\n\nThe Rust path is optional: if the\n[NEAT-AI-Discovery](https://github.com/stSoftwareAU/NEAT-AI-Discovery) extension\nis not built, discovery is skipped and evolution still runs end-to-end in WASM.\nSee [docs/DISCOVERY_ARCHITECTURE.md](./docs/DISCOVERY_ARCHITECTURE.md) for the\nfull pipeline.\n\n## ✨ Feature Highlights\n\nThe list below describes **NEAT-AI** behaviour. Many entries — memetic\nevolution, error-guided Discovery, MCMC mutation acceptance, synthetic synapses,\nONNX export — are extensions beyond the standard NEAT algorithm. See\n[COMPARISON.md](./COMPARISON.md) for the side-by-side picture.\n\n1. **Extendable Observations**: Input and output features are identified by\n   stable UUIDs in the exported representation, rather than only by positional\n   indices. This prevents the need to restart the evolution process as new\n   observations are added, and makes it practical to evolve creatures on\n   multiple machines and then recombine them, much like NEAT's historical\n   marking for genes\n   [Stanley \u0026 Miikkulainen (2002)](http://nn.cs.utexas.edu/downloads/papers/stanley.ec02.pdf).\n\n2. **Distributed Training**: Training and evolution can be run on multiple\n   independent nodes. The best-of-breed creatures can later be combined on a\n   centralised controller node, mirroring the\n   [island model](https://en.wikipedia.org/wiki/Island_model) used in\n   evolutionary algorithms.\n\n3. **Life Long Learning**: Designed for continuous learning in changing\n   environments. The same population can keep training and adapting as new data\n   arrives over weeks or months, supporting\n   [continual learning](https://en.wikipedia.org/wiki/Continual_learning) while\n   still relying on your training data to keep past knowledge represented.\n\n4. **Efficient Model Utilisation**: Once trained, the current best model can be\n   utilised efficiently by calling the `activate` function. This runs a single\n   forward pass that maps inputs to outputs.\n\n   \u003e [!NOTE]\n   \u003e **Activation uses WebAssembly (WASM, required).** The library initialises\n   \u003e the WASM backend automatically; callers do not need to call any init\n   \u003e function or set environment variables.\n   \u003e\n   \u003e **Spawning your own Deno Workers that import NEAT-AI from the JavaScript\n   \u003e Registry (JSR)?** The worker may need explicit help to reach `jsr.io` for\n   \u003e the WASM bytes — see\n   \u003e [Troubleshooting › JSR-hosted NEAT-AI in your own workers](./docs/troubleshooting/WASM.md#-jsr-hosted-neat-ai-in-your-own-workers-issue-2545)\n   \u003e for the pre-fetch pattern (`fetchWasmForWorkers` +\n   \u003e `initialiseWasmActivationFromPayload`).\n\n5. **Unique Squash Functions**: Supports unique squash functions such as IF, MAX\n   and MIN, offering a wider range of potential solutions. More about\n   [Activation Functions](https://en.wikipedia.org/wiki/Activation_function).\n\n6. **Neuron Pruning**: Neurons whose activations don't vary during training are\n   removed, and the biases in associated neurons are adjusted. More about\n   [Pruning (Neural Networks)](https://en.wikipedia.org/wiki/Pruning_(neural_networks)).\n\n7. **CRISPR**: Allows injection of hand-crafted genes into a population of\n   creatures during evolution. The name borrows the biology acronym CRISPR\n   (Clustered Regularly Interspaced Short Palindromic Repeats) from the\n   [CRISPR gene-editing technique](https://en.wikipedia.org/wiki/CRISPR); in\n   NEAT-AI, the \"edits\" are added neurons and synapses.\n\n8. **Grafting**: If parents aren't \"genetically compatible\", the grafting\n   algorithm enables cross-island interbreeding, preserving diversity in the\n   same spirit as\n   [island-model evolution](https://en.wikipedia.org/wiki/Island_model).\n\n9. **Memetic Evolution**: Records and utilises the biases and weights of the\n   fittest creatures to fine-tune future generations. Learn more about\n   [Memetic Algorithms](https://en.wikipedia.org/wiki/Memetic_algorithm).\n\n10. **Error-Guided Structural Evolution**: Dynamically identifies and creates\n    new synapses by analysing neuron activations and errors. A dedicated Rust\n    extension performs graphics processing unit (GPU)-accelerated analysis and\n    proposes structural candidates over a Foreign Function Interface (FFI).\n    Discovery runs typically find improvements of 0.5–3% per run that accumulate\n    over many iterations.\n\n    \u003e [!WARNING]\n    \u003e Relies entirely on the\n    \u003e [NEAT-AI-Discovery](https://github.com/stSoftwareAU/NEAT-AI-Discovery)\n    \u003e Rust extension library. If the library is not available, the discovery\n    \u003e phase is skipped; there is no TypeScript fallback.\n\n11. **[Visualisation](https://stsoftwareau.github.io/NEAT-AI/index.html)**\n\n12. **Adaptive Mutation Rate**: Automatically adjusts mutation strategy based on\n    creature size - large creatures focus on weight/bias modification rather\n    than topology expansion.\n\n13. **Adaptive Mutation Rate Based on Fitness Progress**: Mutation rate is\n    automatically adjusted based on whether evolution is improving, stagnating,\n    or stable, helping balance exploration and exploitation.\n\n14. **Continuous Incremental Discovery**: For distributed, multi-machine\n    discovery workflows that accumulate small improvements over time, see the\n    [Discovery Guide](./docs/DISCOVERY_GUIDE.md).\n\n15. **Training Data Fuzzing**: Noise injection during training prevents\n    creatures from memorising exact training examples. Gaussian or uniform\n    perturbations are added to inputs (and optionally outputs for\n    [label smoothing](https://en.wikipedia.org/wiki/Label_smoothing)) each\n    iteration, encouraging robust generalisation.\n\n16. **K-Fold Cross-Validation**: Built-in\n    [k-fold cross-validation](https://en.wikipedia.org/wiki/Cross-validation_(statistics))\n    evaluates creatures on held-out data folds during evolution, reducing\n    overfitting to a single train/test split.\n\n17. **Hyperparameter Self-Adaptation**: Each creature carries its own learning\n    rate, mutation rates, and regularisation strength. These evolve alongside\n    topology and weights — creatures with better-suited hyperparameters achieve\n    higher fitness and propagate their settings, inspired by\n    [self-adaptive evolution strategies](https://en.wikipedia.org/wiki/Evolution_strategy).\n\n18. **Transfer Learning**: Export trained creatures as checkpoints with\n    metadata, import them into new tasks with UUID mapping for different\n    input/output configurations, and seed populations with pre-trained creatures\n    for [transfer learning](https://en.wikipedia.org/wiki/Transfer_learning)\n    across related problems.\n\n19. **ONNX Export**: Export trained creatures to the [ONNX](https://onnx.ai/)\n    (Open Neural Network Exchange) format for deployment in standard ML\n    inference pipelines, bridging the gap between neuroevolution and production\n    deployment.\n\n20. **Markov Chain Monte Carlo (MCMC) Mutation Acceptance**: Uses the\n    [Metropolis-Hastings](https://en.wikipedia.org/wiki/Metropolis%E2%80%93Hastings_algorithm)\n    criterion for mutation acceptance. Instead of unconditionally accepting all\n    mutations, worse-fitness moves are accepted with a probability that\n    decreases as temperature cools — enabling the population to escape local\n    optima early and converge later. Includes adaptive temperature tuning toward\n    the theoretically optimal acceptance rate (~23.4%, Roberts et al. 1997).\n    Opt-in via `mcmc: { enabled: true }` in the configuration.\n\n21. **Advanced Breeding Strategies**: Multiple breeding strategies for\n    genetically incompatible creatures, including input-weight cosine similarity\n    for neuron alignment, subgraph transplantation for horizontal gene transfer,\n    and diversity-driven breeding for cross-population pairing. These strategies\n    preserve genetic diversity while enabling meaningful crossover between\n    structurally different creatures, inspired by\n    [horizontal gene transfer](https://en.wikipedia.org/wiki/Horizontal_gene_transfer)\n    in biology.\n\n22. **Synthetic Synapse Training**: Temporarily densifies inter-layer\n    connectivity during backpropagation by adding zero-weight synapses between\n    adjacent topological layers. After training, near-zero synapses are pruned\n    and only the useful connections are retained — addressing NEAT's inherent\n    weakness of sparse connectivity compared to conventional\n    [dense layers](https://en.wikipedia.org/wiki/Dense_layer). Opt-in via\n    `syntheticSynapses: true` in the training configuration.\n\n23. **Novelty (Behavioural-Diversity) Selection**: On deceptive problems,\n    pure-fitness selection drives the population into local optima where the\n    pace of evolution collapses.\n    [Novelty search (Lehman \u0026 Stanley, 2011)](https://doi.org/10.1162/EVCO_a_00025)\n    rewards behavioural diversity instead. Each creature is given a numeric\n    behaviour descriptor (problem-supplied via a tag — for example the output\n    vector on a probe set); its novelty score is the mean distance to its `k`\n    nearest neighbours across the population and a bounded archive; and ranking\n    uses the blend `score' = (1 - weight)·fitness + weight·novelty`. **OFF by\n    default** — opt-in via `novelty: { enabled: true }` and set a `behaviour`\n    tag on each creature. See [Novelty Search](./docs/NOVELTY_SEARCH.md).\n\n24. **Random Immigrants (Fresh Genomes on a Plateau)**: When the population\n    stalls, boosting the mutation rate only perturbs the _existing_ genomes — it\n    adds no new genetic material. Driven by the existing plateau signal,\n    random-immigrant injection replaces the weakest _non-elite_ creatures with\n    freshly seeded genomes once the population has been on a plateau for\n    `triggerWindow` generations, then waits `cooldown` generations before\n    injecting again. Elites are always preserved. **OFF by default** — opt-in\n    via `randomImmigrants: { enabled: true }`. Tune `injectionFraction` (the\n    fraction of non-elites replaced), `triggerWindow`, and `cooldown`.\n\n    ```mermaid\n    flowchart LR\n        A[Generation] --\u003e B{On plateau for\u003cbr/\u003etriggerWindow gens?}\n        B -- no --\u003e E[Breed + mutate as usual]\n        B -- yes --\u003e C{Cooldown\u003cbr/\u003eelapsed?}\n        C -- no --\u003e E\n        C -- yes --\u003e D[Replace weakest non-elites\u003cbr/\u003ewith fresh genomes\u003cbr/\u003eelites preserved]\n        D --\u003e E\n    ```\n\n## 🚀 Quick Start\n\nInstall nothing — NEAT-AI is published to the\n[JavaScript Registry (JSR)](https://jsr.io/@stsoftware/neat-ai) and the\nWebAssembly (WASM) backend initialises itself on first use. Create a\n**Creature** (a NEAT-AI genome — one neural network), run a forward pass, then\nround-trip it through JSON:\n\n```typescript\nimport { Creature } from \"@stsoftware/neat-ai\";\n\n// A Creature with 2 inputs, 1 output, and one hidden layer of 3 neurons.\nconst creature = new Creature(2, 1, { layers: [{ count: 3 }] });\n\n// activate() runs a single forward pass through the WASM backend.\nconst output = creature.activate(new Float32Array([0.5, 0.3]));\nconsole.log(output); // Float32Array(1) [ … ]\n\n// Serialise and restore — UUID-stable, safe to share between machines.\nconst json = creature.exportJSON();\nconst restored = Creature.fromJSON(json);\n```\n\nRun it with `deno run -A example.ts` (the `-A` permission lets Deno fetch the\nWASM bytes from JSR on first run).\n\nOnce you have training data, `evolveDataSet()` evolves a population toward it.\nThe optional error-guided **Discovery** step then proposes structural\nimprovements — one iteration looks like:\n\n```typescript\n// Requires the optional NEAT-AI-Discovery Rust extension (see note below).\nconst result = await creature.discoveryDir(dataDir, {\n  discoveryRecordTimeOutMinutes: 1,\n  discoveryAnalysisTimeoutMinutes: 10,\n});\n\nif (result.improvement) {\n  console.log(`Found ${result.improvement.changeType} improvement!`);\n  // Use the improved creature for the next iteration.\n}\n```\n\n`discoveryDir()` needs the optional\n[NEAT-AI-Discovery](https://github.com/stSoftwareAU/NEAT-AI-Discovery) Rust\nextension. Without it the discovery phase is skipped — `activate()`, training,\nand evolution still run end-to-end in WASM.\n\n\u003e [!TIP]\n\u003e For distributed, multi-machine workflows that accumulate small improvements\n\u003e over time, see the [Discovery Guide](./docs/DISCOVERY_GUIDE.md) for a complete\n\u003e walkthrough.\n\n## 💻 Usage\n\nThis project is designed to be used in a DenoJS environment. Please refer to the\n[Deno runtime manual](https://docs.deno.com/runtime/manual/) for setup and usage\ninstructions.\n\n## 📚 Documentation\n\nFor detailed documentation, see the [docs/](./docs/) directory:\n\n### 🚀 Getting Started\n\n- **[CONTRIBUTING.md](./CONTRIBUTING.md)**: First-time contributor guide with\n  development setup and workflow\n- **[Configuration Guide](./docs/CONFIGURATION_GUIDE.md)**: Complete reference\n  of all configuration options and presets\n\n### 🧠 Core Concepts\n\n- **[COMPARISON.md](./COMPARISON.md)**: How NEAT-AI compares to standard NEAT,\n  traditional neural networks, CNNs, RNNs, and modern LLMs\n- **[Discovery Guide](./docs/DISCOVERY_GUIDE.md)**: Complete guide to\n  distributed, multi-machine discovery workflows, including failure/success\n  caches, replay, candidate category limits, focus overrides, and the\n  cost-of-growth gate\n- **[Intelligent Design](./docs/INTELLIGENT_DESIGN.md)**: Systematic squash\n  function optimisation for hidden neurons\n\n### 🔧 API \u0026 Reference\n\n- **[API Reference](./docs/API_REFERENCE.md)**: Short topic index linking to\n  per-surface detail docs under [`docs/api/`](./docs/api/)\n- **[DiscoveryDir API](./docs/DISCOVERY_DIR.md)**: Technical API reference for\n  `Creature.discoveryDir()` and data preparation\n- **[Activation Functions Guide](./docs/ACTIVATION_FUNCTIONS.md)**: Complete\n  guide to all 30+ activation functions with selection guidance\n\n### 🔬 Advanced Topics\n\n- **[Predictive Coding](./docs/PREDICTIVE_CODING.md)**: Neuroscience-inspired\n  predictive coding training mode\n- **[Predictive Coding Benchmarks](./docs/PREDICTIVE_CODING_BENCHMARKS.md)**:\n  Benchmark results for predictive coding\n- **[Elastic Backpropagation](./docs/BACKPROP_ELASTICITY.md)**: Why we prefer\n  minimum-change weight updates and avoid pushing saturated squashes further\n  into saturation\n- **[GPU Acceleration](./docs/GPU_ACCELERATION.md)**: GPU acceleration for\n  discovery on macOS using Metal\n- **[WASM Resident Topology](./docs/WASM_RESIDENT_TOPOLOGY.md)**: Feasibility\n  analysis for WASM-resident creature topology\n\n### ⚡ Operations\n\n- **[Performance Tuning](./docs/PERFORMANCE_TUNING.md)**: Tuning WASM caches,\n  thread pools, memory management, and scaling for large-scale training\n- **[Performance Research](./docs/PERFORMANCE_RESEARCH.md)**: WASM migration\n  research and benchmark learnings\n- **[Troubleshooting](./docs/TROUBLESHOOTING.md)**: Common issues and solutions\n  for WASM, discovery, memory, CI, and configuration\n\n### 🦀 Core Dependency\n\n- **[Core Dependency Policy](./docs/CORE_DEPENDENCY_POLICY.md)**: How NEAT-AI\n  pins and consumes [NEAT-AI-core](https://github.com/stSoftwareAU/NEAT-AI-core)\n  via `deno.json` + `build.sh` (semver, rev pinning, approval tiers)\n- **[External NEAT-AI-core](./docs/EXTERNAL_NEAT_AI_CORE.md)**: Day-to-day\n  workflow for bumping the pinned revision and refreshing `wasm_activation/pkg`\n- **[Parity Gate](./docs/PARITY_GATE.md)**: Pre-removal verification checklist\n  for repin + artefact parity validation\n- **[CI for External Core](./docs/CI_EXTERNAL_NEAT_AI_CORE.md)**: CI plumbing\n  for `build.sh`-driven artifact sync\n\n### 🤝 For Contributors\n\n- **[AGENTS.md](./AGENTS.md)**: Coding conventions, terminology, and development\n  guidelines\n- **[Discovery Architecture](./docs/DISCOVERY_ARCHITECTURE.md)**: Internal\n  discovery pipeline architecture\n\n## 🌐 Related Repositories\n\nNEAT-AI is the primary Deno/TypeScript library at the centre of a small family\nof repositories. Each repo has a focused role; together they form the full\ntraining, discovery, scoring, visualisation, and example surface.\n\n| Repository                                                                 | Role                                                                                                                                     |\n| -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| **[NEAT-AI](https://github.com/stSoftwareAU/NEAT-AI)** (this repo)         | Deno/TypeScript NEAT library — the main library that orchestrates evolution, training, discovery, breeding, and serialisation.           |\n| **[NEAT-AI-core](https://github.com/stSoftwareAU/NEAT-AI-core)**           | Shared Rust computation crate (`neat-core`) consumed by NEAT-AI as vendored WASM in `wasm_activation/pkg`, pinned by SHA in `deno.json`. |\n| **[NEAT-AI-Discovery](https://github.com/stSoftwareAU/NEAT-AI-Discovery)** | Rust FFI extension providing GPU-accelerated structural analysis; called from NEAT-AI via Deno FFI by `discoveryDir()`.                  |\n| **[NEAT-AI-Snapshot](https://github.com/stSoftwareAU/NEAT-AI-Snapshot)**   | Snapshot artefacts produced by NEAT-AI training/discovery runs and shared between machines for distributed evolution.                    |\n| **[NEAT-AI-scorer](https://github.com/stSoftwareAU/NEAT-AI-scorer)**       | Rust scoring application; depends on NEAT-AI-core via a path dependency and must pin the same core revision as NEAT-AI.                  |\n| **[NEAT-AI-Explore](https://github.com/stSoftwareAU/NEAT-AI-Explore)**     | TypeScript visualisation tool that consumes NEAT-AI-Snapshot data to inspect creature topology and behaviour.                            |\n| **[NEAT-AI-Examples](https://github.com/stSoftwareAU/NEAT-AI-Examples)**   | TypeScript example projects showing how to use NEAT-AI for real tasks.                                                                   |\n\n### Dependency graph\n\n```mermaid\nflowchart LR\n  core[\"NEAT-AI-core\u003cbr/\u003e(Rust crate)\"]\n  discovery[\"NEAT-AI-Discovery\u003cbr/\u003e(Rust FFI)\"]\n  neat[\"NEAT-AI\u003cbr/\u003e(Deno/TypeScript)\"]\n  snapshot[\"NEAT-AI-Snapshot\u003cbr/\u003e(snapshot data)\"]\n  scorer[\"NEAT-AI-scorer\u003cbr/\u003e(Rust app)\"]\n  explore[\"NEAT-AI-Explore\u003cbr/\u003e(TypeScript UI)\"]\n  examples[\"NEAT-AI-Examples\u003cbr/\u003e(TypeScript)\"]\n\n  core -- \"vendored WASM (pinned rev)\" --\u003e neat\n  core -- \"path dependency\" --\u003e scorer\n  discovery -- \"Deno FFI\" --\u003e neat\n  neat -- \"produces snapshots\" --\u003e snapshot\n  snapshot -- \"consumed by\" --\u003e explore\n  neat -- \"used by\" --\u003e examples\n```\n\n\u003e [!NOTE]\n\u003e NEAT-AI and NEAT-AI-scorer must pin the **same** NEAT-AI-core revision. See\n\u003e [docs/CORE_DEPENDENCY_POLICY.md](./docs/CORE_DEPENDENCY_POLICY.md) for the\n\u003e rev-pinning and semver policy.\n\n## 🤝 Contributions\n\nContributions are welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) for\ndevelopment setup, workflow, and guidelines. Please submit a pull request or\nopen an issue to discuss potential changes/additions.\n\n## ⚖️ Licence\n\nThis project is licensed under the terms of the Apache Licence 2.0. For the full\nlicence text, please see [LICENSE](./LICENSE)\n\n[![Built with the Deno Standard Library](https://raw.githubusercontent.com/denoland/deno_std/main/badge.svg)](https://deno.land/std)\n\n[![codecov](https://codecov.io/github/stSoftwareAU/NEAT-AI/graph/badge.svg?token=DZ3R9KJGKB)](https://codecov.io/github/stSoftwareAU/NEAT-AI)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstsoftwareau%2Fneat-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstsoftwareau%2Fneat-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstsoftwareau%2Fneat-ai/lists"}