A multi-panel desktop workspace for focused work. Open Gmail, Calendar, GitHub, and your daily apps side-by-side — no tabs, no browser clutter.
Status: Phase 2 in progress — Windows only.
Stride is a desktop shell that organizes web apps into configurable Workspaces with real, native WebView2 panels — not iframes, not browser tabs.
Each panel runs a full WebView2 instance with a shared session: sign in to Google once and every panel (Gmail, Calendar, Drive, Meet) picks it up automatically.
Panels can also host integrated widgets — lightweight tools like a scratchpad that dock inside the panel area without floating over content.
Pre-built installers are available on the Releases page.
| Installer | Format |
|---|---|
Stride_0.1.6_x64-setup.exe |
NSIS installer |
Stride_0.1.6_x64.msi |
MSI package |
Requirements: Windows 10/11 (x64). WebView2 runtime is bundled with the installer.
Panels & Layouts
- Native multi-panel layout — 2-column, 3-column, and 2×2 grid layouts
- Shared session — cookies and localStorage shared across all panels via a single WebView2 profile; sign in to Google once, all panels pick it up
- Per-panel address bar — navigate or search within any panel
- Drag-to-resize — drag panel separators to adjust widths; sizes persist across sessions
- Deferred loading — WebViews are created once and shown/hidden on workspace switch (never recreated)
Widgets
- Notes widget — per-panel persistent notes with markdown rendering (headings, bullets, checkboxes, code, links), view/edit toggle, auto-save (500ms debounce), version history (last 5), pin a note above the editor, word count, collapsible
- Weather widget — current conditions with dynamic color theming
- Widget overlays — widgets dock above or below the WebView area (not floating), with configurable height
Workspaces
- 4 preloaded workspaces — ready to use on first launch, fully reconfigurable
- Create & edit workspaces — choose name, emoji icon, layout, and configure each panel's URL or widget
- Keyboard navigation —
Ctrl+1…9to jump to any workspace,Ctrl+Tabto cycle
Focus Mode
- Ad filtering — blocks ads on YouTube and across all panels via JS-level interception (
initialization_script); default ON - 4-layer filter: fetch/XHR override + CSS hide + MutationObserver +
appendChildintercept (inline scripts) - YouTube-specific: JSON response pruning (no empty-response crashes),
ytInitialPlayerResponse+playerResponseinterceptors for SPA navigation - EasyList integration — ~2000 bundled domains; auto-updates every 7 days from
easylist.to - Persistent toggle — stored in SQLite; restored before any WebView is created (no race condition)
- Dynamic toggle — enable/disable without reload via
stride:focus-toggleCustomEvent
Shell
- Custom titlebar — Windows 11-style controls (minimize/maximize/close), update notification banner
- Slim sidebar — 52px, active workspace indicator (accent pill + glow), hover tooltips
- Panel header — site favicon, connection status dot, reload and widget controls
WebView2 reliability
- Standard Chrome user agent — fixes WhatsApp Web, Google Meet, and other sites that reject non-browser UAs
- External popups redirect to the system browser instead of opening a new WebView
- Permission handler for camera, microphone, geolocation, and notifications
System
- Auto-update — background update check on launch; banner in titlebar with one-click install
- Error reporting — "Copy error" button formats diagnostics for GitHub Issues
| Workspace | Layout | Panels |
|---|---|---|
| Trabajo 💼 | 3-col | WhatsApp Web · ChatGPT · YouTube — with Weather overlay (top) and Notes overlay (bottom) |
| Finanzas 📊 | 2-col | Yahoo Finance · TradingView |
| Social 🎮 | 3-col | WhatsApp Web · X · Instagram |
| Dev ⚙️ | 3-col | GitHub · GitHub · Vercel |
These are seeds for first launch — workspaces are fully configurable.
| Layer | Technology |
|---|---|
| Desktop shell | Tauri 2 + Rust |
| WebView engine | WebView2 (Windows) |
| Frontend | React 19 + TypeScript + Vite |
| UI components | shadcn/ui + Tailwind CSS v4 |
| State | Zustand |
| Data | TanStack Query + SQLite (tauri-plugin-sql) |
- Node.js ≥ 20
- Rust (stable toolchain)
- Tauri v2 prerequisites — Microsoft C++ Build Tools + WebView2 runtime
npm install
npm run tauri devOn first run, SQLite migrations execute and the default workspaces are seeded. The database is stored at %APPDATA%\stride\stride.db.
npm run tauri buildInstaller artifacts are output to src-tauri/target/release/bundle/.
stride/
├── src/
│ ├── App.tsx # Root: QueryClient + shortcuts + seed
│ ├── types/index.ts # Workspace, Panel, LayoutType
│ ├── store/useWorkspaceStore.ts # Zustand: activeWorkspaceId + webviewMap
│ ├── lib/
│ │ ├── db.ts # SQLite singleton + migrations
│ │ └── seed.ts # First-launch seeding
│ ├── hooks/
│ │ ├── useWorkspaces.ts # Workspace CRUD (TanStack Query)
│ │ ├── usePanels.ts # Panels per workspace
│ │ ├── useWebviews.ts # WebView2 lifecycle (create/show/hide/resize)
│ │ └── useKeyboardShortcuts.ts # Ctrl+1..9, Ctrl+Tab
│ └── components/
│ ├── layout/ # AppShell, PanelGrid, PanelSlot
│ ├── sidebar/ # Sidebar, WorkspaceList, WorkspaceItem
│ ├── panels/ # WebPanel, WidgetPanel, PanelHeader, AddressBar
│ ├── widgets/ # Scratchpad, Notes, and future widgets
│ └── error/ # ErrorBoundary + ErrorDisplay
└── src-tauri/
├── filters/
│ └── easylist_domains.txt # Bundled ad domains (compile-time fallback)
└── src/
├── lib.rs # Plugin registration + command setup
├── filters.rs # FilterEngine + EasyList + FOCUS_MODE_ENABLED AtomicBool
├── focus_filter.js # JS template injected as initialization_script (4 layers)
└── commands/
├── webview.rs # create/resize/show/hide/navigate WebViews
└── focus.rs # set_focus_mode / get_focus_mode Tauri commands
| Shortcut | Action |
|---|---|
Ctrl+1 … Ctrl+9 |
Switch to workspace N |
Ctrl+Tab |
Next workspace |
Ctrl+Shift+Tab |
Previous workspace |
- Multi-panel layouts (2-col, 3-col, 2×2)
- Shared WebView2 session (single login, all panels)
- SQLite persistence (workspaces, panels, notes, history)
- Deferred WebView loading (create once, show/hide)
- Drag-to-resize panels with persisted widths
- Widget overlay architecture (top/bottom dock, configurable height)
- Notes widget — markdown, history, pin, auto-save, word count
- Weather widget
- Custom titlebar (Windows 11 controls, drag region, update banner)
- Sidebar with workspace switcher
- Create & edit workspaces dialog
- Keyboard shortcuts (Ctrl+1…9, Ctrl+Tab)
- WebView2 hardening (user agent, popup redirect, permission handler)
- Auto-update via GitHub Releases
- Error boundary with formatted diagnostics
- Focus Mode — ad filtering (EasyList + YouTube-specific, 4-layer JS interception)
- Empty panel screen (new-tab style with quick-access tiles)
- Next Meeting widget — Google Calendar API integration
- Export / import workspaces as JSON
- Focus Mode (distraction filter based on EasyList) ✓
- Additional widgets: Focus Timer, Daily Briefing, Asset Price, Service Status
- Cloud sync (Pro plan)
- macOS + Linux support
Stride is open source. If you find a bug, use the "Copy error" button on the error screen and paste the output into a new issue.
Pull requests are welcome. For significant changes, open an issue first to discuss the approach.
