voodoo-store 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. voodoo_store-0.1.0/Cargo.lock +325 -0
  2. voodoo_store-0.1.0/Cargo.toml +16 -0
  3. voodoo_store-0.1.0/PKG-INFO +302 -0
  4. voodoo_store-0.1.0/README.md +278 -0
  5. voodoo_store-0.1.0/crates/voodoo-store-core/Cargo.toml +14 -0
  6. voodoo_store-0.1.0/crates/voodoo-store-core/examples/application_state.rs +43 -0
  7. voodoo_store-0.1.0/crates/voodoo-store-core/src/activation.rs +391 -0
  8. voodoo_store-0.1.0/crates/voodoo-store-core/src/atomic.rs +171 -0
  9. voodoo_store-0.1.0/crates/voodoo-store-core/src/cdc.rs +402 -0
  10. voodoo_store-0.1.0/crates/voodoo-store-core/src/checkpoint.rs +257 -0
  11. voodoo_store-0.1.0/crates/voodoo-store-core/src/collection.rs +760 -0
  12. voodoo_store-0.1.0/crates/voodoo-store-core/src/compaction.rs +184 -0
  13. voodoo_store-0.1.0/crates/voodoo-store-core/src/consumer_group.rs +482 -0
  14. voodoo_store-0.1.0/crates/voodoo-store-core/src/cron.rs +229 -0
  15. voodoo_store-0.1.0/crates/voodoo-store-core/src/cron_scheduler.rs +429 -0
  16. voodoo_store-0.1.0/crates/voodoo-store-core/src/engine.rs +926 -0
  17. voodoo_store-0.1.0/crates/voodoo-store-core/src/generation.rs +321 -0
  18. voodoo_store-0.1.0/crates/voodoo-store-core/src/header.rs +145 -0
  19. voodoo_store-0.1.0/crates/voodoo-store-core/src/jobs.rs +951 -0
  20. voodoo_store-0.1.0/crates/voodoo-store-core/src/lib.rs +79 -0
  21. voodoo_store-0.1.0/crates/voodoo-store-core/src/log.rs +180 -0
  22. voodoo_store-0.1.0/crates/voodoo-store-core/src/messaging.rs +367 -0
  23. voodoo_store-0.1.0/crates/voodoo-store-core/src/model.rs +149 -0
  24. voodoo_store-0.1.0/crates/voodoo-store-core/src/objects.rs +277 -0
  25. voodoo_store-0.1.0/crates/voodoo-store-core/src/operations.rs +221 -0
  26. voodoo_store-0.1.0/crates/voodoo-store-core/src/outbox.rs +303 -0
  27. voodoo_store-0.1.0/crates/voodoo-store-core/src/query.rs +327 -0
  28. voodoo_store-0.1.0/crates/voodoo-store-core/src/queue.rs +537 -0
  29. voodoo_store-0.1.0/crates/voodoo-store-core/src/restore.rs +177 -0
  30. voodoo_store-0.1.0/crates/voodoo-store-core/src/rpc.rs +439 -0
  31. voodoo_store-0.1.0/crates/voodoo-store-core/src/snapshot.rs +123 -0
  32. voodoo_store-0.1.0/crates/voodoo-store-core/src/transaction_domains.rs +352 -0
  33. voodoo_store-0.1.0/crates/voodoo-store-core/src/transactional.rs +153 -0
  34. voodoo_store-0.1.0/crates/voodoo-store-core/src/triggers.rs +544 -0
  35. voodoo_store-0.1.0/crates/voodoo-store-core/src/ttl.rs +277 -0
  36. voodoo_store-0.1.0/crates/voodoo-store-core/src/workflow.rs +1027 -0
  37. voodoo_store-0.1.0/crates/voodoo-store-core/tests/format_mutation.rs +50 -0
  38. voodoo_store-0.1.0/crates/voodoo-store-core/tests/process_crash.rs +104 -0
  39. voodoo_store-0.1.0/crates/voodoo-store-core/tests/recovery_faults.rs +123 -0
  40. voodoo_store-0.1.0/crates/voodoo-store-core/tests/state_model.rs +108 -0
  41. voodoo_store-0.1.0/crates/voodoo-store-python/Cargo.toml +16 -0
  42. voodoo_store-0.1.0/crates/voodoo-store-python/src/lib.rs +419 -0
  43. voodoo_store-0.1.0/pyproject.toml +36 -0
  44. voodoo_store-0.1.0/python/voodoo_store/__init__.py +31 -0
