Skip to main content

Obfuscidian Logo

Obfuscidian

Tests License

Obfuscidian is a Python CLI for encrypted Obsidian vault backups. It stores individual Fernet-encrypted files and an encrypted path manifest in a separate mirror, then authenticates and restores the complete snapshot. Notes and binary attachments retain their exact bytes. The CLI is the supported public interface.

Version and supported environments

Obfuscidian 1.0.0 is the first stable release and requires Python 3.12 or newer. The tested matrix covers Linux, macOS and Windows on Python 3.12–3.14. Linux/macOS support backup and restore writes. Native Windows supports key creation, verification and read-only planning; vault mutation/recovery and existing-log append fail closed. See supported environments.

Install

Python 3.12+ is required. For use directly from Bash, zsh or PowerShell without activating an environment, pipx is recommended. With pipx installed, run in a POSIX shell:

python3.12 --version
pipx ensurepath
pipx install --python python3.12 obfuscidian

Reopen your terminal after PATH setup, then run obfuscidian --version and obfuscidian --help from any folder. pipx manages an isolated Python environment internally; you do not activate it. See installation for pipx prerequisites, PowerShell commands, pip --user installation outside a venv, local wheels and developer setup. For unattended use, follow scheduled jobs and automation.

Alternatively, install into a venv:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install obfuscidian
obfuscidian --help

python -m obfuscidian offers the same behavior when that Python interpreter contains the package; your primary Python may not contain a pipx installation.

Update to a newer stable version

Keep the CLI current to receive features, fixes and security patches. Update the installation you actually run:

Installation Update command
pipx, originally installed from PyPI pipx upgrade obfuscidian
pipx, switching a source/wheel install to PyPI pipx runpip obfuscidian install --upgrade obfuscidian
pip user install, outside a venv python3 -m pip install --user --upgrade obfuscidian
Activated venv python -m pip install --upgrade obfuscidian

Use the original installation's Python; in PowerShell a user install may use py -3.12 -m pip install --user --upgrade obfuscidian. Afterward, run obfuscidian --version in your usual shell and check the exact executable used by scheduled jobs. pipx needs no activation. A source/wheel pipx install normally retains its original source for pipx upgrade; use runpip again for subsequent PyPI updates, or follow the local-source instructions in Updating Obfuscidian.

The CLI checks PyPI for newer stable versions and displays an advisory on stderr, also recording it when an optional private operational log opens. Set OBFUSCIDIAN_SUPPRESS_UPDATE_NOTICE=true or 1 to disable the request and notice. Checks never install updates. Subscribe to repository releases through GitHub Watch → Custom → Releases and read the changelog. The notice links to update instructions. The update guide covers all installation methods, failed checks and competing PATH entries.

First backup and restore

New to command-line backups? Start with What is Obfuscidian? and the Quickstart. The beginner pages introduce keys, backup choices and restore steps one topic at a time.

Follow the complete synthetic rehearsal before using a real vault. It creates a private key outside both vaults, previews and writes a fresh backup, verifies every object, restores to a new location and compares all bytes and directories.

For existing synthetic locations and their external key:

obfuscidian shroud fresh --origin ./vault --mirror ./mirror \
  --key ./keys/obfuscidian-demo.key --non-interactive --dry-run
obfuscidian verify --mirror ./mirror --key ./keys/obfuscidian-demo.key --non-interactive
obfuscidian unshroud fresh --mirror ./mirror --origin ./restored \
  --key ./keys/obfuscidian-demo.key --non-interactive --dry-run

The mirror must exist for verify and restore. Replace --dry-run with an intended write only after review. --non-interactive never supplies replacement consent; --yes does, without bypassing validation. Pause editing and sync during writes.

Keep a separate offline key backup: key loss prevents decryption, with no recovery bypass. shroud merge retains deleted/renamed/excluded historical entries, so those notes can return on restore. Fresh replacement retains previous payloads outside the vault and Git; restore rollback contains sensitive plaintext. Verification and dry runs create no application files or logs. Git merge restore creates a separate review branch/worktree with differences left uncommitted; Obfuscidian never stages, commits, merges or pushes them.

Documentation

Build the local Sphinx/reST/MyST site with the PyData theme (dark by default, with a reader-selectable light mode):

poetry install --with dev,docs
poetry run sphinx-build -W --keep-going -E -a -b html docs docs/_build/html
poetry run python .github/scripts/check_docs.py docs/_build/html

Open docs/_build/html/index.html. See documentation maintenance for tutorial tests, rendered/accessibility review and optional external link checks. This build does not publish or configure hosting.

Development

Use Poetry 2.2 or newer, below 3.0. Runtime dependencies have one authoritative list in pyproject.toml; poetry.lock records developer and optional docs tools. The normal pytest suite is offline and uses only synthetic temporary fixtures.

poetry install --with dev
poetry check --lock --strict
poetry run ruff check .
poetry run ruff format --check .
poetry run pytest -q
poetry run bandit -r src/obfuscidian
poetry build

Read AGENTS.md and CONTRIBUTING.md before changing code. Keep work within the requested task and leave changes reviewable. Git history and publication actions require separate maintainer authorization. The project is licensed under Apache-2.0.


This utility is considered unofficial and is in no way endorsed or supported by Obsidian.

Metadata

Release files for obfuscidian 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for obfuscidian 1.0.0
File Size Uploaded
obfuscidian-1.0.0.tar.gz 168.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for obfuscidian 1.0.0
File Interpreter ABI Platform
obfuscidian-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 254.1 kB

Release files / obfuscidian-1.0.0.tar.gz

Download URL obfuscidian-1.0.0.tar.gz
Size 168.1 kB
Tags Source
SHA-256 checksum
How to use checksums
8feec4b38887ba1f94c01ccd946881cd0479efab4159c3cbd051db413d3022e0
BLAKE2b-256 checksum
How to use checksums
e098adc3bef05ff7b5bee81c92fbf6afe8edce0adb94fcd48b03f962f8d75111
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / obfuscidian-1.0.0-py3-none-any.whl

Download URL obfuscidian-1.0.0-py3-none-any.whl
Size 86.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5adfc8f475a05fac54a264cfa555d7cc67cda9f9d358001ff7392ad879668e32
BLAKE2b-256 checksum
How to use checksums
a178e6c7bb9c33d379a209806474c39a9e7eae55429954335763ccb8e4ff9606
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page