Building ConfigSync Plugins: A Developer Guide
The complete guide to building ConfigSync plugins: the plugin interface, the detect/capture/restore lifecycle, manifest files, testing, and contributing to the ecosystem.
Why Build a Plugin
ConfigSync ships with 24 built-in modules that cover the most common developer tools: shells, editors, git, SSH, cloud CLIs, and package managers. But the ecosystem of developer tools is vast, and no built-in set can cover everything. Plugins let you extend ConfigSync to sync any tool's configuration.
Maybe you use a niche database client with a complex config file. Maybe your team has an internal CLI tool with settings that need to be consistent. Maybe you use a tool that just shipped a new config format and ConfigSync has not caught up yet. In each case, a plugin is the answer.
Plugins are Python modules that implement a simple three-method interface. If you can write Python, you can build a plugin.
The Plugin Interface
Every ConfigSync plugin extends the DevSyncPlugin base class and implements three methods: detect(), capture(), and restore().
The detect() method is called during scanning to determine if this plugin is relevant on the current machine. If it returns False, the plugin is skipped. The capture() method reads the tool's config files and returns a dictionary representing the state. The restore() method takes that dictionary and writes the config files back.
Plugin Directory Structure
Plugins live in the configsync-plugins repository with a standard directory layout:
The Manifest File
Every plugin includes a manifest.yaml that declares metadata about the plugin. This is used by ConfigSync to display information, categorize the plugin, and check compatibility.
category field determines where the plugin appears in ConfigSync's module list. Choose the category that best matches your tool. The requires_encryption field lists config files that contain secrets and should always be encrypted.A Complete Example: Redis CLI Plugin
Here is a complete, realistic plugin for syncing the Redis CLI configuration:
Handling Encrypted Files
If your plugin manages files that contain secrets, use the crypto_manager parameter to encrypt and decrypt them.
Writing Tests
Every plugin should include tests. ConfigSync uses pytest, and your tests should verify detect, capture, and restore behavior.
Contributing Your Plugin
Once your plugin is built and tested, contributing it to the ConfigSync ecosystem follows the standard open source workflow:
| Step | Action | Details |
|---|---|---|
| 1 | Fork the repo | github.com/InventiveHQ/configsync-plugins |
| 2 | Create plugin directory | plugins/<name>/ with standard layout |
| 3 | Implement the interface | detect(), capture(), restore() |
| 4 | Add manifest.yaml | Metadata, category, platforms |
| 5 | Write tests | pytest in plugins/<name>/tests/ |
| 6 | Submit PR | Include README with usage examples |
The ConfigSync community reviews plugin PRs for security (especially around credential handling), correctness (capture and restore are symmetric), and cross-platform compatibility. Plugins that pass review are included in the official collection and available to all ConfigSync users.
Building plugins is the fastest way to extend ConfigSync to cover your exact toolchain. The interface is intentionally simple: detect, capture, restore. If your tool stores configuration in files, you can sync it.
Ready to try ConfigSync?
Sync your entire dev environment across machines in minutes. Free forever for up to 3 devices.