UE Core & Enterprise Subscriptions: Get 10% Off on your second year Choose the 2-year option and save 10% in the second year for subscription.
UE Core includes UltraEdit + UltraCompare.
UE Enterprise includes the full UltraEdit Suite.
Buy Now →
UE_Site-Logo-webp

UltraEdit plugins

Plugins

The UltraEdit plugin system allows you to extend and enhance UltraEdit’s capabilities using JavaScript without modifying the core application. This powerful system enables developers to create custom tools, automate tasks, and add new functionality that integrates seamlessly with UltraEdit’s interface.
Plugin SDK first added in UE 2025.0.

What are UltraEdit Plugins?

Plugins are modular units of code that add specific features or functionalities to UltraEdit. They consist of JavaScript files that can interact with UltraEdit’s core features through a standardized API. Plugins can be accessed through the ribbon, keyboard shortcuts, command palette, menus, and toolbars.

Benefits of the Plugin System

  • Extensibility: Add custom functionality without altering UltraEdit’s core code
  • Modularity: Easy to manage, update, and maintain individual plugins
  • Community: Share and use plugins created by other developers
  • Integration: Seamless access through UltraEdit’s existing interface elements
  • Automation: Automate repetitive tasks and workflows

Plugin Wizard

UltraEdit includes a built-in Plugin Wizard that helps you create new plugins quickly and easily.

Using the Plugin Wizard

Plugin Type Selection

  • Select between Function Plugin or Applet Plugin using radio buttons.
  • Function Plugin: Creates traditional command-based plugins
  • Applet Plugin: Creates dockable window plugins with HTML interfaces

Plugin Configuration

Configure your plugin with the following fields:

Common Fields (Both Plugin Types)
Name Internal name of the plugin
Display Name Name displayed in ribbons, toolbars, command palette, key mapping
Short Description Brief description of the plugin
Long Description Detailed description of the plugin
Light Theme Icon Icon used for light themes
Dark Theme Icon Icon used for dark themes
Hotkey Keyboard shortcut assignment
Chord Secondary keystroke assignment
Additional Fields (Applet Plugins Only)
Index Name Specifies the file that the dockable window’s WebView2 control navigates to during initialization. Defaults to index.html.
Initial Dock Side Specifies where the window is docked initially. Options: Top, Bottom, Left, Right, or Float.

Completion

This page confirms your plugin has been created and provides next steps for accessing and managing your plugin.  It also automatically opens the source code for editing.

Note: The Plugin Wizard creates user plugins in %APPDATA%\IDMComp\UltraEdit\userplugins\<plugin-name>

Plugin Manager

The Plugin Manager provides a centralized interface for managing all your plugins.

Plugin Manager Features

Commands can be accessed through the right-click context menu:

  • Install/Uninstall: Manage plugin availability
  • Enable/Disable: Control which plugins are active without removing them
  • Delete: Remove user-created plugins permanently

How Plugin Installation Works

Application Plugins: Pre-installed with UltraEdit in <installation directory>\plugins

User Plugins: Created in %APPDATA%\IDMComp\UltraEdit\userplugins

Installation Process: Copies plugins from userplugins to the active plugins directory %APPDATA%\IDMComp\UltraEdit\plugins

Plugin Management Rules

  • User-created plugins: Can be installed, uninstalled, enabled, disabled, and deleted
  • Application-installed plugins: Can be installed, uninstalled, enabled and disabled, but cannot be deleted
  • Active plugins: Located in %APPDATA%\IDMComp\UltraEdit\plugins are loaded by UltraEdit

Creating a Plugin Manually

The Manifest File

Users can create plugins manually if preferred.Every plugin requires a manifest.json file that describes the plugin to UltraEdit. Here’s the structure:

JSON

{

“name”: “YourPluginName”,

“display name”: “Your Plugin Display Name”,

“short description”: “Brief description of what your plugin does”,

“long description”: “Detailed description of plugin functionality”,

“version”: “1.0.0”,

“script name”: “yourscript.js”,

“guid”: “unique-identifier-here”,

“icon”: “plugin-icon.png”,

“icon-light”: “plugin-icon-light.png”,

“icon-dark”: “plugin-icon-dark.png”

}

Key Fields
Name Internal name for the plugin
Display Name Name shown in UltraEdit's interface
Version Current version number
Script Name Name of the main JavaScript file
GUID Globally unique identifier for your plugin
Icon Default icon file (optional)
Icon-light Icon used for light themes (optional)
Icon-dark Icon used for dark themes (optional)

The JavaScript File

The JavaScript file contains the plugin’s functionality. All code should be:

  • Legal JavaScript compatible with Microsoft’s WebView2 component
  • Encapsulated in functions – no executable code outside functions except global variables
  • UTF-16 LE format

 

Required Functions

Every plugin must include an OnInit function that:

  1. Registers the plugin’s commands
  2. Returns plugin information in JSON format
  3. Calls UltraEdit.processPIOnInit() with the command data

Basic Plugin Structure

JavaScript

function OnInit() {

UltraEdit.processPIOnInit(`{

“guid”: “your-plugin-guid”,

“CommandName”: {

“type”: “Execute”,

“display name”: “Command Display Name”,

“short description”: “What this command does”,

“long description”: “Detailed description of command”,

“icon”: “command-icon.png”,

“icon-light”: “command-icon-light.png”,

“icon-dark”: “command-icon-dark.png”,

“hotkey”: “Alt+Ctrl+L”,

“chord”: “”

}

}`);

}

function CommandName() {

//

Your command logic here

UltraEdit.outputWindow.write(“Hello from your plugin!”);

}

Command Types and Properties

Function Commands

Function plugins or “Execute” commands can be triggered through:

  • Ribbon buttons (Advanced tab, Plugin panel)
  • Keyboard shortcuts (configurable in Key Mapping)
  • Command palette
  • Menus and toolbars

Applet Commands

Applet plugins or “GUIDockable” commands use UltraEdit’s dockable window architecture to create a new dockable window with a Microsoft WebView2 control to run applets. Triggering the command in the following ways will show/hide the window:

  • Ribbon buttons (Advanced tab, Plugin panel)
  • Keyboard shortcuts (configurable in Key Mapping)
  • Command palette
  • Menus and toolbars

Command Properties

Type "Execute" represents a function plugin with one or more commands “GUIDockable” represents an applet plugin with a dockable window
Display Name Text shown in interface
Short Description Brief explanation of command
Long Description Detailed explanation of command
Icon Command-specific icon (falls back to plugin default)
Icon-light Icon used for light themes (optional)
Icon-dark Icon used for dark themes (optional)
Hotkey Default keyboard shortcut (optional)
Chord Secondary keystroke for command activation (optional)
Index name Applet plugin only - Specifies the file that the dockable window’s WebView2 control navigates to during initialization.
Initial dock side Applet plugin only - Specifies where the window is docked initially. Options: Top, Bottom, Left, Right, or Float.

Plugin Initialization Process

When UltraEdit starts:

  1. Scans the plugins directory
  2. Reads each manifest.json file
  3. Checks for existing config.json files
  4. Calls OnInit if config is missing or version changed
  5. Loads plugin commands into memory
  6. Makes commands available through the interface

Config File Generation

After first run, UltraEdit creates a config.json file in each plugin folder containing:

  • Command information for quick loading
  • Hotkey and chord configurations
  • Version tracking

Accessing Plugin API

Plugins have access to UltraEdit’s JavaScript scripting API, which allows interaction with:

  • Document content – Read, modify, and manipulate text
  • File operations – Open, save, create files
  • Output window – Display messages and results
  • User interface – Access various UI elements
  • Application settings – Read configuration values

Including Additional Scripts

You can modularize your plugin by including additional JavaScript files:

JavaScript

// include <path-or-filename>

Additional script files should be located in the plugin directory or subdirectories.

Example: “Hello World” Function Plugin

Manifest (manifest.json)

JSON

{

“Name”: “HelloWorld”,

“Display Name”: “Hello World Plugin”,

“Short Description”: “Simple greeting plugin”,

“Long Description”: “Displays a Hello World message”,

“Version”: “1.0.0”,

“Script Name”: “hello.js”,

“GUID”: “12345678-1234-1234-1234-123456789012”,

“Icon”: “”

}


