Press a hotkey β search β launch. Drag-and-drop to add. Themeable. One folder. Zero clutter.
Features Β· Install Β· Usage Β· Icons Β· Keybinds Β· Build .exe Β· Architecture
Bonus, check Make Shortcuts.py in the dir for copying/creating .exe and .ink files from the computer
|
|
git clone https://github.com/compromisee/PyDoc.git
cd PyDoc
pip install -r requirements.txt # pywebview (required) + tray/hotkey extras
python launcher.pyWindows: double-click
Run PyDoc.bat(installs deps on first run, launches withpythonwso there's no console window). pywebview uses the built-in Edge WebView2 runtime shipped with Windows 10/11.
| Package | Unlocks |
|---|---|
pywebview |
Required β the native Fluent window |
keyboard |
Global Alt+Space + Ctrl+Win+N + per-shortcut hotkeys |
pystray + pillow |
System-tray icon |
pyinstaller |
Build a standalone .exe |
The app degrades gracefully β without keyboard/pystray everything else still works.
install.cmd :: installs deps, registers auto-start, adds a Start Menu shortcut
uninstall.cmd :: stops it, removes the auto-start entry + Start Menu shortcut- Launch it (or press
Alt+Space). - Type to search apps, shortcuts, math, or the web.
β βto move,Enterto open.- Drag any file/folder/link onto the window to add it as a shortcut.
- Press
Ctrl+Win+N(or the + button) to add one manually. - Select a shortcut and press
Ctrl+Dto remove it.
PyDoc only ever lists:
- files inside the
Shortcuts/folder (.lnk,.exe,.url, docs, folders,.qllink) - custom entries in
shortcuts.json
Dropped items are saved as a tiny .qllink JSON file in Shortcuts/:
{ "name": "Figma", "target": "https://figma.com", "icon": "π¨", "image": "winui:edit" }Delete the file (or press Ctrl+D) to remove the shortcut.
Pick an icon for any shortcut from the icon picker (click the icon tile in the Add/Edit form):
| Source | How |
|---|---|
| Default | Auto-guessed emoji from the file type / URL |
| Fluent | Search 239 bundled windows-ui icons (offline) |
| Material | Type a Google Material name (rocket_launch) β downloaded & cached to Icons/ |
| Emoji | Paste any emoji, or pick from quick-picks |
| File | Choose your own .ico / .svg / .png (copied into Icons/) |
All global hotkeys are editable in Settings β Keybinds with a click-to-record control.
| Action | Default | Scope |
|---|---|---|
| Toggle launcher | Alt+Space |
Global |
| Add new shortcut | Ctrl+Win+N |
Global |
| Per-shortcut launch | (your choice) | Global |
| Move selection | β / β Β· PgUp/PgDn |
In-app |
| Open selected | Enter |
In-app |
| Open Shortcuts folder | Ctrl+Enter |
In-app |
| Pin / unpin | Ctrl+P |
In-app |
| Remove shortcut | Ctrl+D (or Del when search is empty) |
In-app |
| Next theme | Tab |
In-app |
| Settings | Ctrl+, |
In-app |
| Hide | Esc |
In-app |
Toggle βStart automatically on Windows loginβ in Settings, or run install.cmd.
It writes a PyDoc value to:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
launching with pythonw.exe at sign-in. Remove it with the toggle or uninstall.cmd.
pip install pyinstaller
python build.py # β dist/PyDoc.exe (single file, no console)
python build.py --onedir # folder build (faster startup)
python build.py --console # keep a console for debuggingThe web UI, vendored Fluent assets and themes are bundled into the executable.
Drop an Icons/app.ico before building to brand the .exe.
PyDoc/
βββ launcher.py # pywebview host: window, tray, hotkeys, drag-drop, JS-API bridge
βββ core.py # all logic (scan, search, calc, icons, autostart, store) β headless-testable
βββ build.py # PyInstaller packaging
βββ install.cmd # register auto-start + Start Menu shortcut
βββ uninstall.cmd # remove them again
βββ Run PyDoc.bat # Windows double-click launcher
βββ requirements.txt
βββ web/
β βββ index.html # Fluent UI markup (windows-ui-fabric classes)
β βββ app.css # Win 11 skin + theme variables
β βββ app.js # front-end logic, talks to Python via pywebview.api
β βββ vendor/ # bundled windows-ui-fabric (CSS/JS) + 239 winui icons
βββ Shortcuts/ # β the ONE folder (drop files / .qllink here)
βββ Icons/ # downloaded Material + imported custom icons (auto)
βββ config.json # settings (auto-created)
βββ themes.json # theme accent + mode (auto-created)
βββ shortcuts.json # custom entries (auto-created)
βββ store.json # usage + metadata: pins/groups/aliases/hotkeys/icons (auto)
Bridge: app.js calls window.pywebview.api.<method>() β methods on the Api
class in launcher.py β logic in core.py. Opening web/index.html in a plain
browser falls back to a built-in mock so the UI can be designed without Python.
{
"theme": "Windows 11 Dark",
"hotkey": "ctrl+windows+n",
"hotkey_add": "ctrl+windows+a",
"show_path_subtext": true,
"autostart": false,
"show_on_launch": true,
"max_results": 9,
"enable_calculator": true,
"enable_websearch": true,
"web_search_url": "https://www.google.com/search?q={q}",
"material_cdn": "https://cdn.jsdelivr.net/npm/@material-icons/svg/svg/{name}/baseline.svg"
}{
"Windows 11 Dark": { "mode": "dark", "primary": "#4cc2ff" },
"Windows 11 Light": { "mode": "light", "primary": "#0067c0" }
}Add your own β they appear in the picker automatically.
| Platform | Window | Tray | Hotkeys | Auto-start |
|---|---|---|---|---|
| Windows 10/11 | β WebView2 | β | β | β (Run key) |
| macOS | β (cocoa) | β | β | |
| Linux | β (GTK/Qt) | β | keyboard |
β |
- No window appears β install pywebview:
pip install pywebview. On Linux add[qt]or[gtk]. - Hotkeys don't fire β
pip install keyboard(Linux may need to run with sufficient privileges). - No tray icon β
pip install pystray pillow. - Material icon won't fetch β check internet; names are snake_case from fonts.google.com/icons.
Issues and PRs welcome! Ideas: more themes, indexed Start-Menu apps, plugin actions, clipboard history.
- UI framework: windows-ui (windows-ui-fabric) by
@virtualvivek β MIT. Its
distCSS/JS + the companion icon font are vendored inweb/vendor/. - Native window: pywebview.
- Material icons: Google Material Icons.
Released under the MIT License.
