Skip to content

SocIt2Em/syncignore

SyncIgnore

Python 3.11+ License: MIT Sponsor Ko-fi

SyncIgnore is a Python CLI for keeping cloud-synced projects fast. It moves large generated directories, such as node_modules, .venv, target, build output, and media caches, into a local scratch area and leaves symlinks where tools expect those directories to be.

The result is simple: source files and project files keep syncing, while disposable machine-local artefacts stay off OneDrive, Google Drive, iCloud Drive, Dropbox, network home drives, and similar services.

Status

Release version: 0.6.5

This release is focused on proving and stabilising the Python CLI. A web UI is on the roadmap; Streamlit is a likely candidate, but the interface choice is still being evaluated.

Support The Project

SyncIgnore has taken a lot of careful work to make filesystem changes feel predictable, reversible, and useful for real cloud-synced workspaces. If it saves you time, bandwidth, storage, or support headaches, please consider supporting the project through GitHub Sponsors or Ko-fi.

Small open-source contributions are often around $5, $10, or $20, but any amount is appreciated. Every little bit helps keep the project moving.

Install

For local development from this repository:

uv sync --all-extras
uv run syncignore --help

When installed as a published package:

uv tool install syncignore
syncignore --help

Other Python installers such as pipx or pip may also work once the package is published:

pipx install syncignore
pip install syncignore

Quick Start

Run a dry run before allowing SyncIgnore to move files:

cd your-project

syncignore init . --detect
syncignore process . --dry-run
syncignore process .
syncignore project info .
syncignore project list

init and process are callback-style commands. Use syncignore init . and syncignore process .; there is no init run or process run subcommand.

Common Commands

syncignore --help
syncignore --version
syncignore --explain

syncignore init . --detect
syncignore init . --project-type python
syncignore init --list-templates
syncignore init --template-info nodejs

syncignore process . --dry-run
syncignore process . --reverse
syncignore process --all
syncignore process validate
syncignore process status

syncignore project detect .
syncignore project list --grouped
syncignore project info .
syncignore project health

syncignore config show
syncignore config set scratch_dir=~/.syncignore/scratches --global
syncignore config validate

syncignore service status
syncignore template list
syncignore telemetry status

Most command groups support the global --json option for automation. Telemetry has command-specific JSON support for telemetry status --json and telemetry metrics --json.

Project Types

Built-in detection and templates cover:

Type Common generated artefacts
Node.js node_modules, dist, .next, cache folders
Python .venv, venv, __pycache__, .pytest_cache, build output
Rust target
Unity Library, Temp, obj, build output
CMake build directories and generated CMake files
Blender render, cache, and temporary output
DaVinci Resolve cache, render, proxy, and optimised media folders
Zephyr RTOS build and generated output
Generic user-defined patterns

Safety Model

SyncIgnore is designed to be conservative with filesystem changes:

  • --dry-run previews planned operations.
  • Processing validates paths before mutation.
  • Backups are enabled by default.
  • Reverse processing can restore symlinked directories where supported.
  • Platform-specific symlink behaviour is handled separately for POSIX/macOS/Linux and Windows.

Do not run real processing against important projects until the dry run output matches what you expect.

Configuration

Current default locations:

Data Location
User config ~/.syncignore/config.toml
Project config <project>/.syncignore.toml
Project registry ~/.syncignore/projects.json
Scratch storage ~/.syncignore/scratches
Telemetry config ~/.config/syncignore/telemetry-config.json

Configuration is resolved in this order: CLI arguments, SYNCIGNORE_ environment variables, project config, user config, defaults.

Localised Help

English CLI help is complete. Partial localised command help exists for Spanish, Chinese, Maori, Hindi, Pitjantjatjara, Wiradjuri, and Kriol, with English fallback when a help file is missing.

Runtime language detection currently reads LC_ALL and LANG. It does not currently read SYNCIGNORE_LANG.

GitHub documentation is maintained in English for now. The codebase does not require release docs to be translated into every CLI help language.

Documentation

Release documentation lives in _docs/:

Private planning notes under _my_docs/ are intentionally ignored and are not release documentation.

Development

uv sync --all-extras
uv run pytest
uv run ruff check src tests
uv run ruff format src tests
uv run mypy src
uv build

See CONTRIBUTING.md for contribution guidelines.

Licence

SyncIgnore is released under the MIT Licence. See LICENSE.

About

Cloud sync ignore files and folders. Free open-source cross-platform Python CLI to skip build folders, dependencies, media caches, local caches, and generated files. Cloud-Provider independent. Set-and-forget speed for developers, schools, and creative teams. ☁️ src ✓ | cache ↪ local

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors