Holder for Python
Holder is an open-source, local-first knowledge app for organising your ideas and digital information as index cards and the connections between them.
Use Python to read and update the projects and cards in your running Holder installation. Changes you make in a script appear in Holder too.
Get started
-
You need the Holder application on your computer. Get it from https://www.holder.team/
-
You need Python 3.11 or newer. If in doubt, get the latest version (i.e. 3.15) from: https://www.python.org/downloads/
-
Install the Holder Python library with:
python3 -m pip install holder-python
Save this as list_cards.py and run it with python3 list_cards.py:
from holder import Holder
with Holder() as holder:
for project in holder.projects:
print(project.name)
for card in project.cards:
print(" ", card.title)
Holder() finds or starts your local Holder daemon using holderctl. The
with block closes the Python connection when the script ends; it does not
stop Holder.
Create and edit cards
This example creates a project and two cards. Run it once: each run creates
another project named Research.
from holder import Holder
with Holder() as holder:
project = holder.projects.create(name="Research")
card = project.cards.create(title="An idea", content="My notes")
child = card.children.create(title="Next step")
child.update(content="Try it out")
card.tags.add("research")
To work with an existing project, find it by name and get a card by its ID:
from holder import Holder
with Holder() as holder:
matches = holder.projects.filter(name="Research")
project = matches[0]
for card in project.cards:
print(card.id, card.title)
# Replace this with an ID printed above.
card = project.cards.get("card-id-here")
card.update(title="A better title")
The name filter matches part of a name. If there are no matches, [0] raises
IndexError. Card content is available as card.content; use card.update(...)
to save edits. Card attributes cannot be assigned directly.
Find cards
Search within a project and inspect the matching text:
from holder import Holder
with Holder() as holder:
project = holder.projects.filter(name="Research")[0]
for result in project.cards.search("research notes"):
print(result.title, result.snippet)
You can also list cards with a tag using
project.cards.filter(tag="research"), or list just top-level cards with
project.cards.roots().
More help
- More scripting tasks: moves, Trash, tags, collection refreshes, and connecting to a specific daemon.
- Low-level client: direct access to HTTP endpoints.
- Development: tests, builds, and generated code.
- Publishing: PyPI setup and release steps.
For offline analysis and bulk work without a running Holder installation, see Holder Kit.
Metadata
Release files for holder-python 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| holder_python-0.2.5.tar.gz | 123.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| holder_python-0.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 510.5 kB
Release files / holder_python-0.2.5.tar.gz
| Download URL | holder_python-0.2.5.tar.gz |
|---|---|
| Size | 123.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4d23bb35d2ca53df553c34b71c9b66055a7a62664a51787266abdc655cc5852c
|
|
BLAKE2b-256 checksum How to use checksums |
67a8e633e1f8d0e48bbf323066a7d87fac004444bedb995d596e9d084fd23f38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logRelease files / holder_python-0.2.5-py3-none-any.whl
| Download URL | holder_python-0.2.5-py3-none-any.whl |
|---|---|
| Size | 386.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
27da2e4d9d8dfa46f44d97f3f8e7441184b97bdce088b11e0a60086e163add27
|
|
BLAKE2b-256 checksum How to use checksums |
65e6557a637aa9da3d30d116cc4e2b7a5d7872322b4883046d1e3d193ebf802f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logSecurity for holder-python 0.2.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for holder_python-0.2.5.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.