{"id":49136016,"url":"https://github.com/hyperpolymath/chapeliser","last_synced_at":"2026-04-21T22:01:01.177Z","repository":{"id":345849698,"uuid":"1187314227","full_name":"hyperpolymath/chapeliser","owner":"hyperpolymath","description":"General-purpose Chapel acceleration framework — distribute any workload without learning Chapel","archived":false,"fork":false,"pushed_at":"2026-04-17T07:59:21.000Z","size":416,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T09:41:21.233Z","etag":null,"topics":["chapel","code-generation","distributed-computing","hpc","hyperpolymath","idris2","iser","palimpsest","parallel-computing","zig"],"latest_commit_sha":null,"homepage":"https://hyperpolymath.github.io/chapeliser/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyperpolymath.png","metadata":{"files":{"readme":"README.adoc","changelog":"CHANGELOG.adoc","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":".github/SUPPORT","governance":".github/GOVERNANCE.md","roadmap":"ROADMAP.adoc","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":".github/MAINTAINERS","copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"hyperpolymath","ko_fi":"hyperpolymath","liberapay":"hyperpolymath"}},"created_at":"2026-03-20T15:28:23.000Z","updated_at":"2026-04-17T07:59:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hyperpolymath/chapeliser","commit_stats":null,"previous_names":["hyperpolymath/chapeliser"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hyperpolymath/chapeliser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperpolymath%2Fchapeliser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperpolymath%2Fchapeliser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperpolymath%2Fchapeliser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperpolymath%2Fchapeliser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperpolymath","download_url":"https://codeload.github.com/hyperpolymath/chapeliser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperpolymath%2Fchapeliser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32101467,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["chapel","code-generation","distributed-computing","hpc","hyperpolymath","idris2","iser","palimpsest","parallel-computing","zig"],"created_at":"2026-04-21T22:00:24.582Z","updated_at":"2026-04-21T22:01:01.168Z","avatar_url":"https://github.com/hyperpolymath.png","language":"Rust","funding_links":["https://github.com/sponsors/hyperpolymath","https://ko-fi.com/hyperpolymath","https://liberapay.com/hyperpolymath"],"categories":[],"sub_categories":[],"readme":"// SPDX-License-Identifier: PMPL-1.0-or-later\n// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) \u003cj.d.a.jewell@open.ac.uk\u003e\n= Chapeliser\nJonathan D.A. Jewell \u003cj.d.a.jewell@open.ac.uk\u003e\n:toc: left\n:toclevels: 3\n:icons: font\n:source-highlighter: rouge\n\n== What Is This?\n\nChapeliser is a **general-purpose Chapel acceleration framework** that lets\ndevelopers scale single-machine applications to distributed clusters without\nlearning Chapel.\n\nYou describe your workload in a manifest (`chapeliser.toml`), point Chapeliser\nat your code, and it generates the distributed scaffolding — Chapel `coforall`\nloops, data partitioning, result gathering, and the ABI/FFI bridge between your\napplication and the Chapel runtime.\n\n== The Problem\n\nChapel is one of the most powerful parallel programming languages ever built.\nIt can distribute computation across thousands of nodes with elegant syntax.\nBut almost nobody uses it because:\n\n1. **Steep learning curve** — you must rewrite your application in Chapel or\n   deeply understand its interop model\n2. **No incremental adoption path** — it's all-or-nothing\n3. **Build system complexity** — integrating Chapel with existing Rust/C/Zig\n   projects is non-trivial\n\nChapeliser solves all three.\n\n== How It Works\n\n[source]\n----\nYour application (Rust, C, Zig)\n        │\n        ▼\nchapeliser.toml  ──► Chapeliser CLI\n        │                │\n        │    ┌───────────┴───────────┐\n        │    │                       │\n        ▼    ▼                       ▼\n   Idris2 ABI            Zig FFI           Chapel wrapper\n   (formal proof of      (C-ABI bridge     (coforall + data\n    data layout +         to Chapel         distribution +\n    partition safety)     runtime)          gather/reduce)\n        │                │                       │\n        └────────┬───────┘                       │\n                 ▼                               │\n          generated/abi/*.h  ◄───────────────────┘\n                 │\n                 ▼\n        Your app, now distributed\n----\n\n=== The Manifest\n\n[source,toml]\n----\n[workload]\nname = \"my-scanner\"\nentry = \"src/batch.rs::scan_all\"    # function to distribute\npartition = \"per-item\"               # split strategy\ngather = \"merge\"                     # combine strategy\n\n[data]\ninput-type = \"Vec\u003cPathBuf\u003e\"          # what gets distributed\noutput-type = \"Vec\u003cScanResult\u003e\"      # what comes back\nserialization = \"bincode\"            # wire format\n\n[scaling]\nmin-nodes = 1                        # runs locally if alone\nmax-nodes = 256                      # scales to cluster\ngrain-size = 50                      # items per Chapel task\n----\n\nYou write **zero Chapel code**. Chapeliser generates everything.\n\n=== Partition Strategies\n\n|===\n| Strategy | Description | Best For\n\n| `per-item` | One item per task | File scanning, image processing\n| `chunk` | Fixed-size chunks | Data pipelines, ETL\n| `adaptive` | Dynamic load balancing | Heterogeneous workloads\n| `spatial` | Domain decomposition | Simulation, matrices\n| `keyed` | Group by key | Map-reduce, aggregation\n|===\n\n=== Gather Strategies\n\n|===\n| Strategy | Description\n\n| `merge` | Concatenate all results\n| `reduce` | Apply reduction function (sum, max, min, custom)\n| `tree-reduce` | Logarithmic reduction for associative ops\n| `stream` | Results stream back as they complete\n| `first` | Return first successful result (search)\n|===\n\n== Architecture\n\nChapeliser follows the hyperpolymath ABI-FFI standard:\n\n* **Idris2 ABI** (`src/abi/`) — Formal proofs that:\n  - Data layouts are consistent across nodes\n  - Partition functions produce complete, non-overlapping splits\n  - Gather functions preserve all results\n  - Serialization round-trips are identity\n\n* **Zig FFI** (`ffi/zig/`) — C-ABI bridge between:\n  - The user's application (any language with C FFI)\n  - The Chapel runtime (`chpl_*` functions)\n  - Memory management across the boundary\n\n* **Chapel codegen** (`src/codegen/`) — Generates:\n  - `coforall` distribution loops\n  - Locale-aware data placement\n  - Communication primitives (GET/PUT/AMO)\n  - Fault tolerance (retry, checkpoint, redistribute)\n\n* **Rust CLI** (`src/`) — The `chapeliser` command:\n  - Parses `chapeliser.toml`\n  - Validates workload description\n  - Generates Chapel + Zig + C header scaffolding\n  - Builds and links everything\n  - Provides `chapeliser run` for execution\n\n== Quick Start\n\n[source,bash]\n----\n# Install\ncargo install chapeliser\n\n# In your project directory, create chapeliser.toml (see above)\nchapeliser init          # generates scaffold from manifest\nchapeliser build         # compiles Chapel wrapper + FFI bridge\nchapeliser run           # executes locally (1 node)\nchapeliser run -n 8      # distributes across 8 nodes\nchapeliser run --cluster my-cluster.toml  # full cluster\n----\n\n== First Consumer: panic-attacker\n\nThe first application to be Chapelised is\nhttps://github.com/hyperpolymath/panic-attacker[panic-attacker]'s\n`mass-panic` (assemblyline) mode — distributing static analysis across\nhundreds of repositories on a compute cluster.\n\n== Status\n\n**Pre-alpha.** Architecture defined, ABI proofs in progress, codegen planned.\n\n== License\n\nSPDX-License-Identifier: PMPL-1.0-or-later\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperpolymath%2Fchapeliser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperpolymath%2Fchapeliser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperpolymath%2Fchapeliser/lists"}