Skip to main content

Mackup™

Tests PyPI version Python Versions Ruff mypy License

Backup and keep your application settings in sync.

Table of contents

Quickstart

On macOS or Linux, if you want an easy install, you can install Homebrew and do:

# Install Mackup
brew install mackup

# Launch it and back up your files
mackup backup

If not running macOS or Linux, or you don't like Homebrew, you can use pip.

# Install Mackup with PIP
pip install --upgrade mackup

# Launch it and back up your files
mackup backup

You're all set and can back up from now on.

Next, on any new workstation, do:

# Install Mackup
brew install mackup

# Launch it and restore your files
mackup restore

Done!

You can find more detailed instructions in INSTALL.md.

Usage

backup, restore, link install, link uninstall and link operate on all of your configured applications by default. To limit a command to a single application, add its name (the identifier shown by mackup list), e.g. mackup backup vim. Naming an application overrides the [applications_to_sync] / [applications_to_ignore] settings in your .mackup.cfg, so you can act on any supported app without editing your config.

mackup backup [application]

Back up your application files. Copy your local config files into the Mackup folder. Name an application to back up only that one, e.g. mackup backup vim.

mackup restore [application]

Restore your application settings on a newly installed workstation. Copy config files from the Mackup folder to your home folder. Name an application to restore only that one, e.g. mackup restore emacs.

mackup link install [application]

Move your local config files into the Mackup folder, and link them to their original place. Name an application to install only that one.

$${\color{red}warning}$$ the link strategy doesn't work correctly on macOS

mackup link [application]

On another workstation, links local config files from the Mackup folder. Name an application to link only that one.

mackup link uninstall [application]

Copy back any synced config file to its original place. Removes the links and copies config files from the Mackup folder back into your home. Name an application (e.g. mackup link uninstall git) to unlink only that one; scoping to an application skips the global uninstall confirmation.

mackup list

Display the list of applications supported by Mackup.

mackup -h

Get some help, obviously...

What does it do

By only tracking pure configuration files, it keeps the crap out of your freshly new installed workstation (no cache, temporary and locally specific files are transferred).

Mackup makes setting up the environment easy and simple.

There are 2 modes of operations: copy mode and link mode.

Copy mode

Copy mode is used to back up and restore your files. The files are backed up into the configured Mackup folder, which can be in Dropbox, iCloud, or wherever you configure it.

It is covered by the 2 commands:

  • mackup backup
  • mackup restore

Link mode

[!WARNING] If you are using Mackup on a current version of macOS, link mode will BREAK YOUR PREFERENCES. macOS Sonoma (macOS 14) and later don't support symlinked preferences, see issue #2035 for additional information. PR #2085 added copy mode, which should be used instead.

Link mode is used to move your config files into the Mackup folder, and link them back to their original place.

This mode is useful if you are using multiple workstations, and want to keep your application settings in sync at all times.

  • Backs up your application settings in a safe directory (e.g. Dropbox)
  • Syncs your application settings among all your workstations
  • Restores your configuration on any fresh install in one command line

Let's take git as an example. Your settings for git are saved in your home folder, in the .gitconfig file.

It is covered by the 3 commands:

  • mackup link install
  • mackup link
  • mackup link uninstall

mackup link install

If you have Dropbox, these things happen when you launch mackup link install:

  1. cp ~/.gitconfig ~/Dropbox/Mackup/.gitconfig
  2. rm ~/.gitconfig
  3. ln -s ~/Dropbox/Mackup/.gitconfig ~/.gitconfig

Now your git config is always backed up and up to date on all your workstations.

mackup link

When you launch mackup link, here's what it's really doing:

  1. ln -s ~/Dropbox/Mackup/.gitconfig ~/.gitconfig

That's it, you got your git config setup on your new workstation.

mackup does the same for any supported application.

mackup link uninstall

You can revert all your files to their original state.

# Just run this
mackup link uninstall

This will remove the symlinks and copy back the files from the Mackup folder in Dropbox to their original places in your home. The Mackup folder and the files in it stay put, so that any other computer also running Mackup is unaffected.

To revert a single application instead, name it, e.g. mackup link uninstall git. Scoping the command to an application unlinks only that app — the rest of your setup and the Mackup config itself are left in place, and the global uninstall confirmation is skipped.

Supported Storages

