Skip to main content
Version: 0.1.22

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:

PluginDescription
imageExtract from JPEG, PNG, GIF, WebP images
google-genaiGenerate with Google Gemini AI
openrouterGenerate via OpenRouter API
remote-jsonFetch from JSON URLs
remote-cssParse CSS variables
fileManual colour specification
markdownLoad saved theme files

Output plugins

Generate configuration files for applications:

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

  1. Registration: Plugins register with the manager on startup
  2. Flag registration: Plugins add their CLI flags
  3. Validation: Pre-execution checks (dependencies, paths)
  4. Execution: Generate method is called with theme data
  5. 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