Zero for Outlook adds configurable keyboard shortcuts and extends functionality of Outlook on the web, making it more efficient and enjoyable to use.
Caution
These extensions are still in early beta and are under active development. Expect breaking changes. Use at your own risk and so on.
Tip
Find a bug? Open an issue.
Note
The docs including this README are extremely out of date. A docs site is currently being created. And will be updated at the docs site
Zero for Outlook provides a comprehensive set of keyboard shortcuts and features to enhance your Outlook web experience:
-
Undo archive shortcut (default:
Z)- Triggers Outlook's built-in Undo after archiving or moving a message
- Configurable via the options page
- Only active when you're not typing in an input/textarea/editor
-
Command bar (default:
Cmd/Ctrl + K)- Superhuman-style command palette for quick access to all features
- Search and execute commands with keyboard navigation
- Press
Escor click outside to close
When enabled, provides Vim-like navigation for folders and messages:
h(orlfrom the message list) focuses and "pins" the left sidebar/folder list- While pinned,
j/kmove up and down items in the sidebar - Press
lfrom the sidebar to move into the message list; thenj/kmove between messages - In the message list, Shift +
j/ Shift +kact like Shift + ↓ / Shift + ↑, extending the current selection so you can select multiple messages at once - All vim keys are ignored while typing in inputs, textareas, or rich-text editors
- Default is on, can be toggled from the options page
- Press
swhen a message is selected to open a beautiful overlay menu for snoozing or unsnoozing - In regular views, shows options to snooze: Later today, Tomorrow, This weekend, Next week, and Choose a date
- In the Scheduled folder, shows an Unsnooze option to move messages back to the Inbox
- Navigate with
j/k, select with Enter, and close with Esc ors - Displays concrete times (e.g., "5:00 AM", "Wed 8:00 AM") when Outlook provides them
The command bar (Cmd/Ctrl + K) provides quick access to:
-
Message Actions
- Undo last action
- Summarize current email (requires Gemini API key)
- Unsubscribe (finds and clicks unsubscribe links)
- Snooze presets (Later today, Tomorrow, This weekend, Next week)
- Unsnooze
-
Navigation
- Focus sidebar
- Focus message list
- Open Calendar
- Open Inbox/Mail
- Open Bookings
- Open To Do
- Open Outlook settings
-
Extension Settings
- Toggle dark mode
- Toggle celebration (inbox zero overlay)
- Hide/show Outlook options bar
- Open Zero for Outlook options page
- Add custom shortcut (element picker)
-
Custom Shortcuts
- All your custom shortcuts appear in the command bar
- Can be executed directly from the command bar
-
Email Summarization (requires Gemini API key)
- Uses Google's Gemini API to summarize email conversations
- Focuses on key decisions, requests, dates, and next steps
- Accessible via command bar or shortcut
-
AI Title Editing (requires Gemini API key)
- When creating custom shortcuts, optionally use AI to generate better names and descriptions
- Helps format keyboard shortcut names for UI elements
- Can be toggled on/off in options
- Create keyboard shortcuts for any button or element on screen
- Use the element picker (accessible from command bar) to select elements
- Optionally use AI to generate better names and descriptions
- All custom shortcuts appear in the command bar
- Manage all custom shortcuts from the options page
- Dark Mode: Glassy, dark theme for overlays and options page
- Inbox Zero Celebration: Optional fireworks/celebration overlay when your inbox reaches zero
- Options Bar Toggle: Hide/show Outlook's options bar and header for a cleaner interface
- Multi-select Support: Use Shift+j/k in vim mode to select multiple messages
- The extension never collects or sends any email content or browsing data
- There is no analytics or telemetry and no external network requests from the extension code (except when using optional AI features)
- AI Features: When using Gemini API features (email summarization or AI title editing), your content is sent to Google's Gemini API. This requires you to provide your own API key, which is stored locally in your browser's extension storage
- The only data stored locally is:
- Your chosen shortcuts (undo, command bar)
- Feature toggles (vim navigation, dark mode, inbox zero, options bar, AI title editing)
- Custom shortcuts configuration
- Gemini API key (if provided, stored locally only)
The extension is scoped to Outlook web only:
https://outlook.live.com/*https://outlook.office.com/*https://outlook.office365.com/*
- Clone or download this repository
- Run
bun installto install dependencies - Run
bun run buildto build the extension - Open Chrome and navigate to
chrome://extensions - Enable Developer mode (top-right toggle)
- Click Load unpacked and select the
dist/chromefolder - Open Outlook on the web in a tab and start using the shortcuts
- Clone or download this repository
- Run
bun installto install dependencies - Run
bun run buildto build the extension - Open Firefox and navigate to
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on…
- Select the
manifest.jsonfile in thedist/firefoxfolder - Open Outlook on the web and start using the shortcuts
Run bun run package to create distribution-ready zip files:
dist/zero-for-outlook-chrome.zipdist/zero-for-outlook-firefox.zip
zero-for-outlook/
├── src/
│ ├── background/
│ │ └── index.js # Background script (handles API calls, options page opening)
│ ├── contentScript/
│ │ ├── core/ # Core functionality
│ │ │ ├── browserApi.js
│ │ │ ├── dom.js
│ │ │ ├── initialization.js
│ │ │ ├── keyboardHandler.js
│ │ │ ├── messageList.js
│ │ │ ├── settings.js
│ │ │ └── shortcuts.js
│ │ ├── features/ # Feature modules
│ │ │ ├── commandBar.js # Command bar overlay
│ │ │ ├── darkMode.js # Dark theme management
│ │ │ ├── elementPicker.js # Custom shortcut element picker
│ │ │ ├── inboxZero.js # Inbox zero celebration
│ │ │ ├── navigation.js # Navigation helpers
│ │ │ ├── optionsBar.js # Outlook options bar toggle
│ │ │ ├── snooze.js # Snooze overlay
│ │ │ ├── summary.js # Email summarization overlay
│ │ │ ├── undo.js # Undo archive
│ │ │ └── vimMode.js # Vim-style navigation
│ │ ├── styles/ # CSS for overlays
│ │ │ ├── commandBar.css
│ │ │ ├── elementPicker.css
│ │ │ ├── llmEditing.css
│ │ │ └── summary.css
│ │ └── index.js # Content script entry point
│ ├── options/ # Options page
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── assets/
│ │ └── icons/ # Extension icons
│ └── manifest.json # Base manifest (transformed for Chrome/Firefox)
├── scripts/
│ ├── build.js # Build script (transforms manifest, copies files)
│ └── package.js # Packaging script (creates zip files)
├── dist/ # Build output
│ ├── chrome/ # Chrome extension (Manifest V3)
│ ├── firefox/ # Firefox extension (Manifest V2)
│ └── *.zip # Distribution packages
├── vite.config.mts # Vite configuration
└── package.json
- Build:
bun run build- Builds the content script with Vite and copies files todist/chrome/anddist/firefox/ - Package:
bun run package- Builds and creates zip files for distribution
The project uses:
- Vite for building the content script (bundles ES modules into a single IIFE)
- Manifest V3 for Chrome
- Manifest V2 for Firefox (required for Firefox compatibility)
- Modular architecture with feature-based modules
To add more shortcuts or features:
- Add a new feature module in
src/contentScript/features/ - Register it in
initialization.jsto load and wire it up - Add commands to the command bar in
commandBar.jsif applicable - Add options UI in
src/options/if configuration is needed - Update settings in
src/contentScript/core/settings.jsif new settings are needed
This repository uses GitHub Actions to automatically manage version tags.
How it works:
- Triggers on Push: Runs every time you push code to
main - Calculates Version: It looks at your previous tags. If the last tag was
v1.0.0, it automatically bumps it tov1.0.1(a "patch" update) - Tags & Pushes: It creates the new tag in the repo automatically
You can force a larger version jump by including specific words in your commit message:
#major(jumps from v1.0.0 to v2.0.0)#minor(jumps from v1.0.0 to v1.1.0)
Copyright (C) 2026 Luke Colvin