Skip to main content

RENKIN — Retrosynthesis Engine for Knowledge-Informed Navigation

Computer-Aided Synthesis Planning (CASP) · Pure Rust · WebAssembly · Python
Named after 錬金 (れんきん, renkin) — Japanese for alchemy: just as alchemists transformed base metals into gold, RENKIN transforms target molecules back into cheap starting materials.

CI Docs

Crates.io docs.rs PyPI Python npm License: MIT

日本語版 README · 中文版 README · Documentation · Live Demo →


What is RENKIN?

RENKIN is an open-source retrosynthesis engine for computer-aided synthesis planning (CASP) that automatically discovers optimal chemical reaction routes from a target molecule back to cheap, commercially available starting materials.

Built entirely in Rust with the chematic cheminformatics crate — zero C/C++ dependencies, #![forbid(unsafe_code)] throughout. One codebase compiles to a native CLI, a Rust library, Python wheels (PyO3), and a WebAssembly module that runs entirely client-side in the browser.


Installation

pip install renkin          # Python
cargo add renkin            # Rust
npm install renkin          # JavaScript / Node.js

Live Playground

→ Try it now — runs entirely in WebAssembly: no installation, no server, no network calls.


Quick Start

import json
import renkin

result = json.loads(
    renkin.find_routes(
        target="CC(=O)Oc1ccccc1C(=O)O",  # Aspirin
        depth=5,
        max_routes=3,
    )
)

for route in result["routes"]:
    for step in route["steps"]:
        print(f"  {step['target']}{' + '.join(step['precursors'])}  [{step['rule']}]")
import init, { find_routes } from './pkg/renkin.js';
await init();
const result = JSON.parse(find_routes("CC(=O)Oc1ccccc1C(=O)O", 5, 3, 0));
./target/release/renkin --target "CC(=O)Oc1ccccc1C(=O)O" --depth 5 \
    --templates data/templates_extracted_5000.smi --format tree
Target: CC(=O)Oc1ccccc1C(=O)O
Routes found: 3

Route 1  [score=1.02, depth=1]
OC(=O)c1ccccc1OC(=O)C
└── [extracted_169]
    ├── OC(=O)C  ✓ BB
    └── [OH]c1ccccc1C(=O)O  ✓ BB

Route 2  [score=1.02, depth=1]
OC(=O)c1ccccc1OC(=O)C
└── [extracted_145]
    ├── CC(=O)Cl  ✓ BB
    └── [OH]c1ccccc1C(=O)O  ✓ BB

Route 3  [score=1.03, depth=1]
OC(=O)c1ccccc1OC(=O)C
└── [extracted_238]
    ├── c1cccc(c1O)C(O)=O  ✓ BB
    └── C([OH])(=O)C  ✓ BB

Use --format mermaid for GitHub/Notion-compatible flowcharts.

Open In Colab


Current Limitations

⚠️ Benchmark numbers are under active re-measurement after a validator-accuracy fix — historical 78.0%/95.9%/81.8%(ChEMBL) figures elsewhere in this repo predate that fix and are invalidated. RENKIN does not predict yields, calibrated experimental success probabilities, or side reactions, and does not search the literature automatically (success_probability is a template-frequency search-ranking score, not a calibrated prediction — see Benchmark for the current corrected numbers, full methodology, and known limitations).


Why RENKIN?

RENKIN is designed as a Rust-native synthesis planning stack:

Fast A* / AND-OR tree search with beam search and template frequency weighting
Portable Native CLI · Python wheels · npm/WASM · browser playground — one codebase
Explainable Per-step confidence, atom_economy, route_cost, and procedure_hint
Verifiable renkin-forward validates each retrosynthetic step by forward-applying templates
Benchmarkable USPTO-50k, PaRoutes-style evaluation, route diversity, and atom balance checks
Agent-ready MCP server exposes routes and validation to Claude Desktop and AI agents

Constraint-based Search

Restrict routes by the element composition of their building blocks.

Default search — all 5 routes for biphenyl:

renkin --target "c1ccc(-c2ccccc2)cc1" --templates data/templates_extracted_5000.smi --format tree
Routes found: 5
Route 1  [score=1.00, depth=1]  c1ccccc1Br + c1c(B(O)O)cccc1
Route 2  [score=1.03, depth=1]  c1ccccc1Br + c1c(B(O)O)cccc1
Route 3  [score=1.06, depth=1]  c1cc(Cl)ccc1 + c1c(B(O)O)cccc1
Route 4  [score=1.08, depth=1]  c1(I)ccccc1  + c1c(B(O)O)cccc1
Route 5  [score=1.08, depth=1]  c1ccccc1Br  + c1(B2OC(C(C)(C)O2)(C)C)ccccc1

Constrained search — boronic-acid coupling, no Br or I starting materials:

renkin --target "c1ccc(-c2ccccc2)cc1" --templates data/templates_extracted_5000.smi \
    --require-elements "B" --avoid-elements "Br,I" --format tree
Routes found: 1

Route 1  [score=1.06, depth=1]
c1ccccc1-c2ccccc2
└── [extracted_398]
    ├── c1cc(Cl)ccc1  ✓ BB
    └── c1c(B(O)O)cccc1  ✓ BB

Constraints compose freely and are enforced in two layers:

  • --avoid-elements prunes expansions during search when a BB precursor contains a forbidden element (no dead-end nodes added to the heap).
  • A final route-level post-filter is still applied for correctness.
  • --require-elements is a route-level post-filter only.

Add --verbose to print search statistics (nodes expanded, elapsed time) to stderr. Performance counters are available in native builds only; disabled in WASM.


Template Evidence Metadata

Extracted templates only have a positional display name (extracted_{i}) that changes whenever the source .smi file is reordered or re-extracted, so external knowledge (a DOI, a reported yield, a known side reaction) can't be durably attached to one. Every template — hand-crafted and extracted — now has a stable template_id instead:

  • Hand-crafted rules: rule:<rule_name> (e.g. rule:suzuki_retro).
  • Extracted templates: smirks-sha256:<hex> — the SHA-256 hex digest of the trimmed SMIRKS string. Independent of file position, load order, and count; purely syntactic (no SMIRKS canonicalization — a semantically equivalent SMIRKS written differently gets a different ID).

Run renkin template ids <file.smi> to list every template's template_id, display name, SMIRKS, and weight (TSV by default, --format json for JSON) — use this to look up the IDs you need when authoring a sidecar file.

Attach curated evidence with --template-metadata sidecar.json (also available in Python as find_routes(..., template_metadata_path=...)), keyed by template_id:

{
  "schema_version": 1,
  "templates": {
    "smirks-sha256:ef8778a2888469d619c52cce7e74f6848e101049050dd1b765b78f32e3c94498": {
      "references": [
        { "id": "ref-1", "kind": "doi", "identifier": "10.xxxx/example" }
      ],
      "condition_candidates": [
        {
          "catalysts": ["Pd(PPh3)4"],
          "bases": ["K2CO3"],
          "solvents": ["EtOH", "water"],
          "temperature_c": { "min": 75.0, "max": 85.0 },
          "source": "literature",
          "scope": "template",
          "reference_ids": ["ref-1"]
        }
      ],
      "reported_yields": [
        {
          "percentage": { "min": 72.0, "max": 81.0 },
          "basis": "isolated",
          "source": "literature",
          "scope": "template",
          "reference_ids": ["ref-1"]
        }
      ],
      "warnings": [
        {
          "code": "possible_protodeboronation",
          "severity": "medium",
          "message": "Protodeboronation has been reported under prolonged aqueous heating.",
          "source": "literature",
          "scope": "template",
          "reference_ids": ["ref-1"]
        }
      ]
    }
  }
}

A matching step gets an evidence field with condition_candidates, reported_yields, references, and warnings; steps whose template has no sidecar entry get no evidence key at all. The sidecar is loaded and validated (schema version, duplicate/dangling reference IDs, yield range, range min <= max, non-empty DOI/patent identifiers) before search starts — malformed metadata is a hard error, and a template_id in the sidecar that matches no loaded rule prints a warning rather than failing silently.

What this is not:

  • reported_yields is a curated record of what was reported externally — not a RENKIN prediction. step_confidence/success_probability are unaffected and keep meaning template-frequency-derived search-ranking scores, not experimental success rates.
  • warnings reflects only what's explicitly present in the sidecar you supply — not automatic side-reaction detection.
  • Templates without a matching sidecar entry get no fabricated evidence. Nothing is invented for missing data.

Yield/success prediction and automatic literature search are explicitly out of scope for this phase — tracked as future work in #41.

Substrate-specific examples (schema_version: 2)

Everything above is template-level: it applies to every step using that template, regardless of the actual molecule. schema_version: 2 adds examples — a per-template array where each entry is one curated record of this exact reaction, keyed by target_smiles/precursor_smiles:

{
  "schema_version": 2,
  "templates": {
    "smirks-sha256:...": {
      "references": [{ "id": "ref-1", "kind": "doi", "identifier": "10.xxxx/example" }],
      "examples": [{
        "id": "ex-1",
        "target_smiles": "c1ccc(-c2ccccc2)cc1",
        "precursor_smiles": ["Brc1ccccc1", "c1ccccc1"],
        "conditions": { "catalysts": ["Pd(PPh3)4"], "solvents": ["EtOH"], "source": "literature", "scope": "substrate_specific", "reference_ids": ["ref-1"] },
        "reported_yield": { "percentage": 78.0, "basis": "isolated", "source": "literature", "scope": "substrate_specific", "reference_ids": ["ref-1"] },
        "reference_ids": ["ref-1"]
      }]
    }
  }
}

examples requires schema_version: 2 (a hard error under 1); under schema_version: 2, reported yields must live under examples[].reported_yield too — a non-empty template-level reported_yields is a hard error there (it stays allowed under schema_version: 1), so a substrate-specific number can't leak onto every step using that template. Every condition/yield/warning nested inside an example must be scoped substrate_specific.

A route step's evidence.examples are resolved, not just copied from the sidecar: matched against that step by canonical target SMILES plus the canonical, order-independent precursor set (reordering precursor_smiles in the sidecar changes nothing), with every exact-substrate match kept and same-template-different-substrate precedents capped at 3. Each resolved entry carries a match_kind (exact_substrate/template_only) in the JSON itself, plus a template_examples_total count — so JSON/Python consumers, not just --format explain, can tell "evidence for this exact reaction" apart from "literature precedent for a different substrate." --format explain shows exact-substrate matches first, each labeled either Exact substrate example: or "different substrate; not a prediction", with conditions/ reported_yield/warnings each showing their own cited references directly underneath (deduplicated when the same reference backs more than one part of an example). See Reaction Evidence guide for full matching/validation semantics.


Key Features

