Metadata-Version: 2.5
Name: dikolab-horde-common
Version: 0.0.1
Summary: The shared implementation layer under horde, its plugins, and the protocol library.
Project-URL: Homepage, https://diko316.gitlab.io/dikolab-horde/
Project-URL: Documentation, https://diko316.gitlab.io/dikolab-horde/
Project-URL: Funding, https://paypal.me/dikolab
Author-email: Diko TechSlave <diko316@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: dotenv,horde,monorepo,plugin,semver,toml
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: tomlkit>=0.13
Description-Content-Type: text/markdown

# dikolab-horde-common

The shared implementation layer under horde, its plugins, and the protocol
library. It is the **base of the workspace**: it depends on no other package
there, so anything above it may reuse what it provides without pulling a graph in
behind it. It covers TOML documents that survive a round trip, the fields horde
owns in a package file, semver arithmetic, and `.env` parsing. Most plugin
authors want `dikolab-horde-sdk` instead, which is built on this and covers the
common cases; reach here when it does not.

> **Status: alpha.** `0.0.1` ships the TOML document model, the package-file
> readers, semver, `.env` parsing, and distribution versions. The interfaces may
> still move.

## Getting started

```sh
pip install dikolab-horde-common
```

Python 3.11 or newer. One dependency, `tomlkit`.

Editing a manifest without losing its comments, key order, or formatting — every
manifest horde touches belongs to somebody, so the round trip has to give the
file back the way it was found:

```python
import dikolab_horde_common_shared as common

document = common.read_document(root / "pyproject.toml")
common.write_path(document, ["project", "version"], "1.2.4")
(root / "pyproject.toml").write_text(common.dumps(document))
```

`read_document` returns an empty document for a file that is not there, so
"create or update" is one path rather than two.

## More reading

Full documentation, guides, and the plugin authoring manual:
https://diko316.gitlab.io/dikolab-horde/

## Support

If horde saves you time, you can support its development:
https://paypal.me/dikolab

---

© 2025–2026 dikolab. Released under the MIT License.
