Repository navigation
Description
Summary
Split the monorepo's language, mobile, and WASM binding packages into independent repositories under the project-minigraf org. The core engine and FFI bridge crate remain in minigraf.
Motivation
- Approachability: Contributors interested in the Datalog engine see 24 CI workflows and 6 binding subdirectories. The interesting part of the project is buried under packaging infrastructure.
- CI efficiency: A one-line query executor fix triggers mobile, WASM, Python, Java, Node, and C builds (2,277 lines of workflow YAML). Splitting eliminates irrelevant CI for core changes.
- Scoped ownership: Independent repos let future maintainers own a binding without write access to the core engine.
Proposed structure
| Repository | Contents | Publishes to |
|---|---|---|
minigraf |
Core Rust engine, minigraf-ffi crate, REPL, benchmarks, examples |
crates.io |
minigraf-wasm |
Browser WASM + WASI bindings | npm (@minigraf/browser, @minigraf/wasi) |
minigraf-python |
Python bindings (UniFFI) | PyPI |
minigraf-node |
Node.js native addon (N-API) | npm (minigraf) |
minigraf-java |
Desktop JVM bindings (UniFFI + JNA fat JAR) | Maven Central |
minigraf-android |
Android .aar (UniFFI + JNI) |
GitHub Packages |
minigraf-swift |
iOS/macOS .xcframework (UniFFI + SPM) |
SPM |
minigraf-c |
C header + shared/static lib (cbindgen) | GitHub Releases tarballs |
What stays in the core repo
src/— the engineminigraf-ffi/— UniFFI bridge crate (tightly coupled to core API, published to crates.io alongsideminigraf)- Integration tests, benchmarks, examples, REPL
- Core CI:
rust.yml,rust-clippy.yml,rustfmt.yml,coverage.yml,cargo-audit.yml,bench.yml
What moves out
minigraf-wasm/,minigraf-wasi/→minigraf-wasmrepominigraf-ffi/python/→minigraf-pythonrepominigraf-node/→minigraf-noderepominigraf-ffi/java/→minigraf-javarepominigraf-ffi/android/→minigraf-androidrepominigraf-swift/→minigraf-swiftrepominigraf-c/→minigraf-crepo- Associated CI workflows (
*-ci.yml,*-release.yml,mobile.yml,wasm-*.yml) move to their respective repos
Shared code strategy
Each binding repo runs uniffi-bindgen against the published minigraf-ffi crate (or a git dep during development). No copy-paste of generated sources between repos.
Migration notes
- Preserve git history for moved directories where practical (
git filter-repoor similar) - Update cross-references in READMEs, ROADMAP.md, CHANGELOG.md
- Update
Cargo.tomlworkspace members after extraction - Archive or redirect old workflow files
Metadata
Metadata
Assignees
Labels
No labels
Activity
adityamukho commentedon May 15, 2026
Scheduling note
This repo split is best positioned after the reliability/performance cluster (issues #202–#221) and before the ecosystem expansion (issues project-minigraf/minigraf-examples#4–#201).
Why not earlier: Issues #202–#221 are pure core Rust (). The split doesn't touch them — no coordination benefit, just disruption risk mid-stream.
Why not later: The FFI deferrals (#180, #181) would naturally live in their respective binding repos after the split. The ecosystem libraries (#197–#200), integration examples (#193–#195), and examples crate (#196) are cleaner to scaffold in their final home repos from day one. The CI coverage work (#219) also becomes simpler once binding pipelines are out of the core repo.
Suggested gate: all of Wave 4 complete (deferred features: #180, #181, #182, #183, #187, #201) before initiating the split.
adityamukho commentedon May 17, 2026
Phase 1 complete ✓
The following binding repos are now live and independently maintained under the
project-minigraforg:Release cascade: a new
cascade.ymlworkflow in this repo publishesminigraf-ffito crates.io and dispatchescore-releaseevents to all three binding repos on every version tag.minigraf-ffiis now published to crates.io.Phase 2 (Java, Android, Swift) is deferred — their CI workflows remain in this repo until their respective splits.
Merge pull request #265 from project-minigraf/issue-231-repo-split
adityamukho commentedon May 18, 2026
Reopening — Phase 1 (Python, Node, WASM) is complete but Java, Android, and Swift bindings have not been split out yet.
java-release.ymlandmobile.ymlare still in the monorepo, which caused a spurious Maven Central publish of versionffi-v1.1.2(a garbage version string) when theffi-v1.1.2tag was pushed. Phase 2 will extractminigraf-java,minigraf-android, andminigraf-swiftand remove the remaining binding workflows from the core repo.Merge pull request #270 from project-minigraf/repo-split-phase2