Feature Detail
Pure Safe Rust #![forbid(unsafe_code)] on all crates — compiler-enforced, zero C/C++ dependencies
A* / AND-OR Tree Search Retro*-equivalent algorithm with pluggable heuristics (MoleculeValueEstimator, ReactionPrior)
Up to 50k reaction templates Auto-extracted from USPTO-50k/MIT via rdchiral; frequency-weighted priority; --templates for custom sets
Route scoring confidence, step_confidence, success_probability (Retro-prob style), convergency, atom_economy per step — see caveat below the table
Step metadata provenance Each step reports metadata_source/metadata_scope (e.g. handcrafted_default/reaction_family) so it's machine-readable whether conditions/reaction_family came from a rule-author default vs. something more grounded; absent for extracted templates, since nothing is fabricated for them.
Stable template IDs + evidence sidecar Every template gets a stable template_idrule:<name> for hand-crafted rules, smirks-sha256:<hex> for extracted templates (independent of file order/position/count). Attach curated DOIs/patents, reported conditions, reported yields, and known side-reaction warnings via a --template-metadata sidecar.json file keyed by template_id; matching steps get an evidence field, everything else stays untouched — see Template evidence metadata below. schema_version: 2 sidecars can additionally attach examples — curated records tied to one exact target/precursor set, matched by canonical SMILES and surfaced first in --format explain. Run renkin template ids <file.smi> to list stable IDs for authoring a sidecar. Automatic yield/success prediction and literature search remain out of scope (#41).
Route cost scoring route_cost = Σ(BB cost) + steps×0.5; actual prices via --bb-prices CSV or --stock stock.csv
Pareto multi-objective search --format pareto returns a Pareto front across route_cost, success_probability, steps, etc.; objectives configurable via --objectives cost:min,success_probability:max,steps:min
Constraint DSL --constraints constraints.json — JSON-driven synthesis planning: element filters, step limits, confidence thresholds, preferred reaction families; enables LLM → RENKIN pipeline
Output formats --format json · tree · mermaid · explain (human-readable per-route analysis) · compare (side-by-side table) · compare-json · pareto
Failure diagnostics Zero-route JSON output includes diagnostics block with likely_causes and suggestions
Forward validation renkin-forward validate verifies each step by applying templates forward; accepts --route-json or stdin
Plausibility report renkin-bench --plausibility — forward-validates best routes and reports composite plausibility score
PaRoutes benchmark renkin-bench --input-format paroutes for multi-step ground-truth evaluation with depth_delta and route_diversity
Atom balance check renkin-bench flags steps where target_MW > Σ precursor_MW (CompleteRXN reference)
Stock CSV management renkin stock stats|validate|coverage — inspect and validate stock CSV files with SMILES, name, vendor, price, hazard fields
Template quality tools renkin template stats|validate|dedup|explain|coverage|ids — inspect SMIRKS template sets: frequency distribution, validity, duplicates, per-template lookup, coverage rate, stable template IDs
MCP server renkin-mcp exposes 6 tools: find_routes, validate_route, explain_route, find_pareto_routes, plan_with_constraints, estimate_diversity
renkin-doctor Environment diagnostic binary — checks templates, building blocks, Python import, tool versions, and data integrity
renkin-kg Reaction knowledge graph builder — constructs bipartite mol↔reaction graphs from routes; exports to GraphML or Cypher
Beam search --beam-width N for memory-bounded exploration; SmallVec<[FEntry; 6]> stack-allocated frontier
Parallel rule application rayon on non-WASM; sequential fallback on wasm32
tract-onnx NN scorer Pure Rust ONNX inference (no C++ dep) — optional --scorer flag for Phase B template relevance scoring
building_blocks in JSON Each route includes the leaf starting-material SMILES — no manual step parsing needed
Tetrahedral stereo @/@@ Full stereochemistry support via chematic 0.4.16
Python pip install renkin — pre-built wheels for Linux/macOS/Windows
WASM ~500 KB bundle — runs in the browser at near-native speed
402 building blocks Aryl halides, boronic acids, heterocycles, amines, acids, amino acids (data/building_blocks.smi, unique compounds actually loaded — see Benchmark section)

step_confidence/success_probability are not yields or measured success rates. They're template-frequency-derived search-ranking scores (rule_weight / max_rule_weight, multiplied across a route's steps) used to order candidate disconnections during search — not a calibrated probability of experimental success, and not an expected isolated yield. Route-level experimental yield/success-rate reporting is not implemented.


Pipeline Examples

# Route cost scoring with commercial prices
renkin -t "Cc1ccc(-c2ccccc2)cc1" --bb-prices data/prices.csv --format json

# Forward validation — pipe find_routes output directly
renkin -t "CC(=O)Oc1ccccc1C(=O)O" --format json | renkin-forward validate

# Faster template retrieval with bond-center index (~24% speedup)
renkin -t "c1ccc(NC(=O)c2ccccc2)cc1" --templates data/templates_extracted_5000.smi --bond-index

Benchmark

USPTO-50k test set (4,907 molecules, full evaluation):

Evaluation definition: A molecule is solved if find_routes returns at least one route whose leaf precursors are all in the building block set, within depth=5 and beam=100. Ground-truth reactants from USPTO-50k are not checked — any commercially accessible route counts.

Corrected baseline (commit e20dc8c, 2026-07-22)

