1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
[]
= "meshdb-executor"
= true
= true
= true
= true
= "Physical operators and query execution for Mesh"
[]
= { = true }
= { = true }
= { = true }
= { = true, = true }
= { = true }
# `apoc.load.*` / `apoc.export.*` pull these in via the
# `apoc-load` feature. Kept optional so slim builds (no
# `apoc-load`) don't compile a ~40-crate HTTP/JSON/CSV stack
# they'll never exercise.
= { = true, = true }
= { = "0.12", = false, = ["blocking", "rustls-tls"], = true }
= { = "1.3", = true }
= true
= true
= true
= "1"
= true
= { = true, = true }
[]
= "3"
[]
# APOC-compatible scalars and procedures ship enabled by
# default — the `apoc` umbrella feature pulls in every shipped
# namespace. Embedded callers wanting a slimmer build use
# `default-features = false` and re-enable specific apoc-*
# sub-features as needed; turning on any one of them activates
# the executor-side adapter via the private `__apoc` marker.
= ["apoc"]
# Private marker — any `apoc-*` sub-feature depends on it so the
# adapter code in `eval.rs` only compiles when something actually
# needs it. Users don't set this directly.
= []
# Per-namespace opt-in. Each maps 1:1 to a feature on the
# `meshdb-apoc` crate.
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/coll"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/text"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/map"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/util"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/convert"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/date"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/number"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/create"]
= ["__apoc", "dep:meshdb-apoc", "meshdb-apoc/meta"]
# `apoc.refactor.*` is procedure-only — there's no scalar slice in
# `meshdb-apoc` to depend on, so this feature gates the executor-
# side procedure registration directly. No `__apoc` either, since
# that flag is the scalar dispatcher's marker.
= []
# `apoc.path.*` — traversal procedures (expand / expandConfig /
# subgraphAll / subgraphNodes / spanningTree) plus the
# Path-aware scalars (create / slice / combine / elements).
# These scalars live in `eval.rs` directly rather than routing
# through `meshdb-apoc`, because they take / return graph
# element values (Node / Edge / Path) the APOC scalar
# dispatcher can't carry. No `__apoc` marker because the scalar
# wiring is native-executor-side.
= []
# `apoc.cypher.*` — run an arbitrary Cypher statement from
# inside another query. Ships `apoc.cypher.run` (read-only) and
# `apoc.cypher.doIt` (write-capable); both recurse into
# `execute_with_reader_and_procs` with the current reader /
# writer / procedure registry so inner writes accumulate in the
# outer buffer for atomic commit, and nested procedure calls
# resolve against the same registry.
= []
# `apoc.load.*` — read JSON / CSV from a local file or HTTP URL
# and stream the records as Cypher rows. Ships disabled by
# default at runtime via ImportConfig (strict opt-in per
# import-root directory and URL allowlist) — compiling in the
# feature only enables the procedures; they still refuse to run
# until the server config opts in explicitly. Pulls in the
# `serde_json`, `csv`, and `reqwest` (blocking + rustls-tls)
# deps that slim builds don't need.
= ["dep:serde_json", "dep:csv", "dep:reqwest"]
# `apoc.export.*` — write the graph (or a query result) to a
# local file as CSV / JSON / re-runnable Cypher. Reuses
# `apoc-load`'s ImportConfig + security gates — the same
# `allow_file` / `file_root` operator settings govern both
# directions. Compiling in the feature does not itself enable
# exports; the runtime ImportConfig still has to opt in.
= ["apoc-load"]
# `apoc.trigger.*` — install Cypher snippets that fire after
# a successful commit, with the tx diff exposed as `$createdNodes`
# / `$createdRelationships` / `$deletedNodes` /
# `$deletedRelationships` params. V1 ships only the `after`
# phase, only the install / drop / list procedures, and only
# the local-node store (no cluster replication). Documented
# gaps (before / afterAsync / rollback phases, pause/resume,
# property-change tracking) are tracked in CLAUDE.md. Pulls
# in `serde_json` for trigger spec persistence.
= ["dep:serde_json", "dep:tracing"]
# Umbrella: every shipped namespace. Add new sub-features here as
# they land so `--features apoc` keeps meaning "everything".
= [
"apoc-coll",
"apoc-text",
"apoc-map",
"apoc-util",
"apoc-convert",
"apoc-date",
"apoc-number",
"apoc-create",
"apoc-meta",
"apoc-refactor",
"apoc-path",
"apoc-cypher",
"apoc-load",
"apoc-export",
"apoc-trigger",
]