# Startup Metrics Logger [![Obsidian Community Plugin](https://img.shields.io/badge/Obsidian-Community%20Directory-purple?logo=obsidian)](https://community.obsidian.md/plugins/startup-metrics-logger) [![GitHub release](https://img.shields.io/github/v/release/hannesdelbeke/obsidian-startup-metrics-logger)](https://github.com/hannesdelbeke/obsidian-startup-metrics-logger/releases) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) A lightweight, dedicated Obsidian PKM plugin that measures launch performance, tracks the exact initialization time of every community plugin, and outputs **structured logs (JSON, Markdown, and JSONL)** specifically formatted for **AI consumption, automated performance monitoring, and vault optimization**. Available in the official **[Obsidian Community Plugins Directory](https://community.obsidian.md/plugins/startup-metrics-logger)**. --- ## 🚀 Why This Plugin? Obsidian already has a built-in *"Debug startup time"* option (`Settings > Community plugins > Debug startup time`), but: - It only renders a temporary, transient UI popup notice on startup. - It does **not** persist data to disk. - It provides no historical logs or trend tracking. - An AI assistant or external script cannot inspect or analyze it without a structured file in your vault. this plugin let's AI's access startup time of plugins: ``` It worked! The auto-prioritization successfully placed the logger first, allowing it to capture every plugin during cold boot. Here is the breakdown of your latest startup at 08:11:36 UTC: ────── ### 📊 Startup Overview Metric | Duration | Notes -----------------------------------|--------------------|----------------------------------------------------------- 🚀 Time to Layout Ready | 2,534.9 ms (~2.5s) | Total time until the vault workspace became interactive 🔌 Total Community Plugins Load | 359.6 ms | Cumulative time spent initializing all 15 enabled plugins ⚡ Core Obsidian & Vault Indexing | 2,175.3 ms | Time spent on core engine, cache reading, and workspace | | restoration ────── ### 🧩 Top Plugins by Startup Load Time 1. Iconize (obsidian-icon-folder) ████░░░░░░ 141.0 ms (39.2%) 2. Git (obsidian-git) ███░░░░░░░ 95.4 ms (26.5%) 3. Dataview (dataview) ██░░░░░░░░ 55.7 ms (15.5%) 4. Plugin Groups ░░░░░░░░░░ 10.3 ms (2.9%) 5. Recent Files ░░░░░░░░░░ 8.8 ms (2.4%) 6. JavaScript Init ░░░░░░░░░░ 8.6 ms (2.4%) 7. Remember cursor position ░░░░░░░░░░ 8.1 ms (2.3%) 8. Homepage ░░░░░░░░░░ 8.0 ms (2.2%) ... [7 other fast plugins < 7ms each] ────── ### 🤖 Key Takeaways: 1. Top 3 Bottlenecks: Iconize (141ms), Git (95.4ms), and Dataview (55.7ms) together account for 81.2% of your total plugin load time. 2. Overall Health: At ~2.5s total layout ready, your vault is loading fast. 3. Automated Logging: The logs were automatically written to: • 📄 startup-metrics.md • 🤖 startup-metrics.json • 📜 startup-history.jsonl (recorded entry #4 with full telemetry). ``` **Startup Metrics Logger** solves this by: 1. **Capturing Obsidian's startup measurements** automatically. 2. **Hooking dynamic plugin loads & offering a live 1-click Benchmark Profiler**. 3. **Writing structured logs**: - `startup-metrics.json`: Rich machine-readable JSON designed for AI agents. - `startup-metrics.md`: Visual markdown summary with visual bars, tables, and AI diagnostic hints. - `startup-history.jsonl`: Append-only history to track vault performance trends over time. --- startup metrics logger settings screenshot sample markdown output: ```markdown # ⏱️ Obsidian Startup Metrics & Performance Report > [!TIP] AI Assistant Context > This file is generated automatically by **Startup Metrics Logger**. > Use this structured telemetry to analyze vault launch latency, diagnose slow plugins, and recommend optimization steps. - **Timestamp:** `2026-08-29T07:52:55.448Z` - **Vault:** `pkm` - **Platform:** `desktop (Windows)` - **Total Enabled Plugins:** `15` / `52 installed` --- ## 📊 Startup Overview | Metric | Duration | Description | | :--- | :--- | :--- | | 🚀 **Time to Layout Ready** | **`6787.4 ms`** | Time from process start until workspace is fully responsive | | 🔌 **Total Plugin Load Time** | **`4984 ms`** | Cumulative time spent initializing active community plugins | | ⚡ **Core & Indexing Overhead** | **`1803.4 ms`** | Estimated Obsidian core engine & workspace restoration time | | 🕒 **Total Startup Duration** | **`91074.7 ms`** | Total elapsed time to full stability | --- ## 🤖 AI Diagnostic Insights - **Status:** **`CRITICAL`** - **Summary:** 6 slow plugin(s) account for 4983.999999999999ms of startup delay. ### Actionable Recommendations - Top bottleneck plugins: Dataview (3195.7ms), Code Viewer (1155.1ms), Iconize (228.2ms). - Consider using a Lazy Loader / Plugin Groups plugin to defer non-essential plugins after startup. - Enable 'Debug startup time' in Obsidian Settings > Community Plugins to provide exact cold-start millisecond measurements. --- ## 🧩 Plugin Load Time Breakdown | # | Plugin Name | Version | Load Time | Share of Plugins | Status | | :- | :--- | :--- | :--- | :--- | :-: | | 1 | **Dataview** (`dataview`) | `0.5.68` | **3195.7 ms** | `██████░░░░` 64.1% | 🔴 **SLOW** | | 2 | **Code Viewer** (`code-viewer`) | `1.0.6` | **1155.1 ms** | `██░░░░░░░░` 23.2% | 🔴 **SLOW** | | 3 | **Iconize** (`obsidian-icon-folder`) | `2.14.7` | **228.2 ms** | `░░░░░░░░░░` 4.6% | 🔴 **SLOW** | | 4 | **Git** (`obsidian-git`) | `2.38.6` | **104.3 ms** | `░░░░░░░░░░` 2.1% | 🔴 **SLOW** | | 5 | **Recent Files** (`recent-files-obsidian`) | `1.7.10` | **88.6 ms** | `░░░░░░░░░░` 1.8% | 🔴 **SLOW** | | 6 | **Supercharged Links** (`supercharged-links-obsidian`) | `0.13.10` | **80 ms** | `░░░░░░░░░░` 1.6% | 🔴 **SLOW** | | 7 | **Remember cursor position** (`remember-cursor-position`) | `1.0.13` | **29.5 ms** | `░░░░░░░░░░` 0.6% | 🟢 OK | | 8 | **Homepage** (`homepage`) | `4.4.4` | **24.1 ms** | `░░░░░░░░░░` 0.5% | 🟢 OK | | 9 | **Plugin Groups** (`obsidian-plugin-groups`) | `2.1.0` | **19.8 ms** | `░░░░░░░░░░` 0.4% | 🟢 OK | | 10 | **Paste image Png to Jpeg** (`obsidian-paste-png-to-jpeg`) | `1.0.5` | **18.7 ms** | `░░░░░░░░░░` 0.4% | 🟢 OK | | 11 | **Auto Wikilink** (`obsidian-auto-wikilink`) | `1.0.0` | **17 ms** | `░░░░░░░░░░` 0.3% | 🟢 OK | | 12 | **Collapse Properties** (`collapse-properties`) | `1.0.0` | **11.5 ms** | `░░░░░░░░░░` 0.2% | 🟢 OK | | 13 | **Unified Search** (`unified-search`) | `1.0.0` | **7.7 ms** | `░░░░░░░░░░` 0.2% | 🟢 OK | | 14 | **JavaScript Init** (`obsidian-javascript-init`) | `1.0.2` | **3.8 ms** | `░░░░░░░░░░` 0.1% | 🟢 OK | | 15 | **Startup Metrics & Plugin Load Time Logger** (`startup-metrics-logger`) | `1.0.0` | **0 ms** | `░░░░░░░░░░` 0% | 🟢 OK | --- *Generated by [Startup Metrics Logger](https://github.com)* ``` ## 📦 Installation ### Option 1: Install from Community Directory (Recommended) 1. Open Obsidian and go to **Settings > Community plugins**. 2. Make sure **Restricted Mode** is turned off. 3. Click **Browse** and search for **`Startup Metrics Logger`** (or open [community.obsidian.md/plugins/startup-metrics-logger](https://community.obsidian.md/plugins/startup-metrics-logger)). 4. Click **Install**, then **Enable**. 5. *(Recommended)* In **Settings > Community plugins**, toggle on **"Debug startup time"** to allow the plugin to capture exact cold-start numbers on every restart. ### Option 2: Manual Installation (GitHub Release) 1. Download `main.js`, `manifest.json`, and `styles.css` from the latest [Release](https://github.com/hannesdelbeke/obsidian-startup-metrics-logger/releases). 2. Copy the files into your vault's plugins folder: `/.obsidian/plugins/startup-metrics-logger/` 3. In Obsidian, go to **Settings > Community plugins** and toggle **Startup Metrics Logger** to **ON**. --- ## ⚡ How Plugin Load Order Works (Loading First) Obsidian initializes community plugins **sequentially in the exact array order** defined in: `.obsidian/community-plugins.json` For **Startup Metrics Logger** to intercept and accurately measure every community plugin as it loads during boot, it **must run first** (`index 0`). * **Automatic Priority (Enabled by default):** The plugin includes an **Auto-Prioritize First In Load Order** setting. Whenever Obsidian launches or settings are updated, the plugin automatically ensures it is at the very top of `community-plugins.json`. * **Manual Verification:** If you manage your plugin order manually, ensure `"startup-metrics-logger"` is at the top of `.obsidian/community-plugins.json`: ```json [ "startup-metrics-logger", "obsidian-git", "dataview", ... ] ``` --- ## 🤖 Log Outputs for AI Ingestion ### 1. `startup-metrics.json` (Machine-Readable) ```json { "schema_version": "1.0.0", "timestamp": "2026-08-29T07:45:00.123Z", "environment": { "platform": "desktop", "os": "Windows", "obsidian_version": "Obsidian", "is_mobile": false }, "vault": { "name": "Personal Knowledge Base", "total_plugins_installed": 18, "total_plugins_enabled": 14 }, "timings": { "total_app_startup_ms": 1450.2, "time_to_layout_ready_ms": 1320.0, "plugins_combined_load_ms": 710.5, "core_overhead_estimate_ms": 609.5 }, "plugins": [ { "id": "dataview", "name": "Dataview", "version": "0.5.67", "author": "BlacksmithGu", "loadTimeMs": 285.0, "percentageOfPluginsTime": 40.1, "isSlow": true, "source": "native_notice" }, { "id": "obsidian-git", "name": "Git", "version": "2.26.0", "author": "Vinzent", "loadTimeMs": 195.0, "percentageOfPluginsTime": 27.4, "isSlow": true, "source": "native_notice" } ], "ai_analysis": { "status": "warning", "headline": "2 slow plugin(s) account for 480ms of startup delay.", "slow_plugins": ["dataview", "obsidian-git"], "recommendations": [ "Top bottleneck plugins: Dataview (285ms), Git (195ms).", "Consider using a Lazy Loader / Plugin Groups plugin to defer non-essential plugins after startup." ] } } ``` ### 2. `startup-metrics.md` (Human & AI Markdown Report) Includes: - Summary cards (Time to Layout Ready, Plugin Load Time, Core Overhead). - Actionable AI recommendations. - Formatted breakdown table with percentage visual bars (`████░░░░░░ 40.1%`) and slow indicators. --- ## ⚡ Command Palette Actions | Command | Action | | :--- | :--- | | `Startup Metrics: Log current startup metrics to file` | Manually writes/updates the JSON and Markdown logs. | | `Startup Metrics: Run full plugin benchmark (measure load times)` | Runs an automated isolation benchmark of all active plugins. | | `Startup Metrics: Open latest startup metrics report (Markdown)` | Opens the markdown report in a new tab. | | `Startup Metrics: Copy AI diagnostic summary to clipboard` | Copies a pre-formatted prompt with all startup telemetry ready to paste to an AI. | --- ## 🛠️ Settings Configuration - **Auto-Prioritize First In Load Order:** Automatically keeps this plugin at the top (index 0) of `community-plugins.json` so it loads before all other plugins. - **Auto-log on startup:** Toggles automatic generation of logs on every boot. - **Log file paths:** Customize file paths for `startup-metrics.json`, `startup-metrics.md`, and `startup-history.jsonl`. - **Slow Plugin Threshold (ms):** Customize threshold (default 50ms) to flag bottleneck plugins. - **Auto-dismiss Debug Notice:** Automatically closes Obsidian's native startup popup after a configurable number of seconds. - **Interactive Profiler:** Button to launch the isolation benchmark directly from the settings panel. --- ## 📄 License MIT