Public label Internal metric Value
Search-to-stock rate raw_solved_rate 20.09% (986/4,907)
Atom-balance-filtered rate atom_balanced_solved_rate 15.41% (756/4,907) — subset of search-to-stock
Current-validator-confirmed rate provenance_validated_solved_rate 0.88% (43/4,907) — subset of atom-balance-filtered

402 building blocks (unique compounds actually loaded from data/building_blocks.smi — see below), 5,000 extracted templates, 28 handcrafted rules, depth=5, beam=100. These three rates are a nested series over the same 4,907 targets, not independent numbers, and none is an experimentally-verified synthesis success rate or a human-chemist-reviewed route-accuracy figure. provenance_validated_solved_rate is not a measured chemical-accuracy rate and not a proven lower bound on correctness — it only counts routes the current validator can positively confirm, and an unknown fraction of "invalid" verdicts may be validator false negatives rather than real chemistry or route errors (the split is unmeasured). Full methodology, per-rule breakdown, and reproduction command: tasks/phase31_final_remeasurement_run.md · Full benchmark details →

Historical progression (pre-fix, invalidated — see notice above)

⚠️ The figures in this subsection (78.0% single-pass, 95.9% cascade, 81.8% ChEMBL OOD) predate the 31.11/31.12 fixes, are invalidated, and have not been re-measured. Kept for continuity only — do not cite as current performance.

Evaluation note: All numbers use the standard USPTO-50k train/test split (same corpus). Templates are extracted from the training set and evaluated on the test set. Numbers reflect performance within the USPTO-50k domain; out-of-distribution generalization was separately evaluated via ChEMBL approved drugs (81.8%, 409/500, also not re-measured).

Config Solved Rate BBs Templates depth beam ms/mol
v0.1.0 initial 366/4907 7.5% 463 31 3 50
+ auto templates (top-300) 1363/4907 27.8% 463 222 3 50
+ depth=5, top-500 templates 2315/4907 47.2% 463 314 5 50
+ beam=100 2688/4907 54.8%* 463 314 5 100
+ Phase A (template freq. weighting) 3540/4907 72.1%† 463 314 5 100
+ 5,000 templates, 480 BBs 3826/4907 78.0% 480 5,000 5 100 2,775
Phase A unlimited (beam=0) 3832/4907 78.1% 480 5,000 5 0
Phase B (NN scorer, tract-onnx) 3826/4907 78.0% 480 5,000 5 100 3,394
+ diaryl sulfone rule, 509 BBs 3826/4907 78.0% 509 5,000 5 100 ≈2,800
Cascade (stage2: depth=7, beam=300 on unsolved) 4705/4907 95.9% 509 5,000 7 300

* 29/50 chunks, previous binary
† 50/50 chunks — 72.1% (3,540/4,907) confirmed
BB counts in this historical table (463/480/509) are as originally documented at each point in time — legacy documentation values, not re-verified against ChemEnv::bb_count(). The corrected-baseline section above uses the actually-loaded count (402) for the current data/building_blocks.smi.

Note: LocalRetro (53.4%) and GLG (58.0%) report single-step top-1 prediction accuracy — a different metric, not directly comparable.

Benchmark scope note: USPTO-50k is used here as a standardized sanity benchmark, not as proof of broad real-world synthesis performance. The corpus covers a narrow slice of reaction space (primarily C–C and C–N bond formations common in pharmaceutical synthesis), and reaction types with sparse USPTO representation are systematically underserved. Out-of-distribution performance on ChEMBL approved drugs (81.8%, 409/500, pre-fix, not re-measured) suggested the rule set generalizes beyond the test corpus, but neither historical number should be interpreted as a guarantee of route quality on arbitrary targets.

PaRoutes compatibility

RENKIN is compatible with the PaRoutes multi-step benchmark. Download their stock compounds and target molecules, then pass them directly:

renkin-bench \
  --input paroutes_n1_targets.smi \
  --building-blocks paroutes_stock.smi \
  --templates data/templates_extracted_5000.smi \
  --depth 5 --beam-width 100

The JSON output includes avg_nodes_expanded, avg_confidence, avg_convergency, and avg_success_prob (Retro-prob style) alongside the standard solved/success_rate metrics.


Competitive Landscape

⚠️ RENKIN's row below uses the corrected raw_solved_rate (20.09%, see notice near the top of this README) — the 95.9% cascade figure some earlier versions of this table cited is invalidated and not re-measured; it is not included here.

Tool Language License WASM Zero-dep Algorithm Template source Stock
ASKCOS Python CC BY-NC No No (Docker, 64 GB) MCTS + A* USPTO (ML) ZINC
AiZynthFinder Python MIT No No (conda + model) MCTS USPTO (ML, ~50k) eMolecules (~6M)
SYNTHIA Closed Proprietary No No SMARTS + AND/OR Manual curated Sigma-Aldrich
IBM RXN Closed Cloud SaaS No No Transformer USPTO
Retro* Python MIT No No (unmaintained) A* + AND/OR USPTO (ML) eMolecules
★ RENKIN Rust MIT Yes Yes A* + AND/OR Hand-curated + rdchiral (5k default; 50k via --templates) 402+

raw_solved_rate is the closest available RENKIN metric to the published route-finding success rates of the other planners above, but the figures are not directly comparable — stock size, template library, target set, search budget, and route-quality checks all differ across systems, and this table does not establish RENKIN as better or worse than the alternatives.

