Zeem automatically joins and leaves your Zoom meetings on a weekly schedule. Set it once—no more rushing to links.
Note
Currently only available on Windows. Support for Linux and MacOS systems will come next release.
if you want to work on cross-system support, you are welcome to create a pull request!
- Run the installer you downloaded (Zeem-0.1.1-Setup.exe) and follow the prompts.
- Click “+ Add Meeting”
- Paste your Zoom link, choose the weekday, and set the start and end times
- Save. Repeat for other meetings
- Toggle any meeting on/off without deleting it
- Leave the app running. Zeem will:
- Join shortly before your meeting starts
- Open Zoom if it isn’t already running
- Leave when the meeting’s end time is reached
- Use the “Join Meeting” button in the sidebar to join immediately
- You can keep meetings in your list and disable them temporarily
- Times follow your system clock (12/24‑hour based on your Windows settings)
- Zoom didn’t open or join: check the link and try joining manually once, then reopen Zeem
- Didn’t auto‑leave: verify the meeting’s end time
- Blank window: quit and open Zeem again; if it persists, reinstall from the latest installer
- Your meetings are stored locally on your computer. Zeem doesn’t upload your data.
- Zeem has no login, all user interactions are anonymous.
Zeem is an Electron + React app. The main process schedules meetings and controls Zoom. The renderer shows your schedule and status.
- Windows with Zoom installed (typically
%APPDATA%/Zoom/bin/Zoom.exeorC:/Program Files/Zoom/bin/Zoom.exe) - Node.js 18+
- Start (build then run):
npm start - Build production assets only:
npm run build
- Package Windows installer (NSIS):
npm run package
- Tailwind builds CSS to
dist/renderer/styles.css - Renderer (React) is bundled by esbuild to
dist/renderer/bundle.js(ESM) scripts/prepareRendererHtml.jswritesdist/renderer/index.htmlfromsrc/renderer/index.htmlwith corrected asset paths- Preload is bundled to
dist/preload/index.js(esbuild, external: electron) - Main is bundled to
dist/main.js(esbuild, external: electron) - Packaging is handled by electron-builder (NSIS target) with asar enabled and
sql.jsWASM unpacked viaasarUnpack/extraResources
src/
main/ # Electron main process (Node APIs)
index.js # app entry; creates DB, window, scheduler, updater
windows/
mainWindow.js # BrowserWindow creation; loads dist/renderer/index.html
ipc/
meetings.ipc.js # IPC for meetings CRUD and toggles
zoom.ipc.js # IPC for join/leave requests
services/
db.js # sql.js persistence (local DB under userData)
scheduler.js # 15s tick; auto-join/-leave; status snapshots
zoom.js # Zoom launch/join/leave helpers
updater.js # electron-updater wiring (skips in dev)
preload/ # Safe bridge (contextIsolation)
index.js # Exposes zeem API to renderer via contextBridge
renderer/ # React UI (no Node APIs)
index.html # Source HTML (transformed to dist/renderer/index.html)
src/
main.jsx # React bootstrap
app.jsx # Main app; status + meeting list
index.css # Tailwind entry
components/
Sidebar.jsx
MeetingsList.jsx
EditModal.jsx
ConfirmModal.jsx
utils/
utils.js
dist/
main.js # bundled main
preload/index.js # bundled preload
renderer/
index.html # prepared HTML
styles.css # Tailwind output
bundle.js # bundled renderer
- Scheduler checks every 15 seconds and maintains a snapshot
{ ongoing, next } - Auto‑join triggers a few minutes before start; ensures Zoom is running
- Auto‑leave at the scheduled end time
- Renderer subscribes to scheduler events to update the UI
electron-builderconfig is inpackage.json > buildasar: true,asarUnpackandextraResourcesforsql.jsWASM- Windows target:
nsis, artifact named${productName}-${version}-Setup.${ext}intorelease/ - Publish is configured for GitHub Releases under
zelkim/zeem
- Auto‑update via
electron-updaterruns on startup (skips in development)
- Local database file (sql.js) lives under the Electron
userDatadirectory (e.g.,%APPDATA%/Zeem/zeem.sqlite)
- The dev
npm startbuilds assets before launching Electron to avoid missing files - You may see Chromium cache warnings on Windows during development; they’re benign
- Keep
contextIsolation: trueand avoid Node APIs in the renderer
Thanks for your interest! PRs and issues are welcome.
- Set up dev
git clone https://github.com/zelkim/zeem.git
cd zeem
npm install
npm start- Make changes
- Keep code style consistent with the existing files
- Add small, focused commits with clear messages
- If you change public behavior, update README and add notes in RELEASE-NOTES.md
- Test locally
- Ensure
npm startruns and the UI functions (add a meeting, join/leave) - Build/package if your changes affect production build:
npm run build
npm run package- Open a PR
- Describe the change, motivation, and testing steps
- Link any related issues
- Include your OS version, Zeem version, and steps to reproduce
- Attach logs or screenshots where possible
MIT