Plugin architecture
Tinct uses a plugin-based architecture for both input (colour sources) and output (application configurations).
Plugin types
Input plugins
Extract or generate colour palettes from various sources:
| Plugin | Description |
|---|---|
| image | Extract from JPEG, PNG, GIF, WebP images |
| google-genai | Generate with Google Gemini AI |
| openrouter | Generate via OpenRouter API |
| remote-json | Fetch from JSON URLs |
| remote-css | Parse CSS variables |
| file | Manual colour specification |
| markdown | Load saved theme files |
Output plugins
Generate configuration files for applications:
- Terminals - Alacritty, Ghostty, Kitty, Konsole, Ptyxis
- Desktop environments - GNOME, KDE, GTK, Qt
- Window managers - Hyprland, Hyprlock, Hyprpaper
- Bars and launchers - Waybar, Dunst, Fuzzel, etc.
- Editors - Neovim, Zellij
- Special - Markdown export, custom templates
Built-in vs external
Built-in plugins
- Compiled into the tinct binary
- Written in Go
- Maximum performance
- No external dependencies
External plugins
- Separate executables
- Written in any language
- Two protocols: JSON-stdio and go-plugin
- Loaded on demand
See Plugin development for details.
Plugin lifecycle
- Registration: Plugins register with the manager on startup
- Flag registration: Plugins add their CLI flags
- Validation: Pre-execution checks (dependencies, paths)
- Execution: Generate method is called with theme data
- Post-hooks: Optional reload/apply actions
Using plugins
Specify input plugin
tinct generate -i <plugin-name>
Specify output plugins
# Single plugin
tinct generate -i image -p wallpaper.jpg -o kitty
# Multiple plugins
tinct generate -i image -p wallpaper.jpg -o kitty,hyprland,waybar
# All plugins
tinct generate -i image -p wallpaper.jpg -o all
Plugin-specific flags
Plugins can define additional flags:
tinct generate -i image -p wallpaper.jpg \
--image.colors 16 \
--image.extractAmbience \
--kitty.reload
Plugin configuration
Environment variables
# Enable only specific plugins
export TINCT_ENABLED_PLUGINS="image,hyprland,kitty"
# Disable plugins
export TINCT_DISABLED_PLUGINS="waybar"
Configuration file
.tinct-plugins.json:
{
"enabled_plugins": ["image", "hyprland", "kitty"],
"disabled_plugins": ["waybar"],
"external_plugins": {}
}
Listing plugins
See all available plugins:
tinct plugins list
Next steps
- Input plugins - Colour source plugins
- Output plugins - Application plugins
- Plugin development - Creating custom plugins