Skip to main content

Add your description here

Project description

boxyard

A CLI tool for managing and syncing folders ("boxes") across local and remote storage using rclone. Track metadata, organize boxes into groups, and keep everything in sync with conflict detection.

Install

pip install boxyard
# or
uv pip install boxyard

Requires rclone to be installed and configured.

Quick start

# Initialize boxyard (creates config and data directories)
boxyard init

# Create a new box from an existing folder
boxyard new ~/projects/my-project

# Sync a box to remote storage
boxyard sync my-project

# Check sync status
boxyard yard-status

# List all boxes
boxyard list

What it does

Boxyard manages folders (called "boxes") that you want to keep synced between your local machine and remote storage (S3, SFTP, or any rclone-supported backend).

Each box has:

  • Data (data/) - the actual folder contents
  • Metadata (boxmeta.toml) - name, groups, storage location, creation info
  • Config (conf/) - optional per-box configuration that controls how data is synced
  • Sync records - track what's been synced and when, enabling conflict detection

The conf/ folder

Each box can optionally have a conf/ folder containing rclone filter files that customize which files are included or excluded when syncing the box's data:

  • .rclone_include - only sync files matching these patterns
  • .rclone_exclude - skip files matching these patterns (if absent, the global default exclude list is used)
  • .rclone_filters - combined include/exclude filter rules

During sync, the conf/ folder is synced before the data, ensuring filter rules are up-to-date before they're applied. This means filter rules travel with the box across remotes -- if you want a box to always exclude .venv/ or only include *.csv, put that in its conf/ folder and it will apply everywhere the box is synced.

Boxes are identified by a unique ID ({timestamp}_{subid}, e.g. 20251122_143022_a7kx9) and organized into groups via symlinks.

Commands

Command Description
init Initialize boxyard config and data directories
new Create a new box from a folder
sync Sync a box with remote storage
multi-sync Sync multiple boxes concurrently
list List all boxes
box-status Show sync status of a box
yard-status Show sync status of all boxes
include Include a remote box in the local store
exclude Exclude a box from the local store (keeps remote)
delete Delete a box locally and/or remotely
rename Rename a box locally, remotely, or both
copy Copy a remote box to a local path without including it
force-push Force push a local folder to a box's remote
add-to-group Add a box to a group
remove-from-group Remove a box from a group
path Get the local path of a box
which Identify which box a path belongs to

Configuration

Config file: ~/.config/boxyard/config.toml

default_storage_location = "my-remote"
boxyard_data_path = "~/.boxyard"
user_boxes_path = "~/boxes"
user_box_groups_path = "~/box-groups"

[storage_locations.my-remote]
storage_type = "rclone"
store_path = "boxyard"

Storage locations are defined as rclone remotes. Boxyard uses its own rclone config at ~/.config/boxyard/boxyard_rclone.conf.

Directory layout

~/.config/boxyard/
    config.toml              # Main config
    boxyard_rclone.conf      # rclone config for remotes

~/.boxyard/
    local_store/{remote}/    # Local copies of box data
    sync_records/            # Per-box sync state
    locks/                   # File locks for concurrent operations

~/boxes/                     # Symlinks to box data folders
~/box-groups/                # Group symlinks (e.g. ~/box-groups/work/my-project)

Development

Boxyard uses nblite for notebook-first development. Source files in src/boxyard/ are autogenerated -- edit the .pct.py files in pts/ instead.

uv sync                  # Install dependencies
nbl export --reverse     # Sync pts -> nbs (after editing .pct.py files)
nbl export               # Export nbs -> src/boxyard/
pytest src/tests/        # Run tests

License

MIT

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

boxyard-0.2.1.tar.gz (54.2 kB view details)

Uploaded Source

Built Distribution

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

boxyard-0.2.1-py3-none-any.whl (70.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for boxyard-0.2.1.tar.gz
Algorithm Hash digest
SHA256 f29454848427267e8f32016ccbf625256f1349595f08187b79729fb5fff4f298
MD5 0d79d3d4e5759460a529d49bbe2efb70
BLAKE2b-256 c75e6ef22241fc01b97c44478408519cba0139737b70b642a9e8ded6b4980dc0

See more details on using hashes here.

Provenance

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

Publisher: release.yml on lukastk/boxyard

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

File details

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

File metadata

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

File hashes

Hashes for boxyard-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 01d82cd6d553c45f5cd0b60042e83c5b1abfcda89a5de464b02374217d8787be
MD5 878e6d75b7e6297d49150ed2e28019a0
BLAKE2b-256 0448a343e6ac648354a0842f06d0f35e47c1ebd091dedba62ecf3c93b7fb37bc

See more details on using hashes here.

Provenance

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

Publisher: release.yml on lukastk/boxyard

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