Writing Custom ConfigSync Modules
ConfigSync covers 24 tools out of the box. For everything else, add custom configs or write your own module. Here is how to extend ConfigSync for any tool.
Beyond the Built-In 24
ConfigSync ships with modules for git, zsh, bash, ssh, VS Code, Cursor, npm, Docker, AWS, and many more. But developers use hundreds of tools, and no module library will cover every one. Maybe you depend on a specific database GUI, a custom internal tool, or a niche terminal application with its own config format.
There are two ways to handle tools without built-in support: add their config files as custom configs (takes seconds), or write a full module (takes an hour but benefits everyone). Most developers never need the second option.
Quick Path: Add Config Files Directly
The fastest way to track any tool is to add its config files directly:
ConfigSync detects files containing tokens, passwords, or connection strings and encrypts them automatically. Everything else syncs as plaintext. No module needed.
When to Write a Full Module
| Approach | Best For | Time Investment |
|---|---|---|
| configsync add config | Personal tools, simple configs | 30 seconds |
| Custom module | Popular tools, complex paths, platform differences | 1 hour |
Write a module when a tool stores configs in different locations per platform (like VS Code does), when auto-detection would help other users discover the tool, or when you want to contribute it back to the ConfigSync project.
The ModuleDef Structure
Every ConfigSync module implements the ModuleDef pattern with three core methods:
detect() checks if the tool exists on this machine. getFiles()returns config files with their encryption status. getExtras() captures metadata like the installed version.
Platform-Aware Path Handling
The most common reason to write a module instead of using add config is that the tool stores its configuration in different locations per operating system. macOS applications often use ~/Library/Application Support/, Linux uses~/.config/, and Windows uses AppData.
A module handles this automatically. When you push from macOS, ConfigSync captures the files from the macOS path. When you pull on Linux, the module places them at the Linux path. The developer never thinks about it.
Contributing a Module Back
If your module covers a tool that other developers use, consider contributing it:
The ConfigSync CLI is open source and welcomes contributions. Every new module expands what ConfigSync can auto-detect and sync for all users.
Ready to try ConfigSync?
Sync your entire dev environment across machines in minutes. Free forever for up to 3 devices.