Repository navigation
Closed
Labels
enhancementNew feature or requestNew feature or requestrustPull requests that update rust codePull requests that update rust code
Milestone
Description
Roadmap source
ROADMAP.md (v3 branch): v3.0.0 scope — features, "UDF registration in every binding".
Work item
Expose register_predicate and register_aggregate through every language binding: the UniFFI ones (template, Python, Java, Android, Swift), C, Node, and the browser BrowserDb.
Spec: docs/superpowers/specs/2026-10-24-udf-uniffi-design.md (#730, amended for every binding in #736). Plan: docs/superpowers/plans/2026-10-24-180-udf-uniffi.md. Prerequisite: #734.
Acceptance criteria
- Core: fallible
try_register_predicate/try_register_aggregatewithUdfError; a failing UDF fails the query with a new QRY code; a per-query registry snapshot, so UDFs may call back into the database. - Each binding: registration without exposing unsound Rust closures over FFI; tests for at least one predicate and one aggregate, a failing callback, and re-entry.
- template: feat: user functions over UniFFI (minigraf#180) minigraf-binding-template#9
- Python: feat: user predicates and aggregates (#180) minigraf-python#16
- Java: feat: user predicates and aggregates (#180) minigraf-java#20
- Android: feat: user predicates and aggregates (#180) minigraf-android#16
- Swift: feat: user predicates and aggregates (minigraf#180) minigraf-swift#15
- browser
BrowserDb: feat(browser): BrowserDb.registerPredicate / registerAggregate (#180, PR 7) #757; minigraf-wasm: feat: BrowserDb user functions in the consumer test and README (minigraf#180) minigraf-wasm#20 - C: feat: user functions, minigraf_register_predicate/_aggregate (minigraf#180 PR 8) minigraf-c#13
- Node: feat: user functions from JavaScript (minigraf#180) minigraf-node#20
- Limitations and lifecycle/threading expectations documented in each binding's README and on the docs site.
Done
- Core: feat(udf): fallible UDFs, QRY-014, registry snapshot and re-entry (#180 PR 1) #746 (QRY-014,
try_register_*, registry snapshot), prerequisite checkpoint/verify/rebuild_indexes on a thread holding a WriteTransaction deadlock instead of INT-001 #734 (fix(db): calls inside a WriteTransaction return INT-001 instead of deadlocking (#734) #739, main backport fix(db): checkpoint inside a WriteTransaction returns INT-001 instead of deadlocking (#734) — backport #740). - Docs site: docs: fallible UDFs, QRY-014, registry snapshot and re-entry (#180) minigraf-docs#65 (core), feat: Phase 7.7b — User-Defined Functions (v0.17.0) #70 (BrowserDb), perf(query): fix O(n²) aggregation grouping (issue #31) #71 (every other binding). Each binding's README has a "User functions" section.
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestrustPull requests that update rust codePull requests that update rust code
Activity
fix(api): revert QueryResult tuple variants for 1.x compat; add curre…
docs(roadmap): record v2.0 file-format policy and wave completion status
docs(roadmap): move v3.0.0-milestone features into v3.0.0 scope (#733)
docs(spec): #180 review: #734 guards, registry snapshot is new, uniff…
Merge pull request #730 from project-minigraf/docs/180-udf-ffi-spec
[-]post-1.0: expose UDF registration over UniFFI[/-][+]Expose UDF registration in every binding[/+]docs(spec,plan): #180 review: binding handle locks, C destroy timing
Merge pull request #736 from project-minigraf/docs/180-all-bindings
docs: WASI test count for #180 PR 1
Merge pull request #746 from project-minigraf/feat/180-fallible-udfs
Merge pull request #756 from project-minigraf/docs/180-with-foreign
Merge pull request #757 from project-minigraf/feat/180-browser-udfs
adityamukho commentedon Oct 25, 2026
Done: core #746, every binding (template, Python, Java, Android, Swift, BrowserDb/wasm, C, Node) and the docs site (minigraf-docs#65, #70, #71). Criteria ticked above.