Script (hello.js)
JavaScript

function OnInit() {

UltraEdit.processPIOnInit(`{

“GUID”: “12345678-1234-1234-1234-123456789012”,

“Test”: {

“Type”: “Execute”,

“Display Name”: “Say Hello”,

“Short Description”: “Display Hello World message”,

“Icon”: “”,

“Hotkey”: “Alt+Ctrl+L”,

“Chord”: “”

}

}`);

}

function Test() {

UltraEdit.outputWindow.write(“Hello World!”);

}

Installing and Using Plugins

Installation

  1. Create a folder in %APPDATA%\IDMComp\UltraEdit\Plugins
  2. Place your manifest.json and JavaScript files in the folder
  3. Restart UltraEdit
  4. Your plugin will appear in the Advanced ribbon tab

NOTE: Only plugins that exist in either <installation directory>\plugins or %APPDATA%\IDMComp\UltraEdit\userplugins will actually appear in the UltraEdit interface.

Accessing Plugin Commands

  • Ribbon: Advanced tab → Plugin panel
  • Keyboard: Use assigned hotkeys and chords
  • Command Palette: Search for plugin commands
  • Key Mapping: Assign custom shortcuts in Configuration

Best Practices

Development Guidelines

  • Test thoroughly before distribution
  • Use descriptive names for commands and functions
  • Handle errors gracefully with try-catch blocks
  • Document your code for maintainability
  • Follow JavaScript best practices for performance

Security Considerations

  • Plugins run with application-level access
  • Enterprise users can disable plugins through system locks
  • Validate input to prevent security issues
  • Be mindful of file system access

Performance Tips

  • Cache frequently used data when appropriate
  • Avoid blocking operations in command functions
  • Use efficient algorithms for text processing

Troubleshooting

Common Issues

  • Plugin not appearing: Check manifest.json syntax and file encoding
  • Commands not working: Verify function names match command objects
  • Hotkeys not responding: Check for conflicts in Key Mapping
  • Script errors: Use UltraEdit’s output window for debugging

File Format Requirements

  • All JavaScript and JSON files must be UTF-16 LE format
  • Use proper JSON syntax in manifest files
  • Ensure GUID uniqueness across plugins

Advanced Features

Multiple Commands

A single plugin can export multiple commands by adding more command objects to the OnInit JSON structure.

Icon Customization

  • Provide plugin-wide icons in the manifest
  • Override with command-specific icons
  • Support standard image formats

Integration Points – Applet Plugins

Applet plugins integrate with UltraEdit’s existing infrastructure and events. Currently supported events:

  • apiInitialization event
  • One-time event on plugin instantiation during application startup and plugin loading, indicates that all internal plugin API objects are fully created and initialized.

  • themeChange event
  • Occurs when the application theme is changed. Plugins should handle this event notification and update any plugin UI elements as needed using the UltraEdit.theme object for color information. (See default Wizard Applet plugin for a simple example)

  • documentAdd/documentRemove events
  • Occurs when a document is opened or closed in UltraEdit. Event is generated after the document action is complete in UltraEdit, so document action cannot currently be canceled from the plugin. This is an informational notification only. However it is useful for maintaining plugin awareness of available open documents. (See default Wizard Applet plugin for a simple example)

Example JavaScript handlers for plugin events:

JavaScript

//Called when a document is opened in UltraEdit

document.addEventListener(“uewve_documentAdd”, (event) => {

//Update plugin UI or other plugin objects as needed

});
//Called when a document is closed in UltraEdit

document.addEventListener(“uewve_documentRemove”, (event) => {

//Update plugin UI or other plugin objects as needed

});

//Called when the active theme is changed in UltraEdit

document.addEventListener(“uewve_themeChange”, (event) => {

//Refresh plugin UI with any theme changes 

//from UltraEdit.theme object

});

//Called when all plugin initialization is complete

document.addEventListener(“uewve_apiInitialized”, (event) => {

//Plugin is fully initialized

//Put any one-time instantiation code here

});

This user guide provides the foundation for creating and using UltraEdit plugins. As the plugin system evolves, additional features and capabilities will be added to enhance the development experience and expand integration possibilities.