@@ -0,0 +1,325 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "block-buffer"
7
+ version = "0.10.4"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
10
+ dependencies = [
11
+ "generic-array",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "cfg-if"
16
+ version = "1.0.4"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
19
+
20
+ [[package]]
21
+ name = "cpufeatures"
22
+ version = "0.2.17"
23
+ source = "registry+https://github.com/rust-lang/crates.io-index"
24
+ checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
25
+ dependencies = [
26
+ "libc",
27
+ ]
28
+
29
+ [[package]]
30
+ name = "crc32fast"
31
+ version = "1.5.2"
32
+ source = "registry+https://github.com/rust-lang/crates.io-index"
33
+ checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78"
34
+ dependencies = [
35
+ "cfg-if",
36
+ ]
37
+
38
+ [[package]]
39
+ name = "crypto-common"
40
+ version = "0.1.7"
41
+ source = "registry+https://github.com/rust-lang/crates.io-index"
42
+ checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
43
+ dependencies = [
44
+ "generic-array",
45
+ "typenum",
46
+ ]
47
+
48
+ [[package]]
49
+ name = "digest"
50
+ version = "0.10.7"
51
+ source = "registry+https://github.com/rust-lang/crates.io-index"
52
+ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
53
+ dependencies = [
54
+ "block-buffer",
55
+ "crypto-common",
56
+ ]
57
+
58
+ [[package]]
59
+ name = "fs2"
60
+ version = "0.4.3"
61
+ source = "registry+https://github.com/rust-lang/crates.io-index"
62
+ checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
63
+ dependencies = [
64
+ "libc",
65
+ "winapi",
66
+ ]
67
+
68
+ [[package]]
69
+ name = "generic-array"
70
+ version = "0.14.7"
71
+ source = "registry+https://github.com/rust-lang/crates.io-index"
72
+ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
73
+ dependencies = [
74
+ "typenum",
75
+ "version_check",
76
+ ]
77
+
78
+ [[package]]
79
+ name = "getrandom"
80
+ version = "0.4.3"
81
+ source = "registry+https://github.com/rust-lang/crates.io-index"
82
+ checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
83
+ dependencies = [
84
+ "cfg-if",
85
+ "libc",
86
+ "r-efi",
87
+ ]
88
+
89
+ [[package]]
90
+ name = "heck"
91
+ version = "0.5.0"
92
+ source = "registry+https://github.com/rust-lang/crates.io-index"
93
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
94
+
95
+ [[package]]
96
+ name = "libc"
97
+ version = "0.2.189"
98
+ source = "registry+https://github.com/rust-lang/crates.io-index"
99
+ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
100
+
101
+ [[package]]
102
+ name = "once_cell"
103
+ version = "1.21.4"
104
+ source = "registry+https://github.com/rust-lang/crates.io-index"
105
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
106
+
107
+ [[package]]
108
+ name = "portable-atomic"
109
+ version = "1.15.0"
110
+ source = "registry+https://github.com/rust-lang/crates.io-index"
111
+ checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
112
+
113
+ [[package]]
114
+ name = "proc-macro2"
115
+ version = "1.0.107"
116
+ source = "registry+https://github.com/rust-lang/crates.io-index"
117
+ checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
118
+ dependencies = [
119
+ "unicode-ident",
120
+ ]
121
+
122
+ [[package]]
123
+ name = "pyo3"
124
+ version = "0.28.3"
125
+ source = "registry+https://github.com/rust-lang/crates.io-index"
126
+ checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12"
127
+ dependencies = [
128
+ "libc",
129
+ "once_cell",
130
+ "portable-atomic",
131
+ "pyo3-build-config",
132
+ "pyo3-ffi",
133
+ "pyo3-macros",
134
+ ]
135
+
136
+ [[package]]
137
+ name = "pyo3-build-config"
138
+ version = "0.28.3"
139
+ source = "registry+https://github.com/rust-lang/crates.io-index"
140
+ checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e"
141
+ dependencies = [
142
+ "target-lexicon",
143
+ ]
144
+
145
+ [[package]]
146
+ name = "pyo3-ffi"
147
+ version = "0.28.3"
148
+ source = "registry+https://github.com/rust-lang/crates.io-index"
149
+ checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e"
150
+ dependencies = [
151
+ "libc",
152
+ "pyo3-build-config",
153
+ ]
154
+
155
+ [[package]]
156
+ name = "pyo3-macros"
157
+ version = "0.28.3"
158
+ source = "registry+https://github.com/rust-lang/crates.io-index"
159
+ checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813"
160
+ dependencies = [
161
+ "proc-macro2",
162
+ "pyo3-macros-backend",
163
+ "quote",
164
+ "syn 2.0.119",
165
+ ]
166
+
167
+ [[package]]
168
+ name = "pyo3-macros-backend"
169
+ version = "0.28.3"
170
+ source = "registry+https://github.com/rust-lang/crates.io-index"
171
+ checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb"
172
+ dependencies = [
173
+ "heck",
174
+ "proc-macro2",
175
+ "pyo3-build-config",
176
+ "quote",
177
+ "syn 2.0.119",
178
+ ]
179
+
180
+ [[package]]
181
+ name = "quote"
182
+ version = "1.0.47"
183
+ source = "registry+https://github.com/rust-lang/crates.io-index"
184
+ checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
185
+ dependencies = [
186
+ "proc-macro2",
187
+ ]
188
+
189
+ [[package]]
190
+ name = "r-efi"
191
+ version = "6.0.0"
192
+ source = "registry+https://github.com/rust-lang/crates.io-index"
193
+ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
194
+
195
+ [[package]]
196
+ name = "sha2"
197
+ version = "0.10.9"
198
+ source = "registry+https://github.com/rust-lang/crates.io-index"
199
+ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
200
+ dependencies = [
201
+ "cfg-if",
202
+ "cpufeatures",
203
+ "digest",
204
+ ]
205
+
206
+ [[package]]
207
+ name = "syn"
208
+ version = "2.0.119"
209
+ source = "registry+https://github.com/rust-lang/crates.io-index"
210
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
211
+ dependencies = [
212
+ "proc-macro2",
213
+ "quote",
214
+ "unicode-ident",
215
+ ]
216
+
217
+ [[package]]
218
+ name = "syn"
219
+ version = "3.0.5"
220
+ source = "registry+https://github.com/rust-lang/crates.io-index"
221
+ checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9"
222
+ dependencies = [
223
+ "proc-macro2",
224
+ "quote",
225
+ "unicode-ident",
226
+ ]
227
+
228
+ [[package]]
229
+ name = "target-lexicon"
230
+ version = "0.13.5"
231
+ source = "registry+https://github.com/rust-lang/crates.io-index"
232
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
233
+
234
+ [[package]]
235
+ name = "thiserror"
236
+ version = "2.0.20"
237
+ source = "registry+https://github.com/rust-lang/crates.io-index"
238
+ checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
239
+ dependencies = [
240
+ "thiserror-impl",
241
+ ]
242
+
243
+ [[package]]
244
+ name = "thiserror-impl"
245
+ version = "2.0.20"
246
+ source = "registry+https://github.com/rust-lang/crates.io-index"
247
+ checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
248
+ dependencies = [
249
+ "proc-macro2",
250
+ "quote",
251
+ "syn 3.0.5",
252
+ ]
253
+
254
+ [[package]]
255
+ name = "typenum"
256
+ version = "1.20.1"
257
+ source = "registry+https://github.com/rust-lang/crates.io-index"
258
+ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
259
+
260
+ [[package]]
261
+ name = "unicode-ident"
262
+ version = "1.0.24"
263
+ source = "registry+https://github.com/rust-lang/crates.io-index"
264
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
265
+
266
+ [[package]]
267
+ name = "version_check"
268
+ version = "0.9.5"
269
+ source = "registry+https://github.com/rust-lang/crates.io-index"
270
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
271
+
272
+ [[package]]
273
+ name = "voodoo-store-cli"
274
+ version = "0.1.0"
275
+ dependencies = [
276
+ "voodoo-store-core",
277
+ ]
278
+
279
+ [[package]]
280
+ name = "voodoo-store-core"
281
+ version = "0.1.0"
282
+ dependencies = [
283
+ "crc32fast",
284
+ "fs2",
285
+ "getrandom",
286
+ "sha2",
287
+ "thiserror",
288
+ ]
289
+
290
+ [[package]]
291
+ name = "voodoo-store-ffi"
292
+ version = "0.1.0"
293
+ dependencies = [
294
+ "voodoo-store-core",
295
+ ]
296
+
297
+ [[package]]
298
+ name = "voodoo-store-python"
299
+ version = "0.1.0"
300
+ dependencies = [
301
+ "pyo3",
302
+ "voodoo-store-core",
303
+ ]
304
+
305
+ [[package]]
306
+ name = "winapi"
307
+ version = "0.3.9"
308
+ source = "registry+https://github.com/rust-lang/crates.io-index"
309
+ checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
310
+ dependencies = [
311
+ "winapi-i686-pc-windows-gnu",
312
+ "winapi-x86_64-pc-windows-gnu",
313
+ ]
314
+
315
+ [[package]]
316
+ name = "winapi-i686-pc-windows-gnu"
317
+ version = "0.4.0"
318
+ source = "registry+https://github.com/rust-lang/crates.io-index"
319
+ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
320
+
321
+ [[package]]
322
+ name = "winapi-x86_64-pc-windows-gnu"
323
+ version = "0.4.0"
324
+ source = "registry+https://github.com/rust-lang/crates.io-index"
325
+ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
@@ -0,0 +1,16 @@
1
+ [workspace]
2
+ members = ["crates/voodoo-store-core", "crates/voodoo-store-python"]
3
+ resolver = "2"
4
+
5
+ [workspace.package]
6
+ edition = "2024"
7
+ license = "Apache-2.0"
8
+ repository = "https://github.com/helderperez-dev/voodoo-store"
9
+ rust-version = "1.85"
10
+
11
+ [workspace.dependencies]
12
+ crc32fast = "1.4"
13
+ fs2 = "0.4"
14
+ getrandom = "0.4"
15
+ sha2 = "0.10"
16
+ thiserror = "2"
@@ -0,0 +1,302 @@
1
+ Metadata-Version: 2.4
2
+ Name: voodoo-store
3
+ Version: 0.1.0
4
+ Classifier: Development Status :: 3 - Alpha
5
+ Classifier: Intended Audience :: Developers
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Programming Language :: Python :: 3 :: Only
8
+ Classifier: Programming Language :: Rust
9
+ Classifier: Operating System :: MacOS
10
+ Classifier: Operating System :: Microsoft :: Windows
11
+ Classifier: Operating System :: POSIX :: Linux
12
+ Classifier: Topic :: Database
13
+ Classifier: Topic :: Software Development :: Libraries
14
+ Summary: Embedded application state engine for Python, backed by Voodoo Store Rust core
15
+ Keywords: embedded,database,state,runtime,rust
16
+ Author: Helder Perez
17
+ License-Expression: Apache-2.0
18
+ Requires-Python: >=3.9
19
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
20
+ Project-URL: Homepage, https://github.com/helderperez-dev/voodoo-store
21
+ Project-URL: Issues, https://github.com/helderperez-dev/voodoo-store/issues
22
+ Project-URL: Repository, https://github.com/helderperez-dev/voodoo-store
23
+
24
+ # Voodoo Store
25
+
26
+ > **Application infrastructure in a store.**
27
+
28
+ Voodoo Store is a **standalone, 100% Rust embedded application-state engine** built around one goal:
29
+
30
+ > **A Voodoo application should be able to run robustly with Voodoo + Voodoo Store and no mandatory external infrastructure by default.**
31
+
32
+ It is being built for the Voodoo ecosystem, but the core is not coupled to Voodoo Framework. The engine and `.vstore` format are designed to remain language-neutral and independently usable.
33
+
34
+ **SQLite made the database a file. Voodoo Store aims to make application infrastructure a store.**
35
+
36
+ ## Status
37
+
38
+ **v0.1 usable single-node development release.**
39
+
40
+ Voodoo Store is pre-1.0, but it is now suitable for controlled single-node development and production experiments where its current compatibility and operational limits are understood.
41
+
42
+ The current engine includes:
43
+
44
+ - versioned, checksummed `.vstore` files and strong persistent Store identity;
45
+ - checksummed append-only logging, atomic transactions and deterministic crash recovery;
46
+ - Linux/macOS/Windows single-writer locking and explicit durability modes;
47
+ - byte-oriented KV, CAS, counters, prefix scans and TTL;
48
+ - Collections with schema/codec metadata and secondary/unique indexes;
49
+ - durable Queues with leases, delay, priority, retry/NACK, dead state and stale-ACK protection;
50
+ - durable Jobs with 128-bit IDs, idempotency, retry/backoff, deadlines and execution history;
51
+ - one-shot, interval and deterministic UTC Cron scheduling;
52
+ - durable Triggers;
53
+ - Topics, Streams, replay, durable subscriptions and Consumer Groups;
54
+ - durable request/reply correlation and RPC state;
55
+ - transactional Outbox events;
56
+ - content-addressed SHA-256 object storage, deduplication, verification, references and orphan GC;
57
+ - durable Workflow/HITL state with waits, signals, timers and history;
58
+ - verify, backup, create-only restore, logical snapshots and compact-copy;
59
+ - structured health/storage accounting;
60
+ - standalone `voodoo-store` CLI;
61
+ - C ABI v2 foundation with transactions, `last_error` and panic containment;
62
+ - deterministic corruption, torn-write and process-crash testing;
63
+ - CI across Format, Clippy, Linux, macOS, Windows and Rust 1.85 MSRV.
64
+
65
+ This is **not yet a production 1.0**. File/API compatibility should still be considered pre-1.0, and important data should be backed up before upgrading experimental deployments.
66
+
67
+ ## Start here
68
+
69
+ Build and test:
70
+
71
+ ```bash
72
+ cargo build --workspace
73
+ cargo test --workspace
74
+ ```
75
+
76
+ Run the executable application-state example:
77
+
78
+ ```bash
79
+ cargo run -p voodoo-store-core --example application_state -- application.vstore
80
+ ```
81
+
82
+ The example commits application state, a durable Job and an Outbox Event through one transaction:
83
+
84
+ ```text
85
+ BEGIN
86
+ PUT order:42:status = paid
87
+ ENQUEUE JOB email.send_receipt(order:42)
88
+ EMIT EVENT order.paid(order:42)
89
+ COMMIT
90
+ ```
91
+
92
+ If that transaction does not commit, none of those staged mutations become visible after recovery.
93
+
94
+ See `docs/QUICKSTART.md` for the full walkthrough.
95
+
96
+ ## North Star
97
+
98
+ The standard Voodoo deployment is intentionally small:
99
+
100
+ ```text
101
+ Application
102
+ |
103
+ +-- Voodoo Runtime
104
+ |
105
+ `-- application.vstore
106
+ ```
107
+
108
+ A normal application should not need Redis, PostgreSQL, RabbitMQ, Kafka, Celery, a separate cron service, or a separate local object service merely to get robust application infrastructure.
109
+
110
+ External infrastructure remains available as optional adapters when scale or deployment topology genuinely requires it.
111
+
112
+ ## Architecture
113
+
114
+ ```text
115
+ Applications / Frameworks
116
+ |
117
+ +-- Voodoo Runtime / Framework
118
+ +-- Rust
119
+ +-- C / native bindings
120
+ +-- future Python / Node / Go / Swift bindings
121
+ |
122
+ Stable APIs / bindings
123
+ |
124
+ voodoo-store-core
125
+ |
126
+ +-- Data: KV / TTL / Collections / Indexes
127
+ +-- Work: Queues / Jobs / Scheduler / Cron / Triggers
128
+ +-- Messaging: Topics / Streams / Consumer Groups / RPC / Outbox
129
+ +-- Objects
130
+ +-- Workflow state
131
+ +-- Operations / health / lifecycle
132
+ |
133
+ Transaction / Commit Layer
134
+ |
135
+ Append-only Checksummed Log
136
+ |
137
+ Recovery / Verification
138
+ |
139
+ Versioned .vstore Header
140
+ |
141
+ Filesystem + File Locking
142
+ ```
143
+
144
+ The Store persists durable semantics. Voodoo Runtime executes application code, HTTP handlers, AI inference, external calls and Identity/Auth behavior.
145
+
146
+ ## Cross-domain transactions
147
+
148
+ A major Voodoo Store goal is to remove the split-brain normally created by a database plus external work infrastructure.
149
+
150
+ Current typed transaction primitives already allow application state, Jobs, Outbox Events and durable RPC Requests to share a Store transaction.
151
+
152
+ ```rust
153
+ use voodoo_store_core::{JobSpec, Store};
154
+
155
+ fn main() -> Result<(), Box<dyn std::error::Error>> {
156
+ let mut store = Store::open("application.vstore")?;
157
+
158
+ let mut tx = store.begin()?;
159
+ tx.put(b"order:42:status", b"paid")?;
160
+ tx.enqueue_job(JobSpec::new(b"email.send_receipt", b"order:42"), 1_000)?;
161
+ tx.emit_event(b"order.paid", b"order:42", 1_000)?;
162
+ tx.request_rpc(b"payments.capture", b"order:42", 1_000, Some(31_000))?;
163
+ tx.commit()?;
164
+
165
+ Ok(())
166
+ }
167
+ ```
168
+
169
+ The public cross-domain transaction surface will continue expanding to additional primitives before 1.0.
170
+
171
+ ## Durability
172
+
173
+ ```rust
174
+ use voodoo_store_core::{Durability, Store, StoreOptions};
175
+
176
+ let store = Store::open_with_options(
177
+ "application.vstore",
178
+ StoreOptions {
179
+ durability: Durability::Strict,
180
+ repair_torn_tail: true,
181
+ },
182
+ )?;
183
+ ```
184
+
185
+ - `Strict` uses `sync_all()` on commit.
186
+ - `Data` uses `sync_data()` on commit and is the default.
187
+ - `Relaxed` relies on later operating-system flushing.
188
+
189
+ Only an incomplete physical tail is automatically repairable. Corruption inside the durable prefix is surfaced as an error rather than silently discarded.
190
+
191
+ ## Current good-fit workloads
192
+
193
+ v0.1 is a reasonable target for controlled use in:
194
+
195
+ - Voodoo Runtime development;
196
+ - SaaS/internal-tool prototypes and early deployments;
197
+ - desktop/local-first applications;
198
+ - AI agent and automation state;
199
+ - edge gateways and robotics controllers;
200
+ - single-node APIs that want durable Jobs/Queues without deploying an infrastructure stack.
201
+
202
+ Pin the exact Store version and keep backups for important pre-1.0 stores.
203
+
204
+ ## Known pre-1.0 limits
205
+
206
+ The main remaining work before a 1.0 claim includes:
207
+
208
+ - continuous fuzzing and long-running durability soak tests;
209
+ - identity-preserving checkpoints/log generations and atomic in-place compaction;
210
+ - richer Collection query/range/composite-index support;
211
+ - CDC, change feeds and live-query/watch APIs;
212
+ - complete cross-domain transaction coverage for all Store primitives;
213
+ - quotas, richer metrics and tracing;
214
+ - streaming object I/O and lifecycle policies;
215
+ - complete C ABI coverage and first-class language bindings;
216
+ - encryption-at-rest/key-rotation design;
217
+ - later replication/sync and Voodoo Protocol integration.
218
+
219
+ Store Studio and distributed operation are later milestones and do not block controlled single-node use.
220
+
221
+ ## CLI
222
+
223
+ The workspace includes the standalone `voodoo-store` binary. Examples:
224
+
225
+ ```bash
226
+ cargo run -p voodoo-store-cli -- put application.vstore hello world
227
+ cargo run -p voodoo-store-cli -- get application.vstore hello
228
+ cargo run -p voodoo-store-cli -- health application.vstore
229
+ cargo run -p voodoo-store-cli -- verify application.vstore
230
+ cargo run -p voodoo-store-cli -- backup application.vstore application.backup.vstore
231
+ ```
232
+
233
+ The CLI also exposes lifecycle, Queue, Collection, Messaging, Object, Job, Scheduler, Cron, Trigger and Workflow operations. See `docs/QUICKSTART.md` for usage guidance.
234
+
235
+ ## C ABI
236
+
237
+ `voodoo-store-ffi` is the portability foundation for non-Rust bindings. The current ABI includes Store handles, KV operations, buffered transactions, thread-local `last_error` reporting and panic containment. Higher-level primitive coverage is still expanding before the ABI is considered complete.
238
+
239
+ Public header:
240
+
241
+ ```text
242
+ include/voodoo_store.h
243
+ ```
244
+
245
+ ## Workspace
246
+
247
+ ```text
248
+ crates/
249
+ voodoo-store-core/ # correctness-critical embedded engine
250
+ voodoo-store-ffi/ # C ABI portability layer
251
+ voodoo-store-cli/ # standalone inspection and operation CLI
252
+
253
+ include/
254
+ voodoo_store.h
255
+
256
+ docs/
257
+ ARCHITECTURE.md
258
+ SPEC.md
259
+ INVARIANTS.md
260
+ ROADMAP.md
261
+ QUICKSTART.md
262
+ ```
263
+
264
+ ## Voodoo integration
265
+
266
+ Voodoo Framework/Runtime will consume Store behind higher-level primitives while the engine stays independently usable.
267
+
268
+ ```text
269
+ Voodoo Model -> Store Collections / data
270
+ Voodoo @task -> Store Jobs / Queues
271
+ Voodoo Scheduler -> Store schedules / Cron
272
+ Voodoo events -> Store Topics / Streams / Outbox
273
+ Voodoo ObjectStore -> Store Objects
274
+ Execution / HITL -> Store Workflow state
275
+ Runtime Identity -> durable state persisted through Store
276
+ ```
277
+
278
+ Identity/Auth semantics remain in Voodoo Runtime, not in Voodoo Store.
279
+
280
+ ## Compatibility principle
281
+
282
+ The lowest-level durable contract is bytes. Voodoo Store does not persist host-specific Python pickle, Java serialization, V8 objects or Go gob as its core format. Typed codecs and schemas are layered above the engine so a compatible Store can be accessed from multiple runtimes.
283
+
284
+ ## Development principle
285
+
286
+ Correctness comes before feature count and benchmarks:
287
+
288
+ ```text
289
+ SPEC
290
+ -> INVARIANTS
291
+ -> IMPLEMENTATION
292
+ -> TESTS
293
+ -> FAULT INJECTION
294
+ -> FUZZING
295
+ -> BENCHMARKS
296
+ -> OPTIMIZATION
297
+ ```
298
+
299
+ ## License
300
+
301
+ Apache-2.0
302
+