{"id":45995734,"url":"https://github.com/nuzair46/monarch","last_synced_at":"2026-03-04T00:01:18.226Z","repository":{"id":340555908,"uuid":"1166249346","full_name":"Nuzair46/Monarch","owner":"Nuzair46","description":"Detach, restore, and switch monitor layouts without touching cables.","archived":false,"fork":false,"pushed_at":"2026-02-27T13:16:16.000Z","size":235,"stargazers_count":220,"open_issues_count":9,"forks_count":5,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-03-01T22:26:11.249Z","etag":null,"topics":["display","display-manager","displays","monitor","multimonitor","multimonitortool","ultraw","ultrawide-monitors","windows"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/Nuzair46.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["Nuzair46"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2026-02-25T02:58:07.000Z","updated_at":"2026-03-01T22:12:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"052402c3-12bf-4404-8f8c-515e4573978c","html_url":"https://github.com/Nuzair46/Monarch","commit_stats":null,"previous_names":["nuzair46/monarch"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Nuzair46/Monarch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuzair46%2FMonarch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuzair46%2FMonarch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuzair46%2FMonarch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuzair46%2FMonarch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nuzair46","download_url":"https://codeload.github.com/Nuzair46/Monarch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nuzair46%2FMonarch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30024357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T22:30:10.381Z","status":"ssl_error","status_checked_at":"2026-03-02T22:23:34.650Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["display","display-manager","displays","monitor","multimonitor","multimonitortool","ultraw","ultrawide-monitors","windows"],"created_at":"2026-02-28T21:03:59.813Z","updated_at":"2026-03-04T00:01:18.191Z","avatar_url":"https://github.com/Nuzair46.png","language":"Rust","funding_links":["https://github.com/sponsors/Nuzair46"],"categories":[],"sub_categories":[],"readme":"\u003ccenter\u003e\n  \u003ch1 align=\"center\"\u003eMonarch\u003c/h1\u003e\n  \u003ch4 align=\"center\"\u003eDetach, restore, and switch monitor layouts without touching cables.\u003c/h4\u003e\n  \u003ch5 align=\"center\"\u003eBuilt for fast display switching, standby behavior, and safe rollback if something goes wrong\u003c/h5\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/Nuzair46/Monarch/releases\"\u003e\n      \u003cimg src=\"src-tauri/icons/icon.png\" alt=\"Monarch logo\" width=\"180\" /\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/center\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Nuzair46/Monarch/actions/workflows/ci-build-release.yml\"\u003e\u003cimg alt=\"Release Build and Publish\" src=\"https://github.com/Nuzair46/Monarch/actions/workflows/ci-build-release.yml/badge.svg\" /\u003e\u003c/a\u003e\n  \u003cimg alt=\"Downloads\" src=\"https://img.shields.io/github/downloads/Nuzair46/Monarch/total.svg\" /\u003e\n  \u003cimg alt=\"Latest Release\" src=\"https://img.shields.io/github/v/release/Nuzair46/Monarch?display_name=tag\" /\u003e\n  \u003cimg alt=\"Platform\" src=\"https://img.shields.io/badge/Platform-Windows%2010%2F11-0078D4?logo=windows\u0026logoColor=white\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/Nuzair46/Monarch/releases\"\u003e\u003cstrong\u003eDownload Latest Release\u003c/strong\u003e\u003c/a\u003e\n  ·\n  \u003ca href=\"#quick-start\"\u003e\u003cstrong\u003eQuick Start\u003c/strong\u003e\u003c/a\u003e\n  ·\n  \u003ca href=\"#if-something-goes-wrong\"\u003e\u003cstrong\u003eRecovery\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## What Is Monarch?\n\nMonarch lets you:\n\n- Detach a monitor in software (no cable unplugging)\n- Reattach it later\n- Save display layouts as profiles\n- Restore the previous layout quickly\n- Recover automatically with a confirmation timeout if a layout change goes wrong\n- Easy apply with hotkeys\n\nIt uses Windows display topology APIs (`DisplayConfig`) to change which outputs are active.\n\n## Download \u0026 Install (End Users)\n\n1. Open the [Releases page](https://github.com/Nuzair46/Monarch/releases)\n2. Download the latest `.msi` installer\n3. Run the installer\n4. Launch `Monarch` from Start Menu or Desktop\n\n## Quick Start\n\n1. Open `Monarch`\n2. In the `Monitors` section, click `Detach` on the display you want to turn off\n3. Confirm the layout change (or it auto-rolls back)\n4. Click `Attach` later to bring the display back\n5. Use `Save Current Layout` in `Profiles` to store common setups\n\n## Safety Features\n\n- Confirmation timer after layout changes\n- Automatic rollback if you do not confirm in time\n- `Restore Last Layout` action\n- Prevents disabling the last active display\n\n## If Something Goes Wrong\n\nTry these in order:\n\n1. Use Monarch tray menu: `Restore Displays`\n2. Reopen Monarch and use `Restore Last Layout`\n3. Use Windows shortcut `Win + P` and choose `Extend` or `PC screen only`\n4. Reboot Windows (usually restores a usable display state)\n\n## Notes (Important)\n\n- Windows only\n- Monarch changes display topology, not monitor power directly\n- Most monitors enter standby when Windows stops sending signal\n- If you change HDR/SDR mode in Windows, Monarch auto-reapplies calibration in the background (best effort)\n\n## Troubleshooting\n\n### The app opens but I can't see the window\n\n- Check the system tray for the Monarch icon\n- Double-click the tray icon or use `Open App`\n\n### A layout change made the screen unusable\n\n- Wait for the confirmation timer to expire (auto rollback)\n- Or use `Win + P`\n\n### My display arrangement in the UI looks outdated\n\n- Refocus the app window (Monarch auto-refreshes)\n- Wait a few seconds for the background refresh poll to update the layout\n\n### Color calibration looks wrong after detaching a display\n\n- Known issue on some systems with custom calibration (ICC / SDR / HDR calibration profiles)\n- In testing, this can be triggered when:\n  - a display is detached in Monarch, and then\n  - Windows `Settings \u003e System \u003e Display` is opened\n- The detach itself may look fine until Windows Display Settings is opened\n- Workaround: reattach the detached display (this often restores the remaining display calibration)\n- If needed, also reapply your calibration using your normal calibration tool / workflow\n\n## FAQ\n\n### Does Monarch physically power off the monitor?\n\nNo. It detaches the display output in Windows. Many monitors then enter standby automatically.\n\n### Is it safe to test?\n\nYes, but test on a non-critical setup first. Monarch includes rollback protection, and `Win + P` / reboot are reliable fallbacks.\n\n### Can I use it with NVIDIA / AMD / Intel?\n\nYes. Monarch is designed to work through Windows display APIs, not vendor-specific GPU control panels.\n\n### Is color calibration perfectly preserved in every Windows display-settings scenario?\n\nNot yet. Monarch handles many calibration cases (including common HDR/SDR transitions), but Windows Display Settings can still cause calibration resets on some systems after topology changes. See `Troubleshooting` for the current known issue and workaround.\n\n## For Developers\n\n\u003cdetails\u003e\n  \u003csummary\u003eBuild / Dev / CI details\u003c/summary\u003e\n\n### Project Layout\n\n- `src/` Rust core library (layouts, profiles, rollback safety, persistence)\n- `src-tauri/` Tauri desktop app + Windows backend\n- `web/` React UI\n- `.github/workflows/` Windows release workflow\n\n### Build Locally (Windows)\n\nRequirements:\n\n- Node.js 20+\n- `yarn`\n- Rust (stable)\n- Visual Studio Build Tools 2022 + Windows SDK (`rc.exe`)\n\nCommands:\n\n```bash\nyarn install\nrustup target add x86_64-pc-windows-msvc\nyarn tauri dev\n```\n\nBuild MSI:\n\n```bash\nyarn tauri build --bundles msi\n```\n\nOutput:\n\n- `src-tauri/target/release/bundle/msi/`\n\n### CI / Release\n\n- Workflow: `.github/workflows/ci-build-release.yml`\n- Manual release workflow runs via `workflow_dispatch` and takes a version input\n- Release pipeline updates these files together before building:\n  - `Cargo.toml`\n  - `src-tauri/Cargo.toml`\n  - `package.json`\n  - `src-tauri/tauri.conf.json`\n- Release pipeline commits the version bump, creates tag `vX.Y.Z`, builds the Windows installer, and publishes the GitHub Release\n\nRelease process:\n\n1. Make sure your release commit is on `main`.\n2. Open `Actions` -\u003e `Release Build and Publish` -\u003e `Run workflow`.\n3. Enter a version (example: `0.2.0`) or bump kind (`patch`, `minor`, `major`).\n4. Run the workflow.\n5. The workflow will bump all version files, commit the change, create the tag, build Windows artifacts, and publish the GitHub Release.\n\n  \u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnuzair46%2Fmonarch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnuzair46%2Fmonarch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnuzair46%2Fmonarch/lists"}