nedb-engine 2.0.5__tar.gz → 2.0.6__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.
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/PKG-INFO +97 -12
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/README.md +96 -11
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/pyproject.toml +1 -1
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/__init__.py +1 -1
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/.gitignore +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/LICENSE +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/client/python/README.md +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/autoindex.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/backends/__init__.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/backends/redis_backend.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/cascade.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/concurrent.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/crypto.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/engine.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/index.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/log.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/merkle.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/mongo.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/query.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/redis_compat.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/relations.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/resp2.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/server.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/snapshot.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/sql.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/store.py +0 -0
- {nedb_engine-2.0.5 → nedb_engine-2.0.6}/python/nedb/wrap_redis.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nedb-engine
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.6
|
|
4
4
|
Summary: NEDB — a versioned, self-compressing, time-traveling embedded database (replay-protected, idempotent, relational, searchable) with durable AOF persistence and a server daemon (nedbd).
|
|
5
5
|
Project-URL: Homepage, https://github.com/Eth-Interchained/nedb
|
|
6
6
|
Project-URL: Repository, https://github.com/Eth-Interchained/nedb
|
|
@@ -21,7 +21,7 @@ Description-Content-Type: text/markdown
|
|
|
21
21
|
|
|
22
22
|
# NEDB
|
|
23
23
|
|
|
24
|
-
**Hash-chained ·
|
|
24
|
+
**Content-addressed Merkle DAG · Hash-chained · Time-traveling · Bi-temporal · Causally-provable embedded database.**
|
|
25
25
|
|
|
26
26
|
Replay-protected · idempotent · relational · filterable · sortable · searchable · concurrent.
|
|
27
27
|
One Rust core → ships to **PyPI** and **npm** from a single source.
|
|
@@ -29,6 +29,7 @@ One Rust core → ships to **PyPI** and **npm** from a single source.
|
|
|
29
29
|
[](https://pypi.org/project/nedb-engine/)
|
|
30
30
|
[](https://www.npmjs.com/package/nedb-engine)
|
|
31
31
|
[](https://github.com/Eth-Interchained/nedb/actions)
|
|
32
|
+
[](https://pypi.org/project/nedb-client/)
|
|
32
33
|
|
|
33
34
|
**[Studio → studio.interchained.org](https://studio.interchained.org)** · **[nedb.aiassist.net](https://nedb.aiassist.net)**
|
|
34
35
|
|
|
@@ -36,6 +37,34 @@ One Rust core → ships to **PyPI** and **npm** from a single source.
|
|
|
36
37
|
|
|
37
38
|
---
|
|
38
39
|
|
|
40
|
+
## v2 — The DAG Engine (new in 2.0.5)
|
|
41
|
+
|
|
42
|
+
NEDB v2 replaces the append-only log (AOF) with a **content-addressed Merkle DAG**. Every document version is an immutable, BLAKE2b-verified object. Nothing is ever overwritten.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Run the v2 DAG engine — ships inside pip install nedb-engine
|
|
46
|
+
nedbd --dag --data ./data
|
|
47
|
+
# or
|
|
48
|
+
NEDBD_DAG=1 NEDB_TMK=<32-byte-hex> nedbd --data ./data
|
|
49
|
+
|
|
50
|
+
curl http://127.0.0.1:7070/health
|
|
51
|
+
# {"ok":true,"version":"2.0.5","service":"nedbd","encrypted":true}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
| Property | v2 DAG | v1 AOF |
|
|
55
|
+
|---|:---:|:---:|
|
|
56
|
+
| Uncorruptable (atomic writes, hash-verified reads) | ✅ | ⚠️ |
|
|
57
|
+
| Instant cold start (no AOF replay) | ✅ | ❌ |
|
|
58
|
+
| Parallel writes (no global lock) | ✅ | ❌ |
|
|
59
|
+
| BLAKE2b Merkle head on every response | ✅ | ❌ |
|
|
60
|
+
| Tombstone deletes (history preserved) | ✅ | ✅ |
|
|
61
|
+
| Auto-migrates v1 AOF → v2 DAG on startup | ✅ | — |
|
|
62
|
+
| Same HTTP API — Vision, Studio, all clients unchanged | ✅ | ✅ |
|
|
63
|
+
|
|
64
|
+
**v1 AOF engine is still shipped and unchanged** — `nedbd` (no flag) runs v1.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
39
68
|
## What makes NEDB different
|
|
40
69
|
|
|
41
70
|
Every database stores *what*. NEDB stores *what*, *when*, *when it was true*, and *why* — all sealed in a cryptographic hash chain that proves none of it was tampered with.
|
|
@@ -252,15 +281,28 @@ db.query('FROM policy AS OF 200 VALID AS OF "2024-02-15"')
|
|
|
252
281
|
|
|
253
282
|
---
|
|
254
283
|
|
|
255
|
-
## Performance
|
|
284
|
+
## Performance
|
|
256
285
|
|
|
257
|
-
|
|
286
|
+
**v1 Python server (baseline — single-threaded AOF):**
|
|
287
|
+
|
|
288
|
+
| Operation | Throughput | p99 latency |
|
|
258
289
|
|---|---|---|
|
|
259
|
-
| PUT
|
|
260
|
-
|
|
|
261
|
-
|
|
|
262
|
-
|
|
|
263
|
-
|
|
|
290
|
+
| Sequential PUT | ~23/s | 44 ms |
|
|
291
|
+
| Concurrent PUT (16 workers) | ~92/s | 48 ms |
|
|
292
|
+
| Batch PUT (500 ops/request) | ~520 ops/s | 1.9 ms/op |
|
|
293
|
+
| Point-lookup read (NQL) | ~23/s | 44 ms |
|
|
294
|
+
| Rust napi PUT (FFI) | ~70K/s | — |
|
|
295
|
+
| Rust napi GET (FFI) | ~330K/s | — |
|
|
296
|
+
|
|
297
|
+
**v2 DAG Rust server — tokio/axum, no GIL, lock-free per-doc writes:**
|
|
298
|
+
> Benchmarks in progress — target 5,000–50,000 ops/s. Run `python3 tests/test_dag_perf.py` against your own instance.
|
|
299
|
+
|
|
300
|
+
Reproduce with the included benchmark:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
NEDBD_DAG=1 nedbd --data /tmp/perf &
|
|
304
|
+
python3 tests/test_dag_perf.py --n 10000 --reads 100000
|
|
305
|
+
```
|
|
264
306
|
|
|
265
307
|
---
|
|
266
308
|
|
|
@@ -290,16 +332,49 @@ Encryption: AES-256-GCM at-rest (TMK/DEK double-envelope)
|
|
|
290
332
|
|
|
291
333
|
---
|
|
292
334
|
|
|
335
|
+
## nedb-client — lightweight HTTP client
|
|
336
|
+
|
|
337
|
+
Connect to any running nedbd instance from Python or TypeScript without embedding the engine:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
pip install nedb-client # async Python
|
|
341
|
+
npm install nedb-client # TypeScript / Node.js 18+
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
```python
|
|
345
|
+
from nedb_client import NedbClient
|
|
346
|
+
|
|
347
|
+
async with NedbClient("http://127.0.0.1:7070", db="mydb") as db:
|
|
348
|
+
await db.put("blocks", "618000", {"height": 618000})
|
|
349
|
+
rows = await db.query("FROM blocks ORDER BY height DESC LIMIT 10")
|
|
350
|
+
head = await db.head() # BLAKE2b Merkle root — changes on every write
|
|
351
|
+
ok = await db.verify() # tamper-evidence check across all objects
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
import { NedbClient } from "nedb-client";
|
|
356
|
+
const db = new NedbClient({ url: "http://127.0.0.1:7070", db: "mydb" });
|
|
357
|
+
await db.put("blocks", "618000", { height: 618000 });
|
|
358
|
+
const rows = await db.query("FROM blocks LIMIT 10");
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
293
363
|
## Repo layout
|
|
294
364
|
|
|
295
365
|
```
|
|
296
366
|
python/nedb/ reference engine (pure Python — always-works baseline)
|
|
297
367
|
rust/
|
|
298
|
-
nedb-core/ production Rust engine (shared by both runtimes)
|
|
368
|
+
nedb-core/ v1 production Rust engine (shared by both runtimes)
|
|
299
369
|
nedb-py/ maturin PyO3 binding → PyPI native wheels
|
|
300
370
|
nedb-node/ napi-rs binding → npm native addons
|
|
301
|
-
|
|
371
|
+
nedb-v2/ v2 DAG engine (tokio + axum + BLAKE2b DAG)
|
|
372
|
+
client/
|
|
373
|
+
python/ nedb-client — async Python HTTP client (pip install nedb-client)
|
|
374
|
+
node/ nedb-client — TypeScript HTTP client (npm install nedb-client)
|
|
375
|
+
tests/ engine + concurrent + causal + bitemporal + deploy + perf benchmarks
|
|
302
376
|
examples/ resp2_python.py resp2_demo.sh
|
|
377
|
+
docs/ index.html reference.html SPEC.md
|
|
303
378
|
```
|
|
304
379
|
|
|
305
380
|
---
|
|
@@ -316,7 +391,17 @@ examples/ resp2_python.py resp2_demo.sh
|
|
|
316
391
|
- [x] SQL / Redis / MongoDB compatibility adapters
|
|
317
392
|
- [x] RESP2 wire protocol (redis-cli / redis-benchmark compatible)
|
|
318
393
|
- [x] Rust native core — napi-rs (npm) + maturin PyO3 (PyPI)
|
|
319
|
-
- [x] Self-healing
|
|
394
|
+
- [x] Self-healing AOF — auto-truncates corrupt tail on startup, never hangs
|
|
395
|
+
- [x] **v2 DAG engine** — content-addressed Merkle DAG, atomic writes, instant cold start
|
|
396
|
+
- [x] **`nedbd --dag`** — one flag switches to v2 Rust engine; v1 untouched
|
|
397
|
+
- [x] **BLAKE2b Merkle head** — tamper-evident root on every response
|
|
398
|
+
- [x] **Tombstone deletes** — history preserved in DAG, live id removed from index
|
|
399
|
+
- [x] **Auto-migration** — v1 AOF → v2 DAG on first `--dag` startup
|
|
400
|
+
- [x] **nedb-client** — async Python + TypeScript HTTP client (`pip/npm install nedb-client`)
|
|
401
|
+
- [x] **Intel Mac support** — native wheels for `aarch64` + `x86_64` Apple Darwin
|
|
402
|
+
- [ ] In-memory DAG mode — `Db::in_memory()` for zero-disk ephemeral sessions
|
|
403
|
+
- [ ] PyO3 + napi-rs bindings updated to v2 DAG API
|
|
404
|
+
- [ ] NEDB Studio DAG mode toggle
|
|
320
405
|
- [ ] Merkle inclusion proofs — prove a document existed at a specific time to a third party
|
|
321
406
|
- [ ] Git-style branching — fork database state, experiment, merge or discard
|
|
322
407
|
- [ ] Agent Memory SDK — `Memory.remember()` / `Memory.recall()` / `Memory.trace()`
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# NEDB
|
|
4
4
|
|
|
5
|
-
**Hash-chained ·
|
|
5
|
+
**Content-addressed Merkle DAG · Hash-chained · Time-traveling · Bi-temporal · Causally-provable embedded database.**
|
|
6
6
|
|
|
7
7
|
Replay-protected · idempotent · relational · filterable · sortable · searchable · concurrent.
|
|
8
8
|
One Rust core → ships to **PyPI** and **npm** from a single source.
|
|
@@ -10,6 +10,7 @@ One Rust core → ships to **PyPI** and **npm** from a single source.
|
|
|
10
10
|
[](https://pypi.org/project/nedb-engine/)
|
|
11
11
|
[](https://www.npmjs.com/package/nedb-engine)
|
|
12
12
|
[](https://github.com/Eth-Interchained/nedb/actions)
|
|
13
|
+
[](https://pypi.org/project/nedb-client/)
|
|
13
14
|
|
|
14
15
|
**[Studio → studio.interchained.org](https://studio.interchained.org)** · **[nedb.aiassist.net](https://nedb.aiassist.net)**
|
|
15
16
|
|
|
@@ -17,6 +18,34 @@ One Rust core → ships to **PyPI** and **npm** from a single source.
|
|
|
17
18
|
|
|
18
19
|
---
|
|
19
20
|
|
|
21
|
+
## v2 — The DAG Engine (new in 2.0.5)
|
|
22
|
+
|
|
23
|
+
NEDB v2 replaces the append-only log (AOF) with a **content-addressed Merkle DAG**. Every document version is an immutable, BLAKE2b-verified object. Nothing is ever overwritten.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Run the v2 DAG engine — ships inside pip install nedb-engine
|
|
27
|
+
nedbd --dag --data ./data
|
|
28
|
+
# or
|
|
29
|
+
NEDBD_DAG=1 NEDB_TMK=<32-byte-hex> nedbd --data ./data
|
|
30
|
+
|
|
31
|
+
curl http://127.0.0.1:7070/health
|
|
32
|
+
# {"ok":true,"version":"2.0.5","service":"nedbd","encrypted":true}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
| Property | v2 DAG | v1 AOF |
|
|
36
|
+
|---|:---:|:---:|
|
|
37
|
+
| Uncorruptable (atomic writes, hash-verified reads) | ✅ | ⚠️ |
|
|
38
|
+
| Instant cold start (no AOF replay) | ✅ | ❌ |
|
|
39
|
+
| Parallel writes (no global lock) | ✅ | ❌ |
|
|
40
|
+
| BLAKE2b Merkle head on every response | ✅ | ❌ |
|
|
41
|
+
| Tombstone deletes (history preserved) | ✅ | ✅ |
|
|
42
|
+
| Auto-migrates v1 AOF → v2 DAG on startup | ✅ | — |
|
|
43
|
+
| Same HTTP API — Vision, Studio, all clients unchanged | ✅ | ✅ |
|
|
44
|
+
|
|
45
|
+
**v1 AOF engine is still shipped and unchanged** — `nedbd` (no flag) runs v1.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
20
49
|
## What makes NEDB different
|
|
21
50
|
|
|
22
51
|
Every database stores *what*. NEDB stores *what*, *when*, *when it was true*, and *why* — all sealed in a cryptographic hash chain that proves none of it was tampered with.
|
|
@@ -233,15 +262,28 @@ db.query('FROM policy AS OF 200 VALID AS OF "2024-02-15"')
|
|
|
233
262
|
|
|
234
263
|
---
|
|
235
264
|
|
|
236
|
-
## Performance
|
|
265
|
+
## Performance
|
|
237
266
|
|
|
238
|
-
|
|
267
|
+
**v1 Python server (baseline — single-threaded AOF):**
|
|
268
|
+
|
|
269
|
+
| Operation | Throughput | p99 latency |
|
|
239
270
|
|---|---|---|
|
|
240
|
-
| PUT
|
|
241
|
-
|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
271
|
+
| Sequential PUT | ~23/s | 44 ms |
|
|
272
|
+
| Concurrent PUT (16 workers) | ~92/s | 48 ms |
|
|
273
|
+
| Batch PUT (500 ops/request) | ~520 ops/s | 1.9 ms/op |
|
|
274
|
+
| Point-lookup read (NQL) | ~23/s | 44 ms |
|
|
275
|
+
| Rust napi PUT (FFI) | ~70K/s | — |
|
|
276
|
+
| Rust napi GET (FFI) | ~330K/s | — |
|
|
277
|
+
|
|
278
|
+
**v2 DAG Rust server — tokio/axum, no GIL, lock-free per-doc writes:**
|
|
279
|
+
> Benchmarks in progress — target 5,000–50,000 ops/s. Run `python3 tests/test_dag_perf.py` against your own instance.
|
|
280
|
+
|
|
281
|
+
Reproduce with the included benchmark:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
NEDBD_DAG=1 nedbd --data /tmp/perf &
|
|
285
|
+
python3 tests/test_dag_perf.py --n 10000 --reads 100000
|
|
286
|
+
```
|
|
245
287
|
|
|
246
288
|
---
|
|
247
289
|
|
|
@@ -271,16 +313,49 @@ Encryption: AES-256-GCM at-rest (TMK/DEK double-envelope)
|
|
|
271
313
|
|
|
272
314
|
---
|
|
273
315
|
|
|
316
|
+
## nedb-client — lightweight HTTP client
|
|
317
|
+
|
|
318
|
+
Connect to any running nedbd instance from Python or TypeScript without embedding the engine:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
pip install nedb-client # async Python
|
|
322
|
+
npm install nedb-client # TypeScript / Node.js 18+
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
```python
|
|
326
|
+
from nedb_client import NedbClient
|
|
327
|
+
|
|
328
|
+
async with NedbClient("http://127.0.0.1:7070", db="mydb") as db:
|
|
329
|
+
await db.put("blocks", "618000", {"height": 618000})
|
|
330
|
+
rows = await db.query("FROM blocks ORDER BY height DESC LIMIT 10")
|
|
331
|
+
head = await db.head() # BLAKE2b Merkle root — changes on every write
|
|
332
|
+
ok = await db.verify() # tamper-evidence check across all objects
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
import { NedbClient } from "nedb-client";
|
|
337
|
+
const db = new NedbClient({ url: "http://127.0.0.1:7070", db: "mydb" });
|
|
338
|
+
await db.put("blocks", "618000", { height: 618000 });
|
|
339
|
+
const rows = await db.query("FROM blocks LIMIT 10");
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
274
344
|
## Repo layout
|
|
275
345
|
|
|
276
346
|
```
|
|
277
347
|
python/nedb/ reference engine (pure Python — always-works baseline)
|
|
278
348
|
rust/
|
|
279
|
-
nedb-core/ production Rust engine (shared by both runtimes)
|
|
349
|
+
nedb-core/ v1 production Rust engine (shared by both runtimes)
|
|
280
350
|
nedb-py/ maturin PyO3 binding → PyPI native wheels
|
|
281
351
|
nedb-node/ napi-rs binding → npm native addons
|
|
282
|
-
|
|
352
|
+
nedb-v2/ v2 DAG engine (tokio + axum + BLAKE2b DAG)
|
|
353
|
+
client/
|
|
354
|
+
python/ nedb-client — async Python HTTP client (pip install nedb-client)
|
|
355
|
+
node/ nedb-client — TypeScript HTTP client (npm install nedb-client)
|
|
356
|
+
tests/ engine + concurrent + causal + bitemporal + deploy + perf benchmarks
|
|
283
357
|
examples/ resp2_python.py resp2_demo.sh
|
|
358
|
+
docs/ index.html reference.html SPEC.md
|
|
284
359
|
```
|
|
285
360
|
|
|
286
361
|
---
|
|
@@ -297,7 +372,17 @@ examples/ resp2_python.py resp2_demo.sh
|
|
|
297
372
|
- [x] SQL / Redis / MongoDB compatibility adapters
|
|
298
373
|
- [x] RESP2 wire protocol (redis-cli / redis-benchmark compatible)
|
|
299
374
|
- [x] Rust native core — napi-rs (npm) + maturin PyO3 (PyPI)
|
|
300
|
-
- [x] Self-healing
|
|
375
|
+
- [x] Self-healing AOF — auto-truncates corrupt tail on startup, never hangs
|
|
376
|
+
- [x] **v2 DAG engine** — content-addressed Merkle DAG, atomic writes, instant cold start
|
|
377
|
+
- [x] **`nedbd --dag`** — one flag switches to v2 Rust engine; v1 untouched
|
|
378
|
+
- [x] **BLAKE2b Merkle head** — tamper-evident root on every response
|
|
379
|
+
- [x] **Tombstone deletes** — history preserved in DAG, live id removed from index
|
|
380
|
+
- [x] **Auto-migration** — v1 AOF → v2 DAG on first `--dag` startup
|
|
381
|
+
- [x] **nedb-client** — async Python + TypeScript HTTP client (`pip/npm install nedb-client`)
|
|
382
|
+
- [x] **Intel Mac support** — native wheels for `aarch64` + `x86_64` Apple Darwin
|
|
383
|
+
- [ ] In-memory DAG mode — `Db::in_memory()` for zero-disk ephemeral sessions
|
|
384
|
+
- [ ] PyO3 + napi-rs bindings updated to v2 DAG API
|
|
385
|
+
- [ ] NEDB Studio DAG mode toggle
|
|
301
386
|
- [ ] Merkle inclusion proofs — prove a document existed at a specific time to a third party
|
|
302
387
|
- [ ] Git-style branching — fork database state, experiment, merge or discard
|
|
303
388
|
- [ ] Agent Memory SDK — `Memory.remember()` / `Memory.recall()` / `Memory.trace()`
|
|
@@ -10,7 +10,7 @@ build-backend = "hatchling.build"
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "nedb-engine"
|
|
13
|
-
version = "2.0.
|
|
13
|
+
version = "2.0.6"
|
|
14
14
|
description = "NEDB — a versioned, self-compressing, time-traveling embedded database (replay-protected, idempotent, relational, searchable) with durable AOF persistence and a server daemon (nedbd)."
|
|
15
15
|
readme = "README.md"
|
|
16
16
|
requires-python = ">=3.8"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|