Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

json_database

Searchable, persistent Python dict database backed by JSON files — for those times when SQL is overkill.

Unit Tests codecov PyPI PyPI - Python Version License: MIT

Install

pip install json_database

Encryption features additionally require pycryptodomex:

pip install json_database pycryptodomex

Quick Start

from json_database import JsonStorage, JsonDatabase
from json_database.search import Query

# Persistent dict
with JsonStorage("/tmp/config.json") as cfg:
    cfg["host"] = "localhost"
    cfg["port"] = 5432
# auto-saved on exit

# Searchable list-of-records
with JsonDatabase("users", "/tmp/users.jsondb") as db:
    db.add_item({"name": "Alice", "role": "admin"})
    db.add_item({"name": "Bob",   "role": "user"})

admins = db.search_by_value("role", "admin")

# Fluent query builder
results = Query(db).equal("role", "user").build()

Features

  • Pure Python, minimal dependencies (combo_lock only)
  • Persistent dict (JsonStorage) and list-of-records database (JsonDatabase)
  • Recursive search by key and key/value pair, with optional fuzzy matching
  • Fluent Query builder for multi-condition filtering
  • AES-256-GCM encryption at rest (EncryptedJsonStorage)
  • XDG Base Directory compliant variants for Linux applications
  • File locking via combo_lock for safe concurrent access
  • Supports commented JSON files (// and # line comments)
  • Arbitrary Python objects stored via automatic jsonify_recursively conversion

Configuration / Key Options

Class Default path Use for
JsonStorage(path) user-specified any persistent dict
JsonStorageXDG(name) ~/.cache/json_database/{name}.json cache / temp data
JsonConfigXDG(name) ~/.config/json_database/{name}.json app settings
JsonDatabaseXDG(name) ~/.local/share/json_database/{name}.jsondb persistent records
EncryptedJsonStorage(key, path) user-specified sensitive data at rest

Note: Item IDs in JsonDatabase are stable list indices. add_item and append return the zero-based slot index of the new item. Removing an item tombstones its slot rather than shifting subsequent IDs, so an ID obtained from add_item or get_item_id remains valid for the lifetime of the database file. Tombstoned slots are invisible to iteration, search, __contains__, and __len__; accessing one via db[item_id] raises InvalidItemID.

Warning: Encryption keys longer than 16 bytes are silently truncated to 16 bytes. Always use exactly 16 bytes.

Documentation

HiveMind Integration

The HiveMind database-plugin adapter that used to ship as json_database.hpm:JsonDB has been extracted into its own package, hivemind-json-db-plugin, so it can release on a HiveMind-aligned cadence and json_database doesn't pull in hivemind-plugin-manager for users who don't need it.

For the 1.x line, pip install json_database[hpm] continues to work — it now transitively installs hivemind-json-db-plugin so the hivemind.database entry point remains available without code changes. The [hpm] extra will be removed in 2.0.0; users should migrate to pip install hivemind-json-db-plugin directly.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

json_database-1.0.4a1.tar.gz (47.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

json_database-1.0.4a1-py3-none-any.whl (19.0 kB view details)

Uploaded Python 3

File details

Details for the file json_database-1.0.4a1.tar.gz.

File metadata

  • Download URL: json_database-1.0.4a1.tar.gz
  • Upload date:
  • Size: 47.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for json_database-1.0.4a1.tar.gz
Algorithm Hash digest
SHA256 c9f3e0e1bd24beb059d07ceeadb5d67b99cfb09301293138f3c0c7c23eac4a78
MD5 9ae7da443f932434bb563f42baee4ae5
BLAKE2b-256 74bda60e7f9cf9016ad7d723f865eb1eb160877ccd3ac232aab2dfd91e0e6d2a

See more details on using hashes here.

File details

Details for the file json_database-1.0.4a1-py3-none-any.whl.

File metadata

File hashes

Hashes for json_database-1.0.4a1-py3-none-any.whl
Algorithm Hash digest
SHA256 8c73f4f3835b165d5ddef5b2cc61bb5b60d65a2ebe281682e6aaf88e8bac7f5c
MD5 56eb5adfc02b2edfedd2730dca192162
BLAKE2b-256 690925798245edd1e6b06bebbed42f3a9c34fce109b9f53c8e00fea4399678f3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.4a1 This release

2 files

0.10.1

2 files

0.10.0

2 files

0.9.1

2 files

0.9.0

2 files

0.8.1

2 files

0.7.0

1 file

0.6.0

1 file

0.5.6

1 file

0.5.5

1 file

0.5.4

1 file

0.5.3

1 file

0.5.2

1 file

0.5.1

1 file

0.5.0

1 file

0.4.1

1 file

0.4.0

1 file

0.3.0

1 file

0.2.8

1 file

0.2.7

1 file

0.2.6

1 file

0.2.5

1 file

0.2.4

1 file

0.2.3

1 file

0.2.2

1 file

0.2.1

1 file

0.2.0

1 file

0.1.3

1 file

0.1.2

1 file

0.1.1

1 file

0.1.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page