Umbrella uv monorepo environment for local development across:
This repo only tracks the monorepo root files. Each package stays in its own Git repository and is cloned inside the root checkout.
The root checkout is a uv project with editable path dependencies on all five
packages. Its generated local uv.lock and .venv provide one consistent
development environment, while each nested repo remains an independent uv
project whose committed uv.lock is authoritative for CI and release. The root
lock is intentionally ignored because independently released versions change
continuously.
git clone https://github.com/ArchiveBox/monorepo.git
cd monorepo
./bin/setup.sh
bin/setup.sh clones missing member repos, tries to fast-forward existing checkouts with git pull --ff-only while ignoring pull failures caused by local repo state, refreshes bin/setup_monorepo.sh hardlinks inside each member repo so they always match the root script, creates the root .venv, uses abxpkg to project required host build tools into .venv/abxpkg/env/bin, and then syncs the editable packages into the shared monorepo env.
uv sync --all-extras --all-groups --no-cache --active
Each member repo also gets a bin/setup_monorepo.sh hardlink back to the root script. When run from inside a member checkout, it bootstraps ../ into a real ArchiveBox/monorepo git checkout first, then continues with the normal sibling repo setup.
git clone https://github.com/ArchiveBox/abxbus
cd abxbus
./bin/setup_monorepo.sh
uv for everything. Do not use pip or raw python3 ... directly.uv run python ....py_compile for syntax checks. Use uv run prek run --all-files.prek is the main sweep command. It runs the repo checks together, including tools like Ruff, Ty, Pyright, Prettier, and related hooks.uv run pytest -xs ... and keep -x failfast on by default so you do not sit through long suites after the first real regression.uv run pytest -xs abx-dl/tests/test_cli.py::test_download.abxbus/abxbus-ts is a TypeScript implementation. Use pnpm inside that folder, never npm.archivebox develops on dev.abxbus, abxpkg, abx-plugins, and abx-dl develop on main.Push a versioned change only to the repository you are working in. Its normal CI
publishes the exact tested release and then calls the central release coordinator
in this monorepo. The coordinator discovers the immediate dependent from
.github/release-graph.toml, updates and version-bumps that repository once, and
lets its ordinary push CI continue the chain.
Do not manually push, dispatch, or prepare downstream repositories. Package repositories know only their own release identity; the monorepo exclusively owns dependency order and downstream repository names.
abx-plugins, abx-dl, and archivebox share ~/.config/abx and the active XDG cache directory for dynamic runtime dependencies, cached/derived env config, temp files, sockets, and related runtime state.abxbusabx-dl, archivebox.abxbus/; the TypeScript implementation lives in abxbus/abxbus-ts.abxpkgabx-plugins, abx-dl, archivebox.abxpkg for package management, binary discovery, version checks, and installation flows instead of shutil.which, ad hoc shell probes, or direct subprocess.call(...) commands.abx-pluginsabxpkg.abx-dl, archivebox.abx-dl, archivebox, or any app-specific runtime knowledge.plugins/base/utils.*.abx-plugins/pyproject.toml and do not create a root package.json. Plugin runtime dependencies belong in plugins/<pluginname>/config.json under required_binaries, and are installed at runtime via abxpkg.abx-dlabxbus, abxpkg, abx-plugins.archivebox.abx-dl must not know about archivebox, specific plugins, or individual plugin resources. It should orchestrate plugin execution through stable generic interfaces only.archiveboxabxbus, abxpkg, abx-plugins, abx-dl.archivebox uses abx-dl to install plugin binaries, run snapshot downloads, and handle plugin-facing runtime work.archivebox should never know about individual plugins or their resources such as Chrome, and it should not re-implement functionality that already belongs in abx-dl.archivebox listens to the abx-dl event stream, projects events into its database, and injects events back to steer abx-dl. abx-dl owns the actual orchestration runtime for snapshot execution and installs.89 commits
Python
50.8%
JavaScript
18.9%
CSS
11.9%
Shell
11.0%
HTML
7.4%
Umbrella uv monorepo environment for local development across:
This repo only tracks the monorepo root files. Each package stays in its own Git repository and is cloned inside the root checkout.
The root checkout is a uv project with editable path dependencies on all five
packages. Its generated local uv.lock and .venv provide one consistent
development environment, while each nested repo remains an independent uv
project whose committed uv.lock is authoritative for CI and release. The root
lock is intentionally ignored because independently released versions change
continuously.
git clone https://github.com/ArchiveBox/monorepo.git
cd monorepo
./bin/setup.sh
bin/setup.sh clones missing member repos, tries to fast-forward existing checkouts with git pull --ff-only while ignoring pull failures caused by local repo state, refreshes bin/setup_monorepo.sh hardlinks inside each member repo so they always match the root script, creates the root .venv, uses abxpkg to project required host build tools into .venv/abxpkg/env/bin, and then syncs the editable packages into the shared monorepo env.
uv sync --all-extras --all-groups --no-cache --active
Each member repo also gets a bin/setup_monorepo.sh hardlink back to the root script. When run from inside a member checkout, it bootstraps ../ into a real ArchiveBox/monorepo git checkout first, then continues with the normal sibling repo setup.
git clone https://github.com/ArchiveBox/abxbus
cd abxbus
./bin/setup_monorepo.sh
uv for everything. Do not use pip or raw python3 ... directly.uv run python ....py_compile for syntax checks. Use uv run prek run --all-files.prek is the main sweep command. It runs the repo checks together, including tools like Ruff, Ty, Pyright, Prettier, and related hooks.uv run pytest -xs ... and keep -x failfast on by default so you do not sit through long suites after the first real regression.uv run pytest -xs abx-dl/tests/test_cli.py::test_download.abxbus/abxbus-ts is a TypeScript implementation. Use pnpm inside that folder, never npm.archivebox develops on dev.abxbus, abxpkg, abx-plugins, and abx-dl develop on main.Push a versioned change only to the repository you are working in. Its normal CI
publishes the exact tested release and then calls the central release coordinator
in this monorepo. The coordinator discovers the immediate dependent from
.github/release-graph.toml, updates and version-bumps that repository once, and
lets its ordinary push CI continue the chain.
Do not manually push, dispatch, or prepare downstream repositories. Package repositories know only their own release identity; the monorepo exclusively owns dependency order and downstream repository names.
abx-plugins, abx-dl, and archivebox share ~/.config/abx and the active XDG cache directory for dynamic runtime dependencies, cached/derived env config, temp files, sockets, and related runtime state.abxbusabx-dl, archivebox.abxbus/; the TypeScript implementation lives in abxbus/abxbus-ts.abxpkgabx-plugins, abx-dl, archivebox.abxpkg for package management, binary discovery, version checks, and installation flows instead of shutil.which, ad hoc shell probes, or direct subprocess.call(...) commands.abx-pluginsabxpkg.abx-dl, archivebox.abx-dl, archivebox, or any app-specific runtime knowledge.plugins/base/utils.*.abx-plugins/pyproject.toml and do not create a root package.json. Plugin runtime dependencies belong in plugins/<pluginname>/config.json under required_binaries, and are installed at runtime via abxpkg.abx-dlabxbus, abxpkg, abx-plugins.archivebox.abx-dl must not know about archivebox, specific plugins, or individual plugin resources. It should orchestrate plugin execution through stable generic interfaces only.archiveboxabxbus, abxpkg, abx-plugins, abx-dl.archivebox uses abx-dl to install plugin binaries, run snapshot downloads, and handle plugin-facing runtime work.archivebox should never know about individual plugins or their resources such as Chrome, and it should not re-implement functionality that already belongs in abx-dl.archivebox listens to the abx-dl event stream, projects events into its database, and injects events back to steer abx-dl. abx-dl owns the actual orchestration runtime for snapshot execution and installs.89 commits
Python
50.8%
JavaScript
18.9%
CSS
11.9%
Shell
11.0%
HTML
7.4%