RENKIN's goal: match state-of-the-art accuracy using only curated rules and auto-extracted SMIRKS templates — no GPU, no training data, no black boxes. Under RENKIN's benchmark setting (corrected baseline, commit e20dc8c, 2026-07-22), it reaches 20.09% raw_solved_rate (986/4,907) single-pass — see the Benchmark section above for the full nested-metric series and why the stricter provenance_validated_solved_rate (0.88%) is not RENKIN's measured or bounded correctness rate. RENKIN runs anywhere: browser, CLI, Python — single cargo build.

⚠️ The table above lists tools under different evaluation conditions. No matched-condition experiment against other tools has been performed.


MCP Server

renkin-mcp exposes retrosynthesis as an MCP tool so AI agents (Claude, etc.) can call it directly.

Setup — add to claude_desktop_config.json:

{
  "mcpServers": {
    "renkin": { "command": "/path/to/renkin-mcp" }
  }
}

Tools (6):

Tool Description
find_routes Retrosynthesis: SMILES → routes with scoring
validate_route Forward-validate a retrosynthetic route
explain_route Human-readable strengths/weaknesses per route
find_pareto_routes Pareto-front multi-objective route search
plan_with_constraints Constraint-DSL planning (element filters, step limits, confidence thresholds)
estimate_diversity Route diversity and coverage metrics

The server auto-detects data/building_blocks.smi and data/templates_extracted_5000.smi in the working directory. Falls back to the embedded DEFAULT_BUILDING_BLOCKS / default_rules() defaults if not found (152 unique building blocks per ChemEnv::bb_count(), 28 handcrafted rules — verified 2026-07-22; a "509-BB / 20-rule" figure was previously documented here without verification).

cargo build --release
# binary: target/release/renkin-mcp

Architecture

Workspace scope

┌──────────────────────────────────────────────────────────────────┐
│ renkin workspace (this repository)                               │
│                                                                  │
│  renkin  (retrosynthesis)         renkin-forward                  │
│  ──────────────────────           ─────────────────────────────  │
│  target → precursors              reactants → products           │
│  A* / AND-OR search               template-based forward         │
│  route scoring & constraints      (validates retro routes)       │
│        │                                    │                    │
│        └──────────────────┬─────────────────┘                    │
│                           ▼                                      │
│               chematic  (molecular representation,               │
│               SMILES, substructure matching, reaction SMARTS)    │
└──────────────────────────────────────────────────────────────────┘

Internal data flow (renkin crate)

Target SMILES
     │
     ▼
┌─────────────────────────┐
│     chem_env.rs         │  ← chematic wrapper
│  - SMILES parse         │     canonical-SMILES FxHashSet BB lookup (O(1))
│  - 20 built-in + up to 50k via --templates  │     fragment sanitization + ring-leak filter
│  - Building block check │     apply_retro memoization cache
└────────────┬────────────┘
             │  par_iter (rayon / sequential on WASM)
             ▼
┌─────────────────────────┐
│      search.rs          │  ← A* / AND-OR Tree Search
│  - Priority queue       │     SA Score heuristic + memoization
│  - Closed list          │     beam search (SmallVec frontier)
│  - Arc<PathNode> paths  │     O(1) path sharing per child
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐
│      score.rs           │  ← Heuristic / Cost Function
│  - SA Score (chematic)  │     h = Σ(1 + 0.5·(sa−1)/9)
│  - MW step cost         │     g = Σ(1 + total_mw/2000)
└────────────┬────────────┘
             │
             ▼
┌─────────────────────────┐   (optional)
│      scorer.rs          │  ← Phase B: NN Template Scorer
│  - tract-onnx           │     Pure Rust ONNX inference
│  - --scorer flag        │     molecule-specific template ranking
└────────────┬────────────┘
             │
             ▼
  JSON  ←  CLI / Python / WASM

Project Structure

renkin/                          ← Cargo workspace root
├── Cargo.toml
├── src/                         ← renkin crate (retrosynthesis)
│   ├── lib.rs                   # public library
│   ├── main.rs                  # CLI binary (--templates, --template-metadata, --scorer, --constraints, --objectives flags)
│   ├── bin/benchmark.rs         # renkin-bench binary (--plausibility flag)
│   ├── bin/doctor.rs            # renkin-doctor diagnostic binary
│   ├── bin/fp.rs                # renkin-fp ECFP4 fingerprint (nn-scoring feature)
│   ├── bin/mcp.rs               # renkin-mcp MCP server (6 tools)
│   ├── chem_env.rs              # retro rules + BB lookup + template loader
│   ├── score.rs                 # SA Score heuristic + step cost
│   ├── search.rs                # A* / AND-OR tree engine + beam pruning
│   ├── scorer.rs                # Phase B: tract-onnx NN template scorer
│   ├── python.rs                # PyO3 bindings (--features python)
│   └── wasm.rs                  # wasm-bindgen bindings (cfg = wasm32)
├── crates/                      ← sibling crates
│   ├── renkin-forward/          # forward reaction prediction (reactants → products)
│   └── renkin-kg/               # reaction knowledge graph builder (GraphML / Cypher export)
├── data/
│   ├── building_blocks.smi              # 402 curated commercial starting materials (loaded/deduplicated count)
│   ├── templates_extracted_5000.smi     # 5,000 auto-extracted SMIRKS templates
│   ├── benchmark_targets.smi            # internal benchmark set
│   └── bench_chunks/                    # USPTO-50k per-chunk results
├── scripts/
│   ├── extract_templates.py         # rdchiral template extraction pipeline
│   └── run_benchmark_chunks.sh      # resumable chunked benchmark runner
├── docs/                # MkDocs source → kent-tokyo.github.io/renkin/
└── mkdocs.yml