See the README file in the doc directory for more info.

Unsupported Storages

Supported Applications

Can you support application X

We can with your help ;)

Personalization & configuration

Have an application that shouldn't be generally supported but that you use? Or some personal files you want to sync, e.g. various config files in a ~/.config/ directory or your personal ~/.gitignore?

Why did you do this

Yesterday, I had a talk with Zach Zaro, complaining about the pain it is to reconfigure our Macbook each time we get a new one or install from scratch. That's a talk we have already had months ago.

I change my workstation every X months. Each time I either lose my apps' configurations, or I just waste a bunch of hours getting setup like I was on my old box. I also spend a lot of time reconfiguring the same stuff again on all my workstations (home, work).

Boring...

Some people tried to solve the problem on the application layer, like Github's Boxen, but it solves a different problem, from my point of view. I don't spend a lot of time installing or downloading stuff. I spend time configuring it.

For years, I've used a personal shell script that was copying known config files into Subversion, Git or Dropbox, and linked them into my home. But I felt a lot of us had the same problem: Making a more generic tool could help others and I could get help from others to support more apps in the tool.

So here comes Mackup, the little tool that will sync all your application configs to Dropbox (or Google Drive, or anything).

And it's GPL, of course.

What platforms are supported

  • macOS
  • GNU/Linux

What's up with the weird name

Mackup is just a portmanteau of Mac and Backup. It is simple, short, and easy to remember, and it corresponds with the whole idea of Mackup: the simpler – the better! (And I suck at naming stuff, but who doesn't.)

Architecture

Want to understand how Mackup works internally? Check out the Architecture Guide which includes:

  • Visual architecture diagram
  • Component breakdown
  • Data flow diagrams
  • Design decisions
  • Extension points for contributors

Perfect for contributors who want to understand the codebase or users curious about how their configs are managed.

Where can I find more information

In the doc directory.

Release files for mackup 0.11.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mackup 0.11.2
File Size Uploaded
mackup-0.11.2.tar.gz 160.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mackup 0.11.2
File Interpreter ABI Platform
mackup-0.11.2-py3-none-any.whl Python 3 none any Details

Total release size: 369.4 kB

Release files / mackup-0.11.2.tar.gz

Download URL mackup-0.11.2.tar.gz
Size 160.1 kB
Tags Source
SHA-256 checksum
How to use checksums
176b9e6781f7f40fd2de040701305341b5776986717798dc98afdb985e89d345
BLAKE2b-256 checksum
How to use checksums
028ebe557752b6b6ab781ab2ac11a8802dd8f5f8043bade24e36a8b3f07b99e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / mackup-0.11.2-py3-none-any.whl

Download URL mackup-0.11.2-py3-none-any.whl
Size 209.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
705a8d2df496c0edfb039bb54ecf523c20916eb5bfd6f66c90c9c0b9bf05a94a
BLAKE2b-256 checksum
How to use checksums
8622c287734fae9907b9af89921a1ec4eab58c5178710cb076b0f3b546551b96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.11.2 This release

2 release files

0.11.1

2 release files

0.11.0

2 release files

0.10.4

2 release files

0.10.3

2 release files

0.10.2

2 release files

0.10.1

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.43

2 release files

0.8.42

2 release files

0.8.37

1 release file

0.8.36

1 release file

0.8.35

1 release file

0.8.34

1 release file

0.8.33

1 release file

0.8.32

1 release file

0.8.31

1 release file

0.8.30

1 release file

0.8.29

1 release file

0.8.28

1 release file

0.8.27

1 release file

0.8.26

1 release file

0.8.25

1 release file

0.8.24

1 release file

0.8.23

1 release file

0.8.22

1 release file

0.8.21

1 release file

0.8.20

1 release file

0.8.19

1 release file

0.8.18

1 release file

0.8.17

1 release file

0.8.16

1 release file

0.8.15

1 release file

0.8.14

1 release file

0.8.13

1 release file

0.8.12

1 release file

0.8.11

1 release file

0.8.10

1 release file

0.8.9

1 release file

0.8.8

1 release file

0.8.7

1 release file

0.8.6

1 release file

0.8.5

1 release file

0.8.4

1 release file

0.8.3

1 release file

0.8.2

1 release file

0.8.1

1 release file

0.8

1 release file

0.7.4

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page