8000 Split language/platform bindings into separate repositories · Issue #231 · project-minigraf/minigraf · GitHub
[go: up one dir, main page]

Skip to content

Split language/platform bindings into separate repositories #231

Closed

Description

@adityamukho

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 engine
  • minigraf-ffi/ — UniFFI bridge crate (tightly coupled to core API, published to crates.io alongside minigraf)
  • 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-wasm repo
  • minigraf-ffi/python/ → minigraf-python repo
  • minigraf-node/ → minigraf-node repo
  • minigraf-ffi/java/ → minigraf-java repo
  • minigraf-ffi/android/ → minigraf-android repo
  • minigraf-swift/ → minigraf-swift repo
  • minigraf-c/ → minigraf-c repo
  • 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-repo or similar)
  • Update cross-references in READMEs, ROADMAP.md, CHANGELOG.md
  • Update Cargo.toml workspace members after extraction
  • Archive or redirect old workflow files

Activity

  1. adityamukho commented on May 15, 2026

    @adityamukho
    CollaboratorAuthor

    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.

  2. adityamukho commented on May 17, 2026

    @adityamukho
    CollaboratorAuthor

    Phase 1 complete ✓

    The following binding repos are now live and independently maintained under the project-minigraf org:

    Release cascade: a new cascade.yml workflow in this repo publishes minigraf-ffi to crates.io and dispatches core-release events to all three binding repos on every version tag. minigraf-ffi is now published to crates.io.

    Phase 2 (Java, Android, Swift) is deferred — their CI workflows remain in this repo until their respective splits.

  3. added a commit that references this issue on May 17, 2026
  4. adityamukho commented on May 18, 2026

    @adityamukho
    CollaboratorAuthor

    Reopening — Phase 1 (Python, Node, WASM) is complete but Java, Android, and Swift bindings have not been split out yet. java-release.yml and mobile.yml are still in the monorepo, which caused a spurious Maven Central publish of version ffi-v1.1.2 (a garbage version string) when the ffi-v1.1.2 tag was pushed. Phase 2 will extract minigraf-java, minigraf-android, and minigraf-swift and remove the remaining binding workflows from the core repo.

  5. added a commit that references this issue on May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0