{"id":31581307,"url":"https://github.com/osteele/bisect-obsidian-extensions","last_synced_at":"2026-05-19T07:33:12.617Z","repository":{"id":314992668,"uuid":"1047252175","full_name":"osteele/bisect-obsidian-extensions","owner":"osteele","description":"A binary search tool to identify problematic Obsidian plugins that may be causing crashes, freezes, or other issues in your vault","archived":false,"fork":false,"pushed_at":"2025-08-30T02:51:51.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-19T15:41:19.279Z","etag":null,"topics":["obsidian","obsidian-plugins","troubleshooting"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osteele.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T02:46:39.000Z","updated_at":"2025-08-30T02:52:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"afdb5912-e55c-4faa-9817-d29e95cccbaa","html_url":"https://github.com/osteele/bisect-obsidian-extensions","commit_stats":null,"previous_names":["osteele/bisect-obsidian-extensions"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/osteele/bisect-obsidian-extensions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fbisect-obsidian-extensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fbisect-obsidian-extensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fbisect-obsidian-extensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fbisect-obsidian-extensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osteele","download_url":"https://codeload.github.com/osteele/bisect-obsidian-extensions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osteele%2Fbisect-obsidian-extensions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33206320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-19T07:16:55.748Z","status":"ssl_error","status_checked_at":"2026-05-19T07:16:54.366Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["obsidian","obsidian-plugins","troubleshooting"],"created_at":"2025-10-05T21:56:05.590Z","updated_at":"2026-05-19T07:33:12.611Z","avatar_url":"https://github.com/osteele.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bisect Obsidian Extensions\n\nA binary search tool to identify problematic Obsidian plugins that may be causing crashes, freezes, or other issues in your vault.\n\n## Features\n\n- **Binary search algorithm**: Efficiently narrows down the problematic plugin in O(log n) steps\n- **Automatic backup**: Creates timestamped backups of your plugin configuration before making changes\n- **Safe operation**: Restores original settings on completion or interruption\n- **Step counter**: Shows remaining steps in the search process (similar to `git bisect`)\n- **Process management**: Automatically closes running Obsidian instances before testing\n- **Interactive testing**: Prompts for user feedback after each test configuration\n\n## Installation\n\n1. Ensure Python 3.6+ is installed on your system\n2. Clone or download this repository\n3. Make the script executable (if on macOS/Linux):\n   ```bash\n   chmod +x bisect-obsidian-extensions.py\n   ```\n\n## Usage\n\nRun the script with your vault path as an argument:\n\n```bash\npython bisect-obsidian-extensions.py /path/to/your/vault\n```\n\nOr if made executable:\n\n```bash\n./bisect-obsidian-extensions.py /path/to/your/vault\n```\n\n### Command Line Options\n\n- `vault_path` (required): Path to your Obsidian vault\n- `--keep-lazy`: Include the lazy-plugins extension in the search (see note below)\n\n### Note on lazy-plugins\n\nBy default, the script temporarily excludes the `lazy-plugins` extension from testing if it's enabled. This is because:\n\n1. **Interference with testing**: lazy-plugins delays the loading of other plugins, making it difficult to reliably test whether a specific plugin configuration causes issues\n2. **Intermittent reproduction**: When lazy-plugins is enabled, problems may appear intermittently based on timing, making binary search unreliable\n3. **False negatives**: A problematic plugin might not cause issues immediately if lazy-plugins delays its loading\n\nIf you suspect lazy-plugins itself or its interaction with another plugin is causing issues, you can include it in the search:\n\n```bash\npython bisect-obsidian-extensions.py /path/to/your/vault --keep-lazy\n```\n\n**Warning**: Including lazy-plugins may result in intermittent test results. You may need to use the \"[r] Retry\" option multiple times to confirm whether a configuration is good or bad.\n\n## How It Works\n\n1. **Backup**: The script backs up your current plugin configuration (`community-plugins.json`)\n2. **Binary Search**: Uses proper binary search to isolate the problematic plugin:\n   - Assumes you've already confirmed the problem exists with all plugins enabled\n   - Tests with half the plugins enabled\n   - If problem occurs: the bad plugin is in the enabled half\n   - If no problem: the bad plugin is in the disabled half\n   - Continues bisecting the problematic group\n3. **Testing**: For each test:\n   - Closes any running Obsidian instance\n   - Updates the plugin configuration\n   - Launches Obsidian with your vault\n   - Prompts for your feedback\n4. **Narrowing**: Progressively narrows down to a single plugin\n5. **Confirmation**: Tests with only the suspected plugin disabled to confirm\n6. **Restoration**: Offers to keep the plugin disabled or restore original settings\n\n## Interactive Commands\n\nDuring testing, you'll be prompted with these options:\n\n- `[g]` **Good** - The problem is NOT present with this configuration\n- `[b]` **Bad** - The problem IS present with this configuration  \n- `[r]` **Retry** - Test the same configuration again\n- `[q]` **Quit** - Stop the search and restore original settings\n\n## Example Session\n\n```\n$ python bisect-obsidian-extensions.py ~/Documents/MyVault\n\nObsidian Extension Binary Search Tool\nVault: /Users/username/Documents/MyVault\n✓ Configuration backed up to: /Users/username/Documents/MyVault/.obsidian/community-plugins.backup.20240115_143022.json\n\n⚠ Note: 'lazy-plugins' has been temporarily disabled for testing\n  (it delays plugin loading, making tests unreliable)\n  Use --keep-lazy to include it in the search\n\nFound 32 enabled plugins\nTesting 31 plugins (excluding lazy-plugins)\n\nStarting binary search with 31 enabled plugins\nNote: 'lazy-plugins' has been temporarily excluded from testing\n(Assuming you've already confirmed the problem exists with all plugins enabled)\n\nBisecting: 5 steps left to test after this\n\n--- Testing with 16 plugins enabled ---\nTesting group of 16 suspect plugins:\n  • plugin-1\n  • plugin-2\n  ...\n\nClosing existing Obsidian instance...\nLaunching Obsidian with vault: MyVault\n\n==================================================\nTest the current configuration and report:\n  [g] Good - problem NOT present\n  [b] Bad - problem IS present\n  [r] Retry with same configuration\n  [q] Quit and restore original settings\n==================================================\nYour response: b\n✗ Problem found. Bad plugin is in this group of 16 plugins.\nBisecting: 4 steps left to test after this (roughly 4 steps)\n\n[... continues until problematic plugin is found ...]\n\n✓ Confirmed: The problematic plugin is 'problematic-plugin-name'\n\n==================================================\nRESULT: The problematic plugin is: problematic-plugin-name\n==================================================\n\nKeep this plugin disabled? [y/N]: y\n✓ Configuration saved with 'problematic-plugin-name' disabled\n```\n\n## Safety Features\n\n- **Automatic Backup**: Always creates a backup before making any changes\n- **Graceful Interruption**: Pressing Ctrl+C will restore your original configuration\n- **Error Recovery**: Any unexpected errors trigger automatic restoration\n- **Confirmation Step**: Tests the final result to confirm the problematic plugin\n\n## Requirements\n\n- Python 3.6 or higher\n- macOS (uses `open` command and `osascript` for process management)\n- Obsidian installed on your system\n\n## Troubleshooting\n\n### \"Could not find config file\"\n- Ensure the path points to a valid Obsidian vault (contains `.obsidian` folder)\n- Check that community plugins have been enabled at least once in the vault\n\n### Obsidian doesn't launch\n- Verify Obsidian is installed and can be launched manually\n- Check that the vault name matches what appears in Obsidian's vault switcher\n\n### Plugin still causes issues after bisect\n- There may be multiple problematic plugins\n- Try running the bisect again after disabling the first problematic plugin\n- Consider plugin interactions - some plugins may only cause issues when used together\n- If lazy-plugins was excluded and no problematic plugin was found, the issue might be caused by lazy-plugins interacting with another plugin\n\n### \"No problem found\" but issue persists\nIf the bisect doesn't find a problematic plugin but you still experience issues:\n- The problem might be caused by lazy-plugins (if it was excluded)\n- Run with `--keep-lazy` to include it in the search\n- The issue might be intermittent or related to plugin settings rather than the plugins themselves\n\n## License\n\nMIT License - See LICENSE file for details\n\n## Contributing\n\nContributions are welcome! Please feel free to submit issues or pull requests.\n\n## Notes\n\n- Only searches among currently enabled plugins\n- Preserves plugin load order when testing\n- Works with Obsidian's community plugins only (not core plugins)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosteele%2Fbisect-obsidian-extensions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosteele%2Fbisect-obsidian-extensions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosteele%2Fbisect-obsidian-extensions/lists"}