# Creating Plugins for changedetection.io This document describes how to create plugins for changedetection.io. Plugins can be used to extend the functionality of the application in various ways. ## Plugin Types ### UI Stats Tab Plugins These plugins can add content to the Stats tab in the Edit page. This is useful for adding custom statistics or visualizations about a watch. #### Creating a UI Stats Tab Plugin 1. Create a Python file in a directory that will be loaded by the plugin system. 2. Use the `global_hookimpl` decorator to implement the `ui_edit_stats_extras` hook: ```python import pluggy from loguru import logger global_hookimpl = pluggy.HookimplMarker("changedetectionio") @global_hookimpl def ui_edit_stats_extras(watch): """Add custom content to the stats tab""" # Calculate or retrieve your stats my_stat = calculate_something(watch) # Return HTML content as a string html = f"""

My Plugin Statistics

My statistic: {my_stat}

""" return html ``` 3. The HTML you return will be included in the Stats tab. ## Plugin Loading Plugins can be loaded from: 1. Built-in plugin directories in the codebase 2. External packages using setuptools entry points To add a new plugin directory, modify the `plugin_dirs` dictionary in `pluggy_interface.py`. ## Example Plugin Here's a simple example of a plugin that adds a word count statistic to the Stats tab: ```python import pluggy from loguru import logger global_hookimpl = pluggy.HookimplMarker("changedetectionio") def count_words_in_history(watch): """Count words in the latest snapshot""" try: if not watch.history.keys(): return 0 latest_key = list(watch.history.keys())[-1] latest_content = watch.get_history_snapshot(latest_key) return len(latest_content.split()) except Exception as e: logger.error(f"Error counting words: {str(e)}") return 0 @global_hookimpl def ui_edit_stats_extras(watch): """Add word count to the Stats tab""" word_count = count_words_in_history(watch) html = f"""

Content Analysis

Word count (latest snapshot) {word_count}
""" return html ``` ## Testing Your Plugin 1. Place your plugin in one of the directories scanned by the plugin system 2. Restart changedetection.io 3. Go to the Edit page of a watch and check the Stats tab to see your content