⬇ Download the latest release — installer (recommended) or portable exe. No build tools needed.
A Windows desktop sidebar inspired by the classic Microsoft Edge sidebar. It docks to the right edge of your screen as a thin icon strip. Click an icon and a panel slides open with that web app — WhatsApp, ChatGPT, Gmail, Claude, or any site you pin. Built with Electron; every site runs as a real top-level page, so logins, cookies, and sessions persist just like a normal browser.
- Installation
- First Launch
- Basic Usage
- Adding Sites to the Sidebar (4 ways)
- The Right-Click App Menu
- Pin vs Auto-Hide
- Resizing the Panel
- Keyboard Shortcuts
- The System Tray Menu
- Settings (Themes, Sizes)
- Backup: Export / Import / Editing the JSON
- Changing App Icons
- Logging In to Sites
- Troubleshooting
- Where Your Data Lives
Requires Node.js 18+.
cd sidebar-desktop
npm install
npm startnpm run buildThis produces a portable .exe and an NSIS installer in the dist/ folder. The portable exe needs no installation — copy it anywhere and run it. The installer is the better choice for daily use (Start Menu entry, clean uninstall, and reliable Start with Windows).
⚠️ Windows SmartScreen note: the exe is unsigned, so on first run Windows may show "Windows protected your PC". Click More info → Run anyway. This is normal for unsigned open-source apps — removing the warning requires a paid code-signing certificate, which most hobby projects skip. The app is fully local and sends no data anywhere.
Right-click the tray icon → check Start with Windows.
On first run the sidebar comes pre-loaded with a starter set of apps: ChatGPT, Claude, Gemini, Copilot, Grok, DeepSeek, Kimi, Perplexity, Meta AI, Mistral, Merlin, STORM, Manus, Wan, Gmail, Gemini Notebook (NotebookLM), WhatsApp, Telegram, Messenger, YouTube Music, GitHub, and Google Translate.
You can remove any of them (right-click → Remove App) and add your own — the defaults only appear the very first time; after that the sidebar shows exactly what you configured.
| Action | How |
|---|---|
| Open an app | Click its icon on the strip |
| Close / minimize the panel | Click the active icon again, press Alt+S, or just click outside the sidebar (if not pinned) |
| Switch apps | Click a different icon — each app keeps running in the background, so switching is instant and nothing reloads |
| Reorder icons | Drag an icon up or down the strip |
| Scroll the strip | If you have many apps, scroll the icon area with the mouse wheel — the + and ⚙ buttons always stay visible at the bottom |
| Quit the app | Right-click the tray icon → Quit |
The sidebar has no taskbar button — it lives in the system tray (near the clock; check the ^ overflow area).
There are four ways, from easiest to most manual:
Open the site in your normal browser (Edge, Chrome, Brave, or Vivaldi), then click the + button on the strip. The sidebar detects the page open in your most recently used browser window and pins it instantly — URL, title, and icon.
Right-click + to open the manual "Add Pinned App" form. Type any URL and an optional title. Bonus: if you've copied a URL to the clipboard, the URL field is pre-filled automatically.
If you use the companion browser extension (the custom-edge-sidebar extension in the parent folder), right-click any page in your browser → "Add this page to Desktop Sidebar". The desktop app must be running.
Export your workspace (Settings → Export Backup JSON), add entries to the savedApps array in the file, and import it back. See section 11 for the format. This is the power-user way to add many sites at once with custom icons.
Right-click any app icon on the strip:
| Menu item | What it does |
|---|---|
| 📌 Pin / Unpin Panel | Pinned apps stay open when you click outside the sidebar. Unpinned apps auto-hide. Saved per app. |
| 📱 Switch to Mobile Version / 💻 Desktop Version | Reloads the app pretending to be an Android phone. Mobile layouts usually fit the narrow panel much better (great for Gmail, YouTube, news sites). Saved per app. |
| 🔄 Reload App | Clears the app's remembered deep link and reloads it fresh from its base URL. Use this if an app gets stuck on a weird page. |
| 🗑️ Remove App | Removes the icon from the sidebar. (Your login for that site is kept, so re-adding it later won't ask you to sign in again.) |
Note: a few sites (notably WhatsApp Web) refuse phone browsers and will demand the mobile app — leave those on Desktop version.
By default the sidebar behaves like the old Edge sidebar: open a panel, click into your browser or any other window, and the panel collapses back to the thin strip automatically.
If you want a panel to stay open while you work elsewhere (e.g. WhatsApp on the side while writing emails):
- Click the 📌 button at the top of the strip while that app is open, or
- Right-click the app's icon → Pin Panel.
The 📌 button is highlighted blue when the current app is pinned. Pinning is remembered per app — WhatsApp can be pinned while everything else auto-hides.
While a panel is open, drag the left edge of the sidebar with your mouse — exactly like resizing any window. The width (300–1400px) is remembered and used for all panels. The collapsed strip itself is fixed-width (configurable in Settings: 40/48/56px).
These work system-wide, even when the sidebar isn't focused:
| Shortcut | Action |
|---|---|
Alt + S |
Toggle the sidebar open/collapsed |
Alt + 1 |
Open pinned app #1 (first icon) |
Alt + 2 |
Open pinned app #2 |
Alt + 3 |
Open pinned app #3 |
Reorder your icons (drag & drop) to control which apps get the number shortcuts.
Right-click the tray icon:
- Collapse / Show Sidebar — toggle the panel.
- Your first 5 apps — jump straight to one.
- Always on Top — keep the sidebar above all windows (on by default).
- Start with Windows — launch at login.
- Troubleshoot → Open DevTools (active app) — browser developer console for the current panel; use when a site misbehaves.
- Troubleshoot → Open debug log — opens the log file with recorded crashes/load failures.
- Quit — fully exit.
Left-clicking the tray icon toggles the sidebar open/closed.
Click ⚙ at the bottom of the strip:
| Setting | Options |
|---|---|
| Theme Preset | Slate Dark, Midnight Blue, Obsidian Black, Deep Purple, Forest Dark, or Custom Color (pick any hex color) |
| Font Size | Small / Medium / Large / Extra Large — scales the sidebar UI text |
| Icon Size | 26 / 32 / 38 px icons |
| Strip Width | 40 / 48 / 56 px |
All settings apply instantly and are saved automatically.
Settings → Export Backup JSON downloads a single file containing your pinned apps, their order, icons, pin/mobile flags, remembered deep links, and theme settings. Import Backup JSON restores it — on a new PC, after a reset, or to share a setup with someone.
Logins are not in the backup (they're browser cookies, stored separately) — after importing on a new machine you'll sign in to each site once.
{
"savedApps": [
{
"url": "https://chatgpt.com", // the app's base URL (required)
"icon": "https://.../favicon.webp", // image URL for the strip icon
"title": "ChatGPT", // tooltip text
"mobile": false, // true = load as mobile site
"pinned": false // true = panel doesn't auto-hide
}
],
"deepLinks": {
"chatgpt.com": "https://chatgpt.com/some/last/page"
},
"customizations": {
"theme": "slate", "customColor": "#0f172a",
"fontSize": "small", "iconSize": "medium", "stripWidth": "medium"
}
}savedApps— one entry per icon, in strip order.deepLinks— the last page you were on, per site; the sidebar reopens apps exactly where you left them. Safe to delete entries (or the whole object) — apps then open at their base URL.mobile/pinnedare optional; they default tofalse.
Edit the file in any text editor, save, and import it back.
The sidebar picks icons automatically: when an app loads, it grabs the site's own favicon. But favicons are often tiny (16–32px) and look blurry on the strip. To use a sharper icon:
- Export your backup JSON (Settings → Export Backup JSON).
- Find the app in
savedAppsand replace its"icon"value with any image URL — the site's high-res app icon, a Wikipedia/press-kit PNG, or icon packs like lobe-icons (e.g.https://raw.githubusercontent.com/lobehub/lobe-icons/refs/heads/master/packages/static-png/light/claude-color.png). - Import the file back.
Custom icons are protected: the automatic favicon updater only ever replaces missing or generic fallback icons, never one you set yourself.
Tips for finding good icon URLs: open the site, press F12 → Network → filter "png/ico/webp", or search "<site> app icon png". Square images ≥64px look best.
Sign in once per site, inside the sidebar — sessions are saved permanently after that (same as a browser profile).
- Regular email/password logins — work as normal.
- "Continue with Google" — works in the panel; some sites open a small sign-in popup window, finish the login there and it closes itself.
- If Google ever refuses ("browser not secure") or a login loops: use the site's email-code / OTP option instead (ChatGPT, Claude, and many others email you a 6-digit code — no password, one time only).
- WhatsApp — scan the QR code with your phone, as usual.
Why you can't reuse your Edge/Chrome logins: the sidebar is its own browser with its own cookie storage. Browsers never share sessions with other apps — that's a web security rule, not a limitation of this app.
| Problem | Fix |
|---|---|
| A site shows a blank/white panel | Right-click its icon → Reload App. If it persists: tray → Troubleshoot → Open DevTools and check the Console tab for errors. |
| A site is stuck on an old/broken page | Right-click icon → Reload App (clears the remembered deep link). |
Alt+S / Alt+1-3 don't work |
Another app has grabbed the shortcut. Close the conflicting app (the browser extension version of this sidebar uses the same keys). |
| Site demands "download the app" / blocks phone view | Right-click icon → Switch to Desktop Version. |
Terminal shows red stun.cloudflare.com errors |
Harmless — that's WhatsApp preparing voice-call support and your network blocking STUN. Chats work fine; only in-sidebar voice/video calls would be affected. |
| Sidebar disappeared | It's in the system tray (check the ^ overflow near the clock). Left-click the tray icon. |
| Start completely fresh | Quit the app, delete %APPDATA%\custom-edge-sidebar-desktop\sidebar-store.json, start again (defaults return). To also wipe logins, delete the whole %APPDATA%\custom-edge-sidebar-desktop folder. |
| Packaging fails after upgrading Electron | npm i -D electron-builder@latest |
The app writes crashes and page-load failures to %APPDATA%\custom-edge-sidebar-desktop\debug.log (tray → Troubleshoot → Open debug log).
Everything is local — nothing is sent anywhere.
| Data | Location |
|---|---|
| Apps, order, icons, settings, deep links | %APPDATA%\custom-edge-sidebar-desktop\sidebar-store.json |
| Logins / cookies / site data | %APPDATA%\custom-edge-sidebar-desktop\Partitions\apps\ |
| Debug log | %APPDATA%\custom-edge-sidebar-desktop\debug.log |
main.js— Electron main process: window docking/resize, oneWebContentsViewper app (partitionpersist:apps), tray, global shortcuts, deep-link tracking, favicon auto-update, per-app mobile UA, Google-login user-agent handling, localhost bridge (port 8971) for the browser extension, and the UI-Automation-based "+ add current tab".preload.js— the safe IPC bridge exposed to the strip UI aswindow.electronAPI.src/strip.html/strip.js/styles.css— the icon strip UI: rendering, drag & drop, context menu, modals, themes.store.js— minimal JSON file store.assets/get-active-tab.ps1— reads the active browser tab's URL via Windows UI Automation (used by the+button).
MIT