Roadmap

Recently shipped

  • Stable template_id (rule:<name> / smirks-sha256:<hex>) + --template-metadata evidence sidecar + renkin template ids (#41 phase 1)
  • Substrate-specific examples (schema_version: 2) — per-step exact-substrate vs. same-template-different-substrate resolution, surfaced in --format explain and as match_kind in JSON (#41 phase 2)
  • renkin-bench cascade — multi-stage search (fast defaults → hard cases re-run deeper); only unsolved targets propagate to later stages. 78.0% → 95.9% on USPTO-50k
  • renkin-bench --failure-taxonomy — classify unsolved targets by cause (beam limit / depth limit / template gap / stock near-miss)
  • Graph-based ester cleavage — BFS-leakage-free R-C(=O)-O-R' → RCOOH + R'OH
  • --top-templates N — frequency-rank filter: use the top-N most frequent templates for speed / less noise
  • raw / validated / practical solved-rate metrics (--plausibility --practical-max-steps N)
  • Retro cache hit-rate in SearchStats + --verbose

In progress

  • Template retrieval index (element bitmask + bond-center prefilter) for the 50k template set
  • Calibrated route confidence (map success_probability to empirical solve rate)

Next

  • Graph rule expansion — sulfonamide / carbamate / urea cleavage (one PR per family, each with benchmark delta)
  • Stock-aware planning (price / hazard / availability re-ranking)
Earlier milestones
  • Route cost scoring — route_cost field + --bb-prices path.csv / --stock stock.csv
  • Cargo workspace — crates/renkin-forward/ + crates/renkin-kg/
  • renkin-forward predict / validate — forward prediction + route validation (stdin-pipe friendly)
  • renkin-doctor — environment diagnostic binary (templates, BBs, Python, binaries)
  • Failure diagnostics — zero-route output includes likely_causes + suggestions JSON block
  • --format explain|compare|compare-json — human-readable and tabular route output
  • renkin stock stats|validate|coverage — stock CSV management subcommand
  • Pareto multi-objective search — --format pareto, --objectives, find_pareto_routes MCP
  • Constraint DSL — --constraints JSON, plan_with_constraints MCP tool
  • renkin template stats|validate|dedup|explain|coverage — template quality tools
  • renkin-kg — reaction knowledge graph (bipartite mol↔reaction, GraphML/Cypher export)
  • MCP server expanded to 6 tools (explain_route, find_pareto_routes, plan_with_constraints)
  • SMIRKS retro-reaction rules + fragment sanitization
  • A* / AND-OR tree search, closed list, degenerate-route filter
  • SA Score heuristic + beam search
  • Parallel rule application (rayon; sequential fallback on WASM)
  • Python bindings (PyO3 + maturin) · pip install renkin
  • WASM build · npm install renkin
  • Benchmark CLI (renkin-bench) + USPTO-50k evaluation
  • WASM browser playground + i18n (EN/JA/ZH)
  • Graph-based biaryl cleavage · O(1) canonical-SMILES BB index
  • Published to crates.io / PyPI / npm · GitHub Actions CI/CD
  • MkDocs documentation site · GitHub Pages playground
  • Auto template extraction (rdchiral): 27.8%78.0% USPTO-50k
  • Tetrahedral stereo @/@@ + E/Z double-bond stereo
  • Template frequency weighting (Phase A): 72.1% USPTO-50k
  • FxHashMap · SmallVec beam frontier · SA Score memoization · Arc path sharing
  • 5,000 extracted templates + 509 BBs: 78.0% USPTO-50k (3,826/4,907 ✅)
  • NN template scorer via --scorer flag (tract-onnx, Pure Rust ONNX)
  • --format tree|mermaid route visualization
  • Constraint-based search: --avoid-elements, --require-elements
  • --verbose search statistics to stderr
  • MCP server (renkin-mcp) — AI agents call retrosynthesis directly
  • #![forbid(unsafe_code)] — compiler-enforced Pure Safe Rust

Citation

If you use RENKIN in academic work, please cite:

@software{renkin2026,
  author    = {kent-tokyo},
  title     = {{RENKIN}: Retrosynthesis Engine for Knowledge-Informed Navigation},
  year      = {2026},
  url       = {https://github.com/kent-tokyo/renkin/releases/tag/v0.18.0},
  version   = {0.18.0},
  license   = {MIT}
}

Security

Report vulnerabilities via GitHub Private vulnerability reporting. See SECURITY.md.


License

MIT


GitHub Topics: retrosynthesis cheminformatics wasm rust drug-discovery casp synthesis-planning computational-chemistry


If RENKIN saves you time, a GitHub star helps others discover it.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

renkin-0.18.0.tar.gz (347.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

renkin-0.18.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

renkin-0.18.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (982.9 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (976.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp314-cp314-win_amd64.whl (770.8 kB view details)

Uploaded CPython 3.14Windows x86-64

renkin-0.18.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (978.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp314-cp314-macosx_11_0_arm64.whl (896.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

renkin-0.18.0-cp313-cp313-win_amd64.whl (771.0 kB view details)

Uploaded CPython 3.13Windows x86-64

renkin-0.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (976.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp313-cp313-macosx_11_0_arm64.whl (894.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

renkin-0.18.0-cp312-cp312-win_amd64.whl (771.3 kB view details)

Uploaded CPython 3.12Windows x86-64

renkin-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (977.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp312-cp312-macosx_11_0_arm64.whl (894.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

renkin-0.18.0-cp311-cp311-win_amd64.whl (774.2 kB view details)

Uploaded CPython 3.11Windows x86-64

renkin-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (980.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp311-cp311-macosx_11_0_arm64.whl (900.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

renkin-0.18.0-cp310-cp310-win_amd64.whl (774.1 kB view details)

Uploaded CPython 3.10Windows x86-64

renkin-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (980.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

renkin-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (980.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

renkin-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (980.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

File details

Details for the file renkin-0.18.0.tar.gz.

File metadata

  • Download URL: renkin-0.18.0.tar.gz
  • Upload date:
  • Size: 347.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for renkin-0.18.0.tar.gz
Algorithm Hash digest
SHA256 a881774b1335a8ae41317c8a33763d1804af3893b13ab47fa7b0405722765df9
MD5 1da66c18496696fa045d8c9ae728ef03
BLAKE2b-256 42e30e2db7c66e2a87fec71da4aa675ae24ab41dbd3d55865dbebad72d8646eb

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 82b3f473d59ca1ae4c7113d2e4e0c00d989c96cecc1ac16091ebc7f4aa59167a
MD5 c23849093be0d7717873a2a87e500245
BLAKE2b-256 cfa0e06d03bfad56a20bc18ce85bc8f3c8e3ded64c07449ce48b2ae293a83562

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 46d1c860430d5b6c6f0e5a4e9f1f5476e4cc11be52f9896551467623c2c25faf
MD5 f6b16625cb083894ec8e2fcc15c88342
BLAKE2b-256 7dbb649aad3bba33a3d80ae5f1ca634693b98375cf45dc53814a41053bd3f675

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cad9b56d8bfdb48ee59e63bb9053f40f2e1744229448ced93a94b3df4bc55730
MD5 3833e6766b4f89317337da287f3bfd95
BLAKE2b-256 89c6bea4168256bc7315fb7d5a606fa381a76f516e24547582465ce3ed6e5955

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8a33be015b4b32522f2a9a758ae0556bfcb6cf0c6cf4a7aa7d5a1a64787deaa8
MD5 ca06e664fb88b0ede9d5153f84787ea5
BLAKE2b-256 fc4f3c88328431899255a0b93493caf2298e1515aa7a51d5dafae3320dd67946

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f9c94c16bdbaa42ff590c37bbf12434896a5a8afd790441ee3c2d238fcfd37c
MD5 ebe32a83d16ec194e8e6a567d598992f
BLAKE2b-256 d3150c74d263ab0a809f2e6e87fd27923f9d3247777d0d13466a16fd796c4e53

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6be380febea53394477ed6c2f6335505232cc97af0b3530025cf09588ac40b1b
MD5 39e6ea42421b7cf7437b658150fc2f01
BLAKE2b-256 7a3bf325661301420aff71e4c824fc44029db86911307c6a11234c99d439bde3

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: renkin-0.18.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 770.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for renkin-0.18.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 81dd50f10572c263d0974912f6ee93e08fc8214ee2aaf8357114c26e036e0995
MD5 78eacfa4f67b81811894a7e128bcbf01
BLAKE2b-256 287c823fcee6c233075d06523df1e84d5fdf93fc245a31be42de1d6cfd722b5a

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de7a5fc63b73863d6d7b0c77dd4e4079dd1d8cd492db6fe0104f60f748bee19f
MD5 90aa76dbd6a8f4a625514573782e28ae
BLAKE2b-256 cbb531d4326a4fe41897a04a3b784379213fc56fc0cb88096eab8764ca9061a4

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 05c71a3deed3eae20380cb56490cc5c96f3b738cd8c9dcf489d894f6c57b1814
MD5 662548abbc54290ea543b7e2714dca78
BLAKE2b-256 2bd2d3279513c13c680771c6dcf3d0bf35eaec76b3962b98823ea19c8d0e82b9

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e89810fb0a4aff101524f4537c853fc8615c86cebea943d0590a78f8113df8d9
MD5 20a33f2577504e8fac47b43a60c1cc82
BLAKE2b-256 2126e2632b3c67c4ab5b11b6115cffd6ab471d1c8e0acc0a15bc214b0447f426

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: renkin-0.18.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 771.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for renkin-0.18.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 33d0ecdb80e2447cfd9977a773a62f45654eee504d3cde79a409972ca63ab392
MD5 b129adedc7ca3f3b9294aa06ac7bf257
BLAKE2b-256 77c8653ca75d88437fa8198f934aee450cbc79ca9524ad04c21f7db2a9f00d64

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 41e7c0e8fb619aa3c556609e912e4fc88d57b58e6c966037aa654ff953f0bed4
MD5 63958dd167dfe6599e34505797482f91
BLAKE2b-256 a2f637bc6d5fdeb939636282f1977ac58f97073b11cb0dc4268216d0cbcedb29

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b0de2ac1171d6295584260d46eb78d28ca1193ba0ee4c4e676353f5f1cf88337
MD5 7c6f6954565312f8bb9de1ea0ffa9865
BLAKE2b-256 764f3392265b29524ca2828c8be0112ddfcdc7175b95e835191b2e791dae0e54

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 828dcf7519c08ee4d20b022222e7348946de3e9f2cb8ba8419ddc8cb43949f36
MD5 9ddebc771d4ab7d6148fdf8a32a68793
BLAKE2b-256 2557bafadf837b87c04639675eb277309fef3682665737f43eb1ea2908f32ba3

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: renkin-0.18.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 771.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for renkin-0.18.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4133195a2196cd1d576fbe9cd0c3e76e6bc6202442f39f4a6e4c01775feccf4b
MD5 384e8f14d1ef31ebeeae10deedee334e
BLAKE2b-256 77ebb9970ed769abe3865a2e93d241f872308d76c84430d5cb78406147703dbd

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 279a4f38f44b80f0beee13d938068d97a2a8d7adec2800f056a9804564c81f40
MD5 2f1aafa7dba438fef6bf1d72d3b492e8
BLAKE2b-256 be0ace7a57bbe39cf308acf717a2f91436705e884bbb66b58eebed674e5e65be

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a66c48e379e6940c401e6f81ed101a962190c2f55302915c6b488ff63a4a2c1c
MD5 00bdc871c81bf283b117c72994aadeae
BLAKE2b-256 ee6eec67be7c8f451283511f8d720ac8f1bc8d0a98ea9ecf90d2a777fc81ef61

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79f2883fae6b20699e519b2e3537a67fcbf7f1fdd42bf53d8de3ce66ee918054
MD5 1c13e6b71a967768a628996de9fb3741
BLAKE2b-256 122ca2900a1b05ae209a15769b33aac1f89b9e7d7a471ce32b096c4c4072e959

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: renkin-0.18.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 774.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for renkin-0.18.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bb41c17c80904b388ac4d4d1419432c3e12162fdfd051db2c01cbf571f71409b
MD5 06de730d0816da76125c51f99d43c596
BLAKE2b-256 211fa204db636fe2f73dde658b9110915e62da15073b51587c3ce6f3cefadbf7

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d6e25106fa6e084dd983800b3c91f2a3c85672268602238fcca7d0bbbb86a9d
MD5 76d502296bb83154a458a092e3ad6162
BLAKE2b-256 af3a60ee2712a28e8f0417183212b2136f01a83de33e3c9a13a42fa63d830382

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f054ed21cd4ea3b0f9409d944a2564e54b980f1392438d7de1f78560be16007b
MD5 735c0f94d185651c4f9ff7ab30208df7
BLAKE2b-256 38c7701692e5ebd128dd85a2521f8e698e3fc62130252687f73aec542f17d607

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c6504a8370bed9f66fa262c36c9539cb216d6cd540fbf3db1a58ebe99a60283
MD5 120b38d02fdc20539634c9fd33a84614
BLAKE2b-256 588fe0833f35d0da8d1136a3e37d4c8a0aa07f438351f841cdb9dd1942668e4b

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: renkin-0.18.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 774.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for renkin-0.18.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 98495948ab2044d68432261c36f3554027d9df09518aeefe9399af0b99de9787
MD5 2a9baeec1d43512f835f3ec69988abdd
BLAKE2b-256 6924c34695f65b718da9ea8748a8d1676218045a0bf5242dcd9fef663ffb616c

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b7b21c4b78f1b17bc1f6bcc5544b9b4ef252f0a8478a244ac8268b0de0648cd8
MD5 51e2b153166a69d9ca7c2a4b81f85cc7
BLAKE2b-256 7634f44f278f1b62af732d97c498fc6e4bcbbe0f885c91f13c2905326d61c358

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f5df12f0ebfdd8620a9e0e53fec6f85c2557fdd01f3abd973787904c92d078b3
MD5 7c9537f9d2d02e94c3388c7c759d0177
BLAKE2b-256 8b8dc570d9c704cd0b7fddb496b5be77a3d3fc8c344e6b8fe33513cf4de5507a

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9a92eb6fea863963e8792cb92b55b8ff4ab880958c78802e405e406a58c4694a
MD5 ef35ca55b21d27d329af45a449968f72
BLAKE2b-256 002ed2dd50066f439cefdebeffe07cffec9593074afa915ecf3f5f8c4a952e8a

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 755be3dd50beda963c5a57bd7bc9a53a1beb4b12f0a19ffca17fe1042f64c40d
MD5 3a285069a368fecf155c6918b175bb81
BLAKE2b-256 0e6efce426415af54a93eb5cf6b2c11eb7e1673db549bed13c333cb9b12e4d58

See more details on using hashes here.

File details

Details for the file renkin-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for renkin-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a397d36f7b15e5da8b59ff790fddd69a77b53f01ab814650e35c13a7b4a1fa6b
MD5 ca8b8c14d4263934f4782150f9bc094e
BLAKE2b-256 a4b0265bd9f55eaa41a6342d6819c2377a22ef682e3ffcd8cb2fa36119bd6c55

See more details on using hashes here.

Release history Release notifications | RSS feed

0.35.0

29 files

0.34.0

29 files

0.33.0

29 files

0.32.0

29 files

0.31.0

29 files

0.30.0

29 files

0.29.0

29 files

0.28.0

29 files

0.27.0

29 files

0.26.0

29 files

0.25.0

29 files

0.24.0

29 files

0.23.0

29 files

0.22.0

29 files

0.21.1

29 files

0.21.0

29 files

0.20.0

29 files

0.19.0

29 files

This release

0.18.0 This release

29 files

0.17.0

29 files

0.16.0

29 files

0.15.4

29 files

0.15.3

29 files

0.15.2

29 files

0.15.1

29 files

0.15.0

29 files

0.1.0

29 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page