{"id":28319505,"url":"https://github.com/enfp-dev-studio/node-mac-virtual-display","last_synced_at":"2026-03-12T19:34:11.496Z","repository":{"id":131771989,"uuid":"576851827","full_name":"enfp-dev-studio/node-mac-virtual-display","owner":"enfp-dev-studio","description":"A Node native module to create virutal display of macOS","archived":false,"fork":false,"pushed_at":"2026-02-04T05:10:14.000Z","size":242,"stargazers_count":48,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-04T05:58:07.392Z","etag":null,"topics":["display","macos","native","node-addon-api","nodejs","osx","virtual-display"],"latest_commit_sha":null,"homepage":"","language":"Objective-C++","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/enfp-dev-studio.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":"enfp-dev-studio","issuehunt":null,"patreon":"enfpdev","custom":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"otechie":null,"lfx_crowdfunding":null}},"created_at":"2022-12-11T07:26:15.000Z","updated_at":"2026-02-04T02:27:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"6a3bee82-dbb0-4695-8e26-8771f5f1d0a1","html_url":"https://github.com/enfp-dev-studio/node-mac-virtual-display","commit_stats":{"total_commits":52,"total_committers":2,"mean_commits":26.0,"dds":"0.15384615384615385","last_synced_commit":"4ec9cfeaa9c9c841a53f18aeaa3381907a9f563a"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/enfp-dev-studio/node-mac-virtual-display","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enfp-dev-studio%2Fnode-mac-virtual-display","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enfp-dev-studio%2Fnode-mac-virtual-display/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enfp-dev-studio%2Fnode-mac-virtual-display/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enfp-dev-studio%2Fnode-mac-virtual-display/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enfp-dev-studio","download_url":"https://codeload.github.com/enfp-dev-studio/node-mac-virtual-display/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enfp-dev-studio%2Fnode-mac-virtual-display/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30439944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"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":["display","macos","native","node-addon-api","nodejs","osx","virtual-display"],"created_at":"2025-05-25T09:11:00.429Z","updated_at":"2026-03-12T19:34:11.488Z","avatar_url":"https://github.com/enfp-dev-studio.png","language":"Objective-C++","readme":"# node-mac-virtual-display: Native Library for Virtual Display on macOS\n\nA native library for macOS to create virtual displays for your applications using Node.js. This library uses CoreGraphics and CoreDisplay APIs to provide an interface for creating and managing virtual displays on macOS. This library is used in [Tab Display](https://tab-display.enfpdev.com), a service that allows iPads and Android tablets to be used as portable monitors.\n\n## Features\n\n- [x] Create and Destroy single virtual displays on macOS.\n- [x] Configurable display resolution and refresh rate.\n- [x] Create a virtual display by cloning the main display.\n- [x] Added option to select between Mirror and Extend display modes\n- [ ] Support for multiple virtual displays.\n\n## Requirements\n\n- macOS 10.14 or later\n- Node.js 12 or later\n\n## Installation\n\nUse npm to install the library:\n\n```shell\nyarn add node-mac-virtual-display\n```\n## Usage\n\nTo create/destroy a virtual display:\n\n```javascript\nconst VirtualDisplay = require('node-mac-virtual-display')\nconst vdisplay = new VirtualDisplay()\n// Clone primary display\nvdisplay.cloneVirtualDisplay({\n  displayName: \"Clone Display\",\n  mirror: true\n})\n// OR\n// To create a virtual display:\nvdisplay.createVirtualDisplay({\n  width: 1920,\n  height: 1080,\n  frameRate: 60,\n  hiDPI: true,\n  displayName: \"Virtual Display\",\n  mirror: false\n})\n\n//To destroy a virtual display:\nvdisplay.destroyVirtualDisplay()\n```\n\n## Persistent Display Identity\n\nThis library now automatically uses the **Display Name** (`displayName`) as the persistent identity key.\n\n- **Name-Based Persistence**: When you create a display with `displayName: \"My Monitor\"`, it receives a consistent internal ID derived from that name.\n- **Mac Memory**: macOS will remember the window layout and resolution settings associated with that specific name.\n- **Simple Usage**: Just use the same name next time, and your windows will be exactly where you left them.\n\n### ⚠️ Note on Changing Resolutions\nIf you keep the same `displayName` but drastically change the resolution or aspect ratio (e.g., 16:9 -\u003e 4:3), macOS might get confused because it thinks it's the same monitor. If you need a \"fresh\" monitor profile, simply give it a **new name** (e.g. \"Monitor V2\").\n\n\n\n## Contribute\n\nCoffee fuels coding ☕️\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://www.buymeacoffee.com/enfpdev\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n\u003c/p\u003e\n","funding_links":["https://github.com/sponsors/enfp-dev-studio","https://patreon.com/enfpdev","https://www.buymeacoffee.com/enfpdev"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenfp-dev-studio%2Fnode-mac-virtual-display","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenfp-dev-studio%2Fnode-mac-virtual-display","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenfp-dev-studio%2Fnode-mac-virtual-display/lists"}