Plugins
Plugins are script extensions that add commands to the palette or items to the top bar. Just drop a folder in place.
Where they live
Section titled “Where they live”Directory%APPDATA%/dev.wandeln.app/
Directoryplugins/
Directorytranslate/
- plugin.json
- tr.py
Directoryuptime/
- plugin.json
- uptime.ps1
The full path is %APPDATA%\dev.wandeln.app\plugins\<plugin name>\plugin.json. Create one folder per plugin and put plugin.json and your script inside.
Open it from Settings › Plugins (プラグイン) › Open folder (フォルダを開く) (it’s created if missing). After adding or changing a plugin, reopen the palette or click Reload (再読み込み) in settings.
plugin.json
Section titled “plugin.json”{ "name": "Translate", "type": "palette", "keyword": "tr", "command": "tr.py", "description": "optional"}| Key | Required | Description |
|---|---|---|
name |
✓ | Name shown in the palette and settings |
type |
"palette" (default) or "bar" |
|
keyword |
If set, a search plugin; if omitted, a one-shot command | |
command |
✓ | Script inside the plugin folder |
description |
Description | |
interval |
bar only: refresh interval in seconds. Default 60, minimum 2 |
Supported scripts: .ps1 (PowerShell), .bat / .cmd, .exe,
.py (needs python on PATH), .js (needs node on PATH).
The working directory is the plugin folder. No console window is shown.
.ps1 files can contain Japanese and emoji whether saved as UTF-8 (with or without BOM) or Shift-JIS.
One-shot commands (no keyword)
Section titled “One-shot commands (no keyword)”Search for the plugin’s name in the palette. Enter runs it with no arguments. Output is ignored.
Search plugins (with keyword)
Section titled “Search plugins (with keyword)”Type keyword + space + text in the palette. The script runs and its results are listed.
- The text is passed both as the first argument and in the
WANDELN_QUERYenvironment variable. - Scripts that don’t finish within 5 seconds are stopped.
- Write stdout as UTF-8 (
.ps1is UTF-8 automatically;.pygetsPYTHONIOENCODING=utf-8).
Output format:
{ "items": [ { "title": "Display name", "subtitle": "Detail (optional)", "action": { "type": "copy", "value": "Text to copy" } } ]}| action.type | On Enter |
|---|---|
copy |
Copy value to the clipboard |
open |
Open value (URL / file / folder) |
run |
Run the same script with value as the first argument (output ignored) |
If the output isn’t JSON, each line becomes a copy item.
Example 1: one-shot command (PowerShell)
Section titled “Example 1: one-shot command (PowerShell)”{ "name": "Create a note on the desktop", "command": "hello.ps1" }$desktop = [Environment]::GetFolderPath("Desktop")$file = Join-Path $desktop ("memo-" + (Get-Date -Format "yyyyMMdd-HHmmss") + ".txt")Set-Content -Path $file -Value "Created from Wandeln" -Encoding UTF8Start-Process notepad $fileExample 2: search plugin (Python)
Section titled “Example 2: search plugin (Python)”{ "name": "Change case", "keyword": "case", "command": "case.py" }import json, sys
text = sys.argv[1] if len(sys.argv) > 1 else ""items = []if text: for label, value in [("UPPERCASE", text.upper()), ("lowercase", text.lower()), ("Title Case", text.title())]: items.append({"title": value, "subtitle": label, "action": {"type": "copy", "value": value}})print(json.dumps({"items": items}, ensure_ascii=False))Type case hello world in the palette to see the results.
Bar plugins ("type": "bar")
Section titled “Bar plugins ("type": "bar")”Items shown on the top bar. Drop one in and click Reload, and it appears in the widget list under Settings › Bar (バー) (right zone, disabled) with the plugin’s name. Enable and place it like any other widget.
The script runs with no arguments every interval seconds and its stdout is shown (stopped after 5 seconds).
{ "text": "Text to show", "tooltip": "On hover (optional)", "action": { "type": "open", "value": "https://..." } }actionis the samecopy/open/runas in the palette, run on click (runrefreshes the item right after).- If the output isn’t JSON, the first line is shown and the remaining lines become the tooltip.
- An empty text hides the item.
Example 3: bar plugin (PowerShell)
Section titled “Example 3: bar plugin (PowerShell)”{ "name": "Uptime", "type": "bar", "command": "uptime.ps1", "interval": 60 }$up = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime"⏱ {0}d {1}h" -f $up.Days, $up.Hours"Time since last boot"