Skip to main content
Zeal uses the Dash docset format, which allows you to create custom offline documentation for any library, framework, or programming language.

Docset Format

Zeal is compatible with Dash docsets, which are structured bundles containing:
  • HTML documentation files
  • SQLite database for search indexing
  • Metadata and icons
  • Configuration files

Docset Structure

A typical docset has the following structure:
DocsetName.docset/
├── icon.png              # Docset icon (optional)
├── meta.json            # Metadata (Zeal-specific)
└── Contents/
    ├── Info.plist       # Docset configuration
    └── Resources/
        ├── docSet.dsidx  # SQLite search index
        └── Documents/    # HTML documentation files
            └── ...

Supported Database Formats

Zeal supports two docset database formats:
Standard Dash format using the searchIndex table:
CREATE TABLE searchIndex(
  id INTEGER PRIMARY KEY,
  name TEXT,
  type TEXT,
  path TEXT
);
Most publicly available docsets use this format.

Creating Docsets

To create your own docsets, follow the official Dash Docset Generation Guide:

Dash Docset Generation Guide

Complete guide to creating Dash-compatible docsets
The guide covers:
  • Setting up the docset structure
  • Generating the search index
  • Creating the Info.plist configuration
  • Adding icons and metadata

Quick Start

  1. Create the directory structure:
    mkdir -p MyDocset.docset/Contents/Resources/Documents
    
  2. Add your HTML documentation to the Documents/ folder
  3. Create the Info.plist file:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
              "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>CFBundleIdentifier</key>
      <string>mydocset</string>
      <key>CFBundleName</key>
      <string>My Documentation</string>
      <key>DocSetPlatformFamily</key>
      <string>mydocset</string>
      <key>isDashDocset</key>
      <true/>
    </dict>
    </plist>
    
  4. Create the SQLite index:
    import sqlite3
    
    db = sqlite3.connect('MyDocset.docset/Contents/Resources/docSet.dsidx')
    cur = db.cursor()
    
    cur.execute('CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);')
    cur.execute('CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);')
    
    # Add entries
    cur.execute('INSERT INTO searchIndex(name, type, path) VALUES (?, ?, ?);',
                ('MyClass', 'Class', 'index.html#MyClass'))
    
    db.commit()
    db.close()
    
  5. Optional: Add metadata (meta.json):
    {
      "name": "MyDocset",
      "title": "My Documentation",
      "version": "1.0.0",
      "revision": 1
    }
    

Info.plist Configuration

Required Keys

CFBundleName
string
required
Display name of the docset
CFBundleIdentifier
string
required
Unique identifier for the docset

Optional Keys

DocSetPlatformFamily
string
Primary keyword for filtering searchesExample: python, javascript, java
DashDocSetKeyword
string
Additional keyword for search filtering
DashDocSetPluginKeyword
string
Plugin-specific keyword
dashIndexFilePath
string
Path to the index file relative to Documents/Example: index.html
isJavaScriptEnabled
boolean
default:"false"
Enable JavaScript execution in documentation pages
DashDocSetFamily
string
Family classification (e.g., cheatsheet, dashtoc)

Entry Types

Zeal recognizes the following entry types in the search index:
  • Class
  • Method
  • Function
  • Constant
  • Property
  • Type
  • Variable
  • Constructor
  • Attribute
  • Interface
  • Protocol
  • Struct
  • Enumeration
  • Guide
  • Category
  • Section
  • Macro
  • Event
  • Field
  • Operator
  • Namespace
  • Binding
Zeal normalizes type aliases automatically. For example, func, clm, and instm are all mapped to their standard equivalents.

Docset Storage

Zeal stores docsets in a platform-specific location:
~/.local/share/Zeal/docsets/
You can change this location in Settings under docsets.path.

Installing Docsets

There are several ways to install docsets:

Via Zeal GUI

  1. Go to Tools → Docsets
  2. Select docsets from the available list
  3. Click Download

Manual Installation

  1. Download or create a .docset bundle
  2. Copy it to the docset storage directory
  3. Restart Zeal or reload docsets

From User Contributions

The Zeal community maintains additional docsets at:

Zeal User Contributions

Community-contributed docsets compatible with Zeal

Testing Your Docset

  1. Copy your .docset bundle to the docset storage directory
  2. Restart Zeal
  3. Verify the docset appears in the sidebar
  4. Test search functionality
  5. Check that icons and metadata display correctly
Enable fuzzy search in settings to make finding entries easier during testing.

Troubleshooting

  • Verify the directory structure is correct
  • Check that Info.plist is valid XML
  • Ensure docSet.dsidx exists and is a valid SQLite database
  • Check Zeal’s logs for errors
  • Verify the searchIndex table exists
  • Check that entries have non-empty names and paths
  • Ensure the index is properly created
  • Rebuild the database if needed
  • Ensure icon.png is in the root of the .docset bundle
  • Try different image formats (PNG is preferred)
  • Check file permissions

Advanced Features

URL Fragments

For the ZDash format, you can specify URL fragments for more precise linking:
INSERT INTO searchIndex(name, type, path, fragment) 
VALUES ('myFunction', 'Function', 'api.html', 'myFunction');

Keywords

Support multiple search keywords by adding them to meta.json:
{
  "extra": {
    "keywords": ["py", "python", "python3"]
  }
}

Custom Index File

Specify a custom index page in meta.json:
{
  "extra": {
    "indexFilePath": "getting-started.html"
  }
}
For more details on the docset format and advanced features, refer to the official Dash documentation.

Build docs developers (and LLMs) love