Skip to main content

For git and shiggles. A simple content-addressed VCS.

Project description

Shiggles

Shiggles is a small command-line version control tool for people who want named saves, a simple history, and team sync without learning git.

It is designed for artists, designers, and small teams working on a shared project folder. You snapshot work with plain messages, switch context with tabs, and push or pull from a shared folder or HTTP URL.

License: NWSL

Repository: github.com/drLemis/shiggles

Features

  • Watches a project folder and stores content-addressed snapshots on save.
  • Named saves with author and time on each tab.
  • Tabs for parallel work (main plus side piles like hotfix).
  • bring lands your current tab into another tab (usually main).
  • upload and download sync the current tab via shared folder or HTTP URL.
  • Hard-stop collisions: conflicting files are parked in .shig/collisions/ with next-step help.
  • load restores an older save and makes it current.
  • undo discards unsaved edits and reloads the last save.
  • timeline append-only log of operations (including remote history after sync).
  • Stdlib only. No git dependency.

How It Works

When you run shig start, Shiggles creates a .shig/ folder next to your project files. Each shig save "message" stores a snapshot of tracked files on the current tab.

Tabs keep separate histories. main is the default shared line. shig tab foobar forks from your current tab and switches you to a side pile.

Team sync copies commit objects, tab refs, tab metadata, and timeline.log to a remote. After download, files and history match what was uploaded from the other machine.

Requirements

  • Python 3.9 or newer
  • Windows, macOS, or Linux

Optional for HTTP remotes: any host that can serve PUT/GET (or scripts/shig-server.py for local testing).

Installation

Windows (recommended):

.\install.ps1

Restart your terminal, then shig help.

From PyPI (after publish):

pip install shiggles

Developers:

pip install -e ".[dev]"

Usage

  1. Open a terminal in your project folder.
  2. Run shig start.
  3. Run shig save "first version".
  4. Use shig changes and shig history to see what changed.
  5. Use shig upload <path-or-url> when you want to share with the team.

Basic solo workflow:

shig start
shig save "first version"
shig changes
shig history

Tabs

  • main - default tab, the shared project line
  • foobar - your side pile for interrupted work
shig tab foobar       # create and switch
shig save "WIP window fix"
shig tab main         # switch back
shig tab foobar       # resume; files as you left them

Team sync

Shared folder (NAS, network path, USB):

shig download \\NAS\projects\my-game
shig save "updated level"
shig upload

HTTP URL (optional token in .shig/config.json):

shig upload http://backup.example.com/shiggles/my-project
shig download

The remote is remembered in .shig/config.json after the first use.

If someone else saved while you were working, shig save nudges you to download first. Skip with shig save --yes "message".

Bring (landing your tab on main)

shig tab foobar
shig save "fixed shoot.cs"
shig bring main

If someone else changed the same file on main, Shiggles stops and prints next steps. Fix on main, not another bring.

Restoring older work

  • shig load "message" - put files back to a matching save (becomes current)
  • shig undo - discard unsaved changes and reload the last save on this tab

Commands

Command What it does
shig start Set up this folder
shig save "..." Snapshot current tab
shig save --yes "..." Save even if remote is ahead
shig load "..." Put files back to a save (becomes current)
shig changes What is different since last save
shig history Saves on current tab
shig tab [name] List, switch, or create tabs
shig untab <name> Remove a tab (history kept)
shig bring <tab> Land current tab into another
shig download [path|url] Pull current tab from remote
shig upload [path|url] Push current tab to remote
shig undo Discard unsaved changes; back to last save
shig timeline Operation log

Ignore files

Edit .shignore (created on shig start). Same idea as .gitignore. Build output, .shig/, and junk stay out of snapshots.

Project structure

shiggles/
  shiggles/           Python package (commands, store, remote sync)
  scripts/
    shig-server.py    Minimal HTTP remote for local testing
  tests/
    test_scenarios.py Scenario walkthrough and unit tests
  install.ps1         Windows installer
  LICENSE             NWSL-1.0

On-disk repo layout:

.shignore
.shig/
  objects/
  refs/tabs/
  tabs/
  collisions/
  HEAD
  config.json
  timeline.log

HTTP dev server

python scripts/shig-server.py ./remote-store -p 8765
shig upload http://127.0.0.1:8765

Use the full URL including http://. A bare 127.0.0.1:8765 is not recognized as HTTP.

Tests

python tests/test_scenarios.py              # narrated walkthrough
python tests/test_scenarios.py --keep       # keep files in tests/_sandbox/
python tests/test_scenarios.py --clean      # wipe sandbox
python -m unittest discover -s tests -v     # unit tests

Publish to PyPI

pip install build twine
python -m build
twine upload dist/*

Notes

  • Shiggles is a simple VCS helper, not a replacement for full backups, cloud sync, or git power workflows.
  • Collisions never overwrite your working files; compare copies under .shig/collisions/.
  • See ROADMAP.md for philosophy, collision policy, and deferred features.

License

This software is licensed under the NWSL.

Copyright (c) 2026 drLemis.

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

shiggles-0.2.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

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

shiggles-0.2.0-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file shiggles-0.2.0.tar.gz.

File metadata

  • Download URL: shiggles-0.2.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for shiggles-0.2.0.tar.gz
Algorithm Hash digest
SHA256 95a5833265da6c60d56be5fa96a584bf2a3f10d85b935661d6f6b31c04b171ba
MD5 005839cd604be1ca0c6e3277eb46dc29
BLAKE2b-256 66b805c1a553d0d917a2540504e2b3603f2589c5c7f3447fe8971dca026331c5

See more details on using hashes here.

File details

Details for the file shiggles-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: shiggles-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 21.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for shiggles-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c15dcc9dee5decb58e8e7df0ae03ae0a45b30e9204bab7610247c97fd84f7866
MD5 941aee915e61f2fd9a7e7632a840bc53
BLAKE2b-256 242d392db138bcae929d0223fd074d5a741c18cd5f0bc72a3e4473a71603a1fe

See more details on using hashes here.

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