JW Meeting Timer
approvedby Marcos
Fetches the weekly Life and Ministry meeting programme from wol.jw.org and provides per-assignment countdown timers with visual states in a sidebar. - This plugin has not been manually reviewed by Obsidian staff.
JW Meeting Timer
An Obsidian sidebar plugin that provides per-part stopwatches for JW congregation meetings. It automatically fetches the week's programme from wol.jw.org and builds a timer card for each part, so the meeting overseer or timekeeper can track every item with a single tap.
Features
- Auto-fetched schedule — scrapes the week's programme from wol.jw.org in your chosen language. Cached locally; re-fetched only when stale.
- Per-part timer cards — one stopwatch per part; shows elapsed time, a progress bar, and the scheduled end time.
- Advice sub-timers — optional 1-minute instructor-feedback timer below applicable parts (Bible reading, ministry demonstrations).
- Visual overtime indicator — card turns red when a part exceeds its allotted time; audio beep and/or vibration alert (configurable).
- Meeting progress bar — global bar showing total elapsed vs. total allotted time.
- Week navigation — browse past and future weeks.
- Customisable parts — add your own stopwatches, edit labels/durations, reorder parts with long-press, delete parts.
- Auto-start next part — when you pause a part, the next one in the same section starts automatically (opt-in).
- Export — share a text summary via WhatsApp, Telegram, etc.
- 14 languages — English, Spanish, French, Portuguese, German, Italian, Russian, Romanian, Bulgarian, Dutch, Polish, Japanese, Korean, Simplified Chinese.
- Auto-detect locale on first install based on your device language.
Installation via BRAT (recommended for beta testers)
BRAT (Beta Reviewers Auto-update Tool) lets you install plugins directly from GitHub without waiting for them to be in the Obsidian community plugins directory.
Step 1 — Install BRAT
- Open Obsidian → Settings → Community plugins.
- Make sure Restricted mode is off.
- Click Browse, search for BRAT, and install it.
- Enable BRAT.
Step 2 — Add this plugin via BRAT
- Open the BRAT settings (Settings → BRAT).
- Click Add Beta plugin.
- Paste the repository URL:
https://github.com/MarckFp/jw-timer-obsidian - Click Add Plugin. BRAT will download and install it.
- Go to Settings → Community plugins, find JW Meeting Timer, and enable it.
Step 3 — First launch
A timer sidebar will open automatically. A settings panel appears under Settings → JW Meeting Timer.
Manual installation (advanced)
- Download
main.js,manifest.json, andstyles.cssfrom the latest release. - In your vault, navigate to
.obsidian/plugins/and create a folder namedjw-timer-sidebar. - Copy the three files into that folder.
- Restart Obsidian, then enable the plugin under Settings → Community plugins.
Usage
Opening the sidebar
- Click the timer icon (⏱) in the left ribbon, or
- Run the command "Open JW Meeting Timer sidebar" from the command palette (
Ctrl/Cmd + P).
Navigating weeks
Use the ◀ ▶ arrows in the nav bar to browse weeks. The Today button jumps back to the current week.
Using the timers
| Action | How |
|---|---|
| Start a part | Tap Play |
| Pause a part | Tap Pause |
| Reset a part | Tap Reset → Confirm? |
| Reset all | Tap Reset All → Confirm? |
| Edit / Delete / Move a part | Long-press a card → overlay menu |
| Add a custom stopwatch | Tap the + button in the toolbar |
Exporting results
Scroll to the bottom of the list to find the Share button:
- Share — builds a plain-text summary of all parts and their elapsed times. On mobile (Android/iOS), this opens the native share sheet so you can send it via WhatsApp, Telegram, email, etc. On desktop it copies the text to the clipboard.
Settings
Open Settings → JW Meeting Timer.
| Setting | Description |
|---|---|
| Language | WOL locale used to fetch and display the schedule. |
| Custom locale (advanced) | Enter any WOL locale path (e.g. r4/lp-s) to use a language not in the dropdown. |
| Meeting start time | Start time in 24-hour format, e.g. 20:00. |
| Opening song + prayer (min) | Minutes reserved before the first programme part (song + prayer). Default: 5. |
| Show advice timers | Show the 1-minute instructor advice sub-card below applicable parts. |
| Auto-start next part | When you pause a part, automatically start the next one in the same section. |
| Sound alert at overtime | Play a repeating beep when a part exceeds its allotted time. |
| Sound alert duration | How long the beep plays (seconds). |
| Vibration alert at overtime | Vibrate the device at overtime. Mobile only. |
| Vibration alert duration | How long the device vibrates (seconds). |
How it works
- On load, the plugin fetches the weekly programme from
wol.jw.org/{locale}/wol/meetings/r*/lp-*for the current week. - The HTML is parsed to extract part labels, durations, and sections.
- Timer states (elapsed ms) are persisted in Obsidian's plugin data so timers survive restarts.
- A 250 ms tick updates only the cards whose timers are currently running (skipped entirely when all timers are idle).
Development
# Install dependencies
npm install
# Build (esbuild, watch mode)
npm run dev
# Production build
npm run build
# Type-check only
npx tsc --noEmit
Entry point: src/main.ts
Bundled output: main.js (loaded by Obsidian)
Project structure
src/
├── main.ts Plugin entry point & data persistence
├── view.ts JwTimerView — the sidebar ItemView
├── scraper.ts wol.jw.org HTML parser
├── timer-engine.ts In-memory timer state machine
├── types.ts Shared TypeScript interfaces
├── settings-tab.ts Settings panel
└── ui/
├── locale.ts i18n strings (14 languages)
├── helpers.ts Pure utility functions & CardRefs interface
├── modals.ts EditPartModal, AddPartModal
├── card-renderer.ts renderCard / renderAdviceCard (CardController pattern)
└── exporter.ts Export-to-text (share / clipboard) logic
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.