Skip to main content

a version control system with semantic awareness built-in undo and interactive shell

Project description

oxidize

a content-addressable, semantic-aware version control system -- built from scratch in a weekend, kept (painfully) honest since.

ci pypi python size

install

pip install pyoxidize                       # core
pip install "pyoxidize[semantic]"           # tree-sitter AST diffs
pip install "pyoxidize[notebook]"           # jupyter integration
pip install "pyoxidize[dev]"                # pytest, mypy, ruff

optional extras add tree-sitter, nbformat, etc. core itself pulls in only click, rich, prompt_toolkit, deepmerge, pathspec -- no native bindings, no large free-threaded runtime.

why not just use git?

need git oxidize
commit / branch / merge
real structured merge for json/yaml/toml/inipath ❌ (line-level)
cell-level notebook diffs
AST-aware diffs (function renames) ✅ (opt-in via the semantic extra)
secret scanning before commit ❌ (out-of-tree tooling) ✅ 21 patterns
ai-agent provenance per commit oxidize log --agent ...
interactive REPL with status bar
safe undo of every operation
local-self-contained footprint ⚠ git + curl + ssh ✅ one pip package
LFS over network ⏳ (filesystem remote only)

oxidize is not a git replacement for big teams or monorepos. it's a focused, single-binary, Python-venv-friendly alternative for personal and small-team projects where the semantic and provenance extras matter more than SSH-authenticated push.

feature status

feature status since
content-addressable store, blob/tree/commit stable v0.1.0
recursive-tree directories stable v0.1.0
.oxignore with full .gitignore syntax stable v0.1.0
secret scanner (23 patterns) stable v0.1.0
structured data merge stable v0.1.0
notebook cell-level diff stable v0.1.0
interactive REPL (oxi) stable v0.1.0
safe undo (journaled) stable v0.1.0
branches / tags / checkout / 3-way merge stable v0.1.0
conflict resolution UI (oxidize resolve) stable v0.1.0
ai-agent provenance + filtering stable v0.1.0
ai-agent detection env-var coverage stable v0.1.0
stash beta v0.1.0
bisect beta v0.1.0
hooks (pre-commit, etc) beta v0.1.0
blame (line-level) beta v0.1.0
remote sync (filesystem only) beta v0.1.0
semantic diffs (AST-aware, tree-sitter) alpha v0.2.1
ai-agent prose locking + qa (planning) --
network remotes (http, ssh) not yet --
LFS-style large-file extension not yet --
submodule support not yet --

quick start

oxidize init                            # create .oxidize/ and a starter .oxignore
oxi add main.py                         # stage a single file (or use the alias)
oxi add .                               # stage everything (respects .oxignore)
oxi add -f .env.local                   # force-add an ignored file
oxi status                              # working tree vs index vs HEAD
oxi commit -m "first commit" --agent claude-code
oxi branch create feature               # branch off HEAD
oxi checkout feature                    # switch branches
oxi merge main                          # three-way merge
oxidize remote push file:///backup main # filesystem remote
oxi bisect start v1.0 broken            # binary-search regressions
oxi                                     # drop into the interactive REPL

the REPL

oxi> status
On branch main
  staged:
    hello.py
  modified:
    README.md
    (main) main | staged:1 | HEAD:9ecfb22c | Ctrl-D exit | help for commands

launching oxi with no args opens a prompt_toolkit REPL with tab completion, history (~/.oxidize_history), and a live status bar showing the current branch, staged count, and short HEAD. every command above also works inside it.

features (the headline ones)

  • content-addressable object store -- SHA-256, zlib-compressed, deduplicated
  • recursive tree objects -- proper nested directory tracking
  • interactive REPL -- oxi launches a shell with tab completion, live status bar, command history
  • secret scanning -- detects 21 types of API keys, tokens, and credentials before commit
  • structured data merge -- JSON/YAML/TOML merge at the key level, not text lines
  • notebook-aware versioning -- cell-level diffs for .ipynb files
  • AI agent provenance -- track which agent/tool wrote what code
  • built-in undo -- every operation is safely reversible
  • branches, tags, checkout, merge, resolve -- full VCS primitives
  • stash / bisect / hooks -- everyday workflow commands
  • filesystem remote sync -- bare-repo clone/push/pull (network protocols coming)
  • semantic diffs (alpha) -- AST-aware diffs via the semantic extra

docs

how it works

every file you add gets hashed using SHA-256 and stored as a blob inside .oxidize/objects/

a commit is just:

  • a snapshot of the file tree (with proper subtrees for nested dirs)
  • metadata (author, timestamp, agent provenance)
  • a pointer to the previous commit(s)
files -> blobs -> tree -> commit -> commit -> commit
                                     ^
                                    HEAD

structure

oxidize/
  objects/       blob tree commit types and serialization
  storage/       content-addressable object store
  index/         staging area
  core/          repo context refs config ignores
  diff/          myers diff engine
  merge/         structured + text merge
  notebook/      ipynb cell-level support
  semantic/      ast-aware diffs via tree-sitter
  security/      secret scanning
  provenance/    ai agent tracking
  undo/          operation journal and reversal
  workflow/      stash, bisect, hooks, blame
  network/       filesystem remote sync
  staging/       stash
  cli/           click commands and prompt_toolkit repl

contributing

see docs/CONTRIBUTING.md

license

MIT

~ written by a guy who discovered hashing yesterday

Project details


Download files

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

Source Distribution

pyoxidize-0.2.1.tar.gz (54.3 kB view details)

Uploaded Source

Built Distribution

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

pyoxidize-0.2.1-py3-none-any.whl (61.7 kB view details)

Uploaded Python 3

File details

Details for the file pyoxidize-0.2.1.tar.gz.

File metadata

  • Download URL: pyoxidize-0.2.1.tar.gz
  • Upload date:
  • Size: 54.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyoxidize-0.2.1.tar.gz
Algorithm Hash digest
SHA256 380c6db2bb2848863260b2f68a047cf35b40238a41bd8da4499b4c2a25438290
MD5 35940ca4a9f0641a5741fbac99048ec7
BLAKE2b-256 5a0d28b00ec37f1b2fe0ac245dee8be45ad2af3f55aea5defd99f76c2c8acd0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoxidize-0.2.1.tar.gz:

Publisher: pypi.yml on siddhant-bayas/oxidize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoxidize-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pyoxidize-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 61.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyoxidize-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3a64522f2310446e6f54475c1398d4812f262471932d14c0413b676cb957d389
MD5 fe8f7f90c9c42ea733ef0de53beea49d
BLAKE2b-256 a394a9555bc5913202eabe5bf666d7766e00b3246ee82c2f7e27bc7c6aa00d57

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoxidize-0.2.1-py3-none-any.whl:

Publisher: pypi.yml on siddhant-bayas/oxidize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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