Skip to content

bramuchile/stride

Repository files navigation

Stride

Stride Screenshot

A multi-panel desktop workspace for focused work. Open Gmail, Calendar, GitHub, and your daily apps side-by-side — no tabs, no browser clutter.

Version Platform License Built with Tauri Built with React

Status: Phase 2 in progress — Windows only.


What is Stride?

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.


Download

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.


Features

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 navigationCtrl+1…9 to jump to any workspace, Ctrl+Tab to 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 + appendChild intercept (inline scripts)
  • YouTube-specific: JSON response pruning (no empty-response crashes), ytInitialPlayerResponse + playerResponse interceptors 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-toggle CustomEvent

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

Included Workspaces

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.


Tech Stack

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)

Building from Source

Prerequisites

Development

npm install
npm run tauri dev

On first run, SQLite migrations execute and the default workspaces are seeded. The database is stored at %APPDATA%\stride\stride.db.

Production Build

npm run tauri build

Installer artifacts are output to src-tauri/target/release/bundle/.


Project Structure

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

Keyboard Shortcuts

Shortcut Action
Ctrl+1Ctrl+9 Switch to workspace N
Ctrl+Tab Next workspace
Ctrl+Shift+Tab Previous workspace

Roadmap

Done

  • 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)

Next

  • Empty panel screen (new-tab style with quick-access tiles)
  • Next Meeting widget — Google Calendar API integration
  • Export / import workspaces as JSON

Phase 3

  • Focus Mode (distraction filter based on EasyList) ✓
  • Additional widgets: Focus Timer, Daily Briefing, Asset Price, Service Status
  • Cloud sync (Pro plan)
  • macOS + Linux support

Contributing

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.


License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors