Skip to main content
Zeal supports custom URL schemes for deep linking and IDE integration, compatible with the Dash URL protocols.

Supported Protocols

Zeal implements two URL schemes:

dash://

Simple protocol for basic search queries

dash-plugin://

Advanced protocol with parameters for IDE integration

dash:// Protocol

The dash:// protocol provides a simple way to search documentation.

Syntax

dash://[query]

Examples

dash://string

URL Variations

Zeal accepts different URL formats:
dash://query
dash:query
dash:///query
All variations are treated identically after parsing.

dash-plugin:// Protocol

The dash-plugin:// protocol supports advanced parameters for IDE integration.

Syntax

dash-plugin://[?keys=<keywords>&query=<query>&prevent_activation=<bool>]

Parameters

keys
string
Comma-separated list of docset keywords to searchExample: keys=python,django
query
string
Search query stringExample: query=pprint
prevent_activation
boolean
default:"false"
Prevent Zeal window from being activatedWhen true, Zeal updates the search results but doesn’t bring the window to the foreground. Useful for background updates while coding.Example: prevent_activation=true

Examples

dash-plugin://query=print

Using Protocol Handlers

From Command Line

You can invoke protocol handlers directly from the command line:
zeal "dash://python:pprint"
zeal "dash-plugin://keys=javascript&query=setTimeout"

From Web Browser

Create clickable links in HTML:
<a href="dash://python:print">Python print() documentation</a>
<a href="dash-plugin://keys=css&query=flexbox">CSS Flexbox Guide</a>

From Applications

Other applications can open Zeal URLs using system APIs:
import webbrowser
webbrowser.open('dash://python:requests')

Windows Registration

On Windows, protocol handlers must be registered in the system registry.

Automatic Registration

Use Zeal’s built-in registration:
zeal.exe --register
This creates registry entries for both dash:// and dash-plugin:// protocols.

Manual Registration

The registration creates the following registry structure:
HKEY_CURRENT_USER\Software\Classes\dash
HKEY_CURRENT_USER\Software\Classes\dash-plugin
Each protocol is registered with:
  • Default description
  • URL Protocol marker
  • Default icon
  • Command for opening URLs

Unregistration

To remove protocol handlers:
zeal.exe --unregister
Protocol handlers are registered per-user (HKEY_CURRENT_USER), not system-wide.

IDE Integration

Many IDEs and text editors support Dash protocol integration.

Visual Studio Code

Install a Dash integration extension:
  1. Search for “Dash” in the Extensions marketplace
  2. Configure the extension to use Zeal
  3. Set the executable path to Zeal

Sublime Text

Use the DashDoc plugin:
  1. Install via Package Control
  2. Configure for Zeal in settings:
    {
      "dash_app": "zeal"
    }
    

Vim/Neovim

Use a plugin like vim-dasht or dash.vim:
" Example configuration
nnoremap <silent> K :!zeal "<cword>" &<CR><CR>

Emacs

Use the zeal-at-point package:
(global-set-key (kbd "C-c d") 'zeal-at-point)

JetBrains IDEs

Install the Dash plugin from the marketplace and configure it to use Zeal.

Advanced Integration

IDE plugins can detect the current programming language and automatically scope searches:
# Editing a Python file
dash-plugin://keys=python&query=<selected_text>

# Editing a JavaScript file
dash-plugin://keys=javascript,nodejs&query=<selected_text>

Background Updates

For non-intrusive documentation lookup, use prevent_activation=true:
dash-plugin://keys=rust&query=Vec&prevent_activation=true
This updates the search in Zeal without stealing focus from your editor.

Custom Keybindings

Bind a key in your IDE to open Zeal with the current selection:
{
  "key": "ctrl+h",
  "command": "extension.dash.specific",
  "when": "editorTextFocus"
}

URL Encoding

Special characters in queries should be URL-encoded:
# Searching for "std::vector"
dash://cpp:std%3A%3Avector

# Searching for "array[index]"
dash-plugin://query=array%5Bindex%5D
Zeal automatically decodes URL-encoded parameters.

Troubleshooting

Run Zeal with administrator privileges and execute:
zeal.exe --register
Verify the registry entries exist in HKEY_CURRENT_USER\Software\Classes\.
  • Verify Zeal is in your system PATH
  • Check IDE plugin configuration
  • Test protocol handlers manually from command line
  • Ensure Zeal is not already running in single-instance mode
  • Check URL encoding for special characters
  • Verify docset keywords match installed docsets
  • Test the query directly in Zeal’s search box

Security Considerations

Protocol handlers execute local applications, which can pose security risks:
Be cautious when clicking protocol links from untrusted sources. Zeal itself doesn’t execute arbitrary code, but malicious URLs could attempt to exploit vulnerabilities.
  • Zeal only accepts safe query parameters
  • No file system access is granted through protocol URLs
  • Commands are not executed; only search queries are processed

Examples

Create a cheat sheet with quick links:
<!DOCTYPE html>
<html>
<head><title>Dev Quick Links</title></head>
<body>
  <h1>Documentation Quick Links</h1>
  <ul>
    <li><a href="dash://python:requests">Python Requests</a></li>
    <li><a href="dash://javascript:promise">JavaScript Promises</a></li>
    <li><a href="dash://css:grid">CSS Grid</a></li>
    <li><a href="dash://bash:awk">Bash AWK</a></li>
  </ul>
</body>
</html>

Shell Function

Create a shell function for quick lookups:
# Add to .bashrc or .zshrc
function zdoc() {
  local docset="$1"
  local query="$2"
  zeal "dash://${docset}:${query}" &
}

# Usage
zdoc python print
zdoc javascript array.map

Alfred/Raycast Integration

Create custom workflows to search Zeal:
# Alfred workflow script
zeal "dash-plugin://keys={query}&query={query}"
For best IDE integration, use dash-plugin:// with the prevent_activation parameter to keep focus on your editor while updating search results.

Build docs developers (and LLMs) love