{"_id":"@adrianmg/paper-mirror","_rev":"10-1052269da56708079b501d15a7d72773","name":"@adrianmg/paper-mirror","dist-tags":{"experimental":"0.4.0-experimental.2","latest":"0.3.3"},"versions":{"0.2.0":{"name":"@adrianmg/paper-mirror","version":"0.2.0","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.2.0","maintainers":[{"name":"adrianmg","email":"adrianmg@github.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"da61ea6337f82a70e49aa44f840706719258b56b","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.2.0.tgz","fileCount":18,"integrity":"sha512-3sgiGfRKYXwBAYJbs9l/yaJEWSfV/cpWxMk3ClpCq5sQVhlmjx4yzr+V2NyW0BI4HxTdNUEQjYgrM8Q2Q0uEEQ==","signatures":[{"sig":"MEUCIGBXcnH06IFjUpSl7bVUQoE1Qmh2kU5pvTynPFdDieuxAiEAjoPbCXLW5aS9YdzGklOZy+DbHCPvmMrnTQfDRuo4P3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":599185},"type":"module","engines":{"node":">=22.13.0"},"scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","docs:screenshot":"tsx scripts/render-readme-screenshot.ts"},"_npmUser":{"name":"adrianmg","email":"adrianmg@github.com"},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"11.12.0","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.2.0_1786226484370_0.9553339172701272","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@adrianmg/paper-mirror","version":"0.2.1","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.2.1","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"9daa1fe98cbbc90268348c56b2fe0cf07e07ac1d","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.2.1.tgz","fileCount":18,"integrity":"sha512-iaw0hWWh4Xo+QMHx/6Ltt8LzMdHRl7CghXy9Z50pC9nDW/AZnGSUI8xdlX68RYhFfflwdAKGV8Gq9k6Onc0WpQ==","signatures":[{"sig":"MEYCIQD1tl5YAz2ZDSC6Tm4JjVb8a/+5FcNR1OAdJbEaC+B+FQIhAL9fPb9pv4TfKHa3EpOaHfMwdTQMM6fXcW4U0MEQYN8A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":606415},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"ee6ccb346a76e10e0e2236da11e85ce5ae8b12dc","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.2.1_1786509668866_0.9009725676857807","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@adrianmg/paper-mirror","version":"0.2.2","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.2.2","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"a916a3fcdf493236438118b43d4cead82424ff66","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.2.2.tgz","fileCount":20,"integrity":"sha512-wKHCxyhRl7ym1MIzpiaW2qr+quLFSfNHE5h5WWkt2uBsdoWMzlx4PHVSrdOTZYGVKGsAeW1UWoVfAUy/HGYFew==","signatures":[{"sig":"MEQCIDlnqAzq4nWtG0MlRPujLrTo0+dEmM9s5NNx5AkHEiMyAiBjWAAQoEiSib5qV8NZrsrWjQb+hqCtFws7F74N10BbXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":706452},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"af0518b0559ae819b57f604e3dfc9afe6228e541","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.2.2_1786510917189_0.5233075850793536","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@adrianmg/paper-mirror","version":"0.3.0","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.3.0","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"79d26621bf814ce2f685802657d2d2864b0c6bd5","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.3.0.tgz","fileCount":23,"integrity":"sha512-nEdUpohpwPzrutRuEG3VxFApAXQulQ4UnsuUp/1KjU40Yd+BhRoyI40IzM9zHAS13Clnvq5p8Lk2LauWsR4ejw==","signatures":[{"sig":"MEYCIQCQ0mCnmSBwwqj9n2vsYWNGXtyY3DHJOHRKqqWZuV2SBgIhAPoS2Ql4zMiX+b4ifzxgncmY3YCBOTDuIFDnMwuBTZHC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1257884},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"a09810a091477008a8653e95149c546d1df80653","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.3.0_1786552586796_0.0947055029670445","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@adrianmg/paper-mirror","version":"0.3.1","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.3.1","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"664a0c6dd304ec1ec7c55009e037982ec99e1b3d","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.3.1.tgz","fileCount":23,"integrity":"sha512-p2qJxTIr0AMJm3ZMYpBlqDT45vI+Nh1zcYsS9Spom3Tk7Kcqv2ODmU3iqW3pgFt+e6Okhjez6d0RMW+1J/0eUQ==","signatures":[{"sig":"MEUCIQCBj2sSrfVFDdScmqxBpSRE70w0uDdijd1yaQe1mnqlMwIgLkA55pCepjBBkSIZhlLIOZFHcW5FiHHgRbcVZ+F8BjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1304315},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"8e7552a34540b0e588f762408eb48ac7a5446c38","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.3.1_1786595553080_0.1896977538034661","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-experimental.0":{"name":"@adrianmg/paper-mirror","version":"0.4.0-experimental.0","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.4.0-experimental.0","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"1315abedb9e4176eb4a62135f2102bcf76d86ba6","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.4.0-experimental.0.tgz","fileCount":23,"integrity":"sha512-unYmVI56yfYSK6B/lJuIvYGvmlyFpGEXqcCkINnFt3f9sBUzGbd0gpXbDqhTB2/+2uWiNPVCZnhzv7nzwwL/tQ==","signatures":[{"sig":"MEQCIFvwc3vMXH8mB8kWhtMZf1NHwC0ir3qMfEI256bH2+k/AiBJBnH+pAVmjF8DCbGEWvorn6jMLE+7O3KBLOEcm14DGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1379647},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"6e665cd6e405eac4ddd54717d1a001dfc137909c","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:polling":"tsx scripts/benchmark-polling-modes.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.4.0-experimental.0_1786670390036_0.39658597387899985","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-experimental.1":{"name":"@adrianmg/paper-mirror","version":"0.4.0-experimental.1","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.4.0-experimental.1","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"ed78338e6a79bec94562cdaff15bcb506b0c0b8a","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.4.0-experimental.1.tgz","fileCount":23,"integrity":"sha512-FKGawPD7zACRdot7NhLNObmVChCKpmbSdSnm5zK4ECOe+dzB6HqRN+Gk3gjMR7cJAEFEMnOQIYLM1x9x8Oo4WA==","signatures":[{"sig":"MEUCIQCButT65fUnIs8EyGNxTnviR46v+KZ6PGMWwfeQ4s2gHgIgT1MIrU7PBlzyTCoME6HSdNPo4PbLAgfcv6IQG/CYHE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1380080},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"b0d7c97e03deb05e9f0c5b3ef071125335fa6db9","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:polling":"tsx scripts/benchmark-polling-modes.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.4.0-experimental.1_1786692268160_0.02646828062676221","host":"s3://npm-registry-packages-npm-production"}},"0.4.0-experimental.2":{"name":"@adrianmg/paper-mirror","version":"0.4.0-experimental.2","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.4.0-experimental.2","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"128ec2f78a2c48fd5cc79acdb5e7e35adfe133e5","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.4.0-experimental.2.tgz","fileCount":23,"integrity":"sha512-xtSMaRph5KVP8NgMYFsUKxHhRC3OX/0PrH9/hx6AqvIFWlF1P+V+zaZABkA/QT7Q/BtSqQPEyRZykZSOBsYE9g==","signatures":[{"sig":"MEUCIGSSTU47qHhd42wmtwM7zW+8yiuPZHNM+Ud3ZJkGFtWkAiEA3rWDBwCMu/uWxaL4xJlmZBGiiayb8BrQlFZ+0/eTfno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1380629},"type":"module","engines":{"node":">=22.13.0"},"gitHead":"22d01bb8e45af1ca1a99ce0ae201acf92f4f83e6","scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:polling":"tsx scripts/benchmark-polling-modes.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f8d84100-0cc8-4050-9a50-269afb67fb46"}},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"12.0.2","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.4.0-experimental.2_1786692590523_0.2560922238756167","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@adrianmg/paper-mirror","version":"0.3.2","keywords":["paper","design","preview","mirror","cli","mcp"],"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","_id":"@adrianmg/paper-mirror@0.3.2","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"bin":{"paper-mirror":"dist/main.js"},"dist":{"shasum":"10be378ab46f9ba2a3d28b36401d72a986c0eec9","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.3.2.tgz","fileCount":23,"integrity":"sha512-uNUC8pJzMuWQPHY9ssniTra0aP+QiZy9Hte/MCgrji9VLcVml0owk9kPOy18AqJikmovmBAWpNU0SWvQW8vHLw==","signatures":[{"sig":"MEYCIQDymH+UwXQUPusP/j0t0fgnkw+dSnnY4tPpBkPq0xRBNwIhANZS348WQBRHNq4J5sIA7hUgAeZWIp3uGeH6Mj3ESc6O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1313324},"type":"module","engines":{"node":">=22.13.0"},"scripts":{"dev":"tsx watch src/dev.ts","test":"vitest run src","build":"node scripts/build.mjs","start":"node dist/main.js","prepack":"pnpm run build:package","typecheck":"tsc -p tsconfig.json --noEmit","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts"},"_npmUser":{"name":"adrianmg","email":"yensamg@gmail.com"},"repository":{"url":"git+https://github.com/adrianmg/paper-preview.git","type":"git","directory":"apps/companion"},"_npmVersion":"11.12.0","description":"Mirror a live Paper design or local image to phones on your network.","directories":{},"_nodeVersion":"23.11.0","dependencies":{"ws":"8.21.1","zod":"4.4.3","sharp":"0.35.3","qrcode":"1.5.4","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.23.8","jsqr":"1.4.0","esbuild":"0.28.1","@paper-mirror/viewer":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/paper-mcp":"workspace:0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/paper-mirror_0.3.2_1786758027794_0.47071714126480346","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@adrianmg/paper-mirror","version":"0.3.3","description":"Mirror a live Paper design or local image to phones on your network.","type":"module","license":"MIT","author":{"name":"Adrian Mato Gondelle"},"homepage":"https://github.com/adrianmg/paper-preview#readme","bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"repository":{"type":"git","url":"git+https://github.com/adrianmg/paper-preview.git","directory":"apps/companion"},"keywords":["paper","design","preview","mirror","cli","mcp"],"engines":{"node":">=22.13.0"},"bin":{"paper-mirror":"dist/main.js"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"benchmark:paper":"tsx scripts/benchmark-paper-latency.ts","benchmark:paper:strategies":"tsx scripts/benchmark-paper-strategies.ts","benchmark:paper:complexity":"tsx scripts/benchmark-paper-complexity.ts","build":"node scripts/build.mjs","build:package":"pnpm --filter @paper-mirror/viewer build && pnpm run build","dev":"tsx watch src/dev.ts","docs:screenshot":"tsx scripts/render-readme-screenshot.ts","prepack":"pnpm run build:package","start":"node dist/main.js","test":"vitest run src","typecheck":"tsc -p tsconfig.json --noEmit"},"dependencies":{"@modelcontextprotocol/sdk":"1.30.0","chokidar":"5.0.0","commander":"15.0.0","picocolors":"1.1.1","qrcode":"1.5.4","sharp":"0.35.3","ws":"8.21.1","zod":"4.4.3"},"devDependencies":{"@paper-mirror/paper-mcp":"workspace:0.1.0","@paper-mirror/protocol":"workspace:0.1.0","@paper-mirror/renderer":"workspace:0.1.0","@paper-mirror/viewer":"workspace:0.1.0","esbuild":"0.28.1","jsqr":"1.4.0","tsx":"4.23.8"},"_id":"@adrianmg/paper-mirror@0.3.3","_nodeVersion":"23.11.0","_npmVersion":"11.12.0","dist":{"integrity":"sha512-IaigJ4A3Dy0G/zC7mTzvzRP8SZ81lz0SQvzYwkHNpZ0BDDwQreobcsLjab6GOdxDcnO6EkpZ8FyB2QFSJCSHnw==","shasum":"a5fc534ab26ccfc28fb307d369840997dd4198fe","tarball":"https://registry.npmjs.org/@adrianmg/paper-mirror/-/paper-mirror-0.3.3.tgz","fileCount":23,"unpackedSize":1319589,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID8zc/ggkuQicDFkonYUtiMAAPoq/0ylki8BNIOcA0uwAiEA+N2icgiqfIoBz5oIzKPLLeGQF1y10KcES/7EPMHyS6w="}]},"_npmUser":{"name":"adrianmg","email":"yensamg@gmail.com"},"directories":{},"maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/paper-mirror_0.3.3_1786775427880_0.129225048975961"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-08T22:01:24.125Z","modified":"2026-08-15T06:30:28.195Z","0.2.0":"2026-08-08T22:01:24.532Z","0.2.1":"2026-08-12T04:41:09.041Z","0.2.2":"2026-08-12T05:01:57.340Z","0.3.0":"2026-08-12T16:36:27.174Z","0.3.1":"2026-08-13T04:32:33.348Z","0.4.0-experimental.0":"2026-08-14T01:19:50.240Z","0.4.0-experimental.1":"2026-08-14T07:24:28.365Z","0.4.0-experimental.2":"2026-08-14T07:29:50.691Z","0.3.2":"2026-08-15T01:40:27.973Z","0.3.3":"2026-08-15T06:30:28.045Z"},"bugs":{"url":"https://github.com/adrianmg/paper-preview/issues"},"author":{"name":"Adrian Mato Gondelle"},"license":"MIT","homepage":"https://github.com/adrianmg/paper-preview#readme","keywords":["paper","design","preview","mirror","cli","mcp"],"repository":{"type":"git","url":"git+https://github.com/adrianmg/paper-preview.git","directory":"apps/companion"},"description":"Mirror a live Paper design or local image to phones on your network.","maintainers":[{"name":"adrianmg","email":"yensamg@gmail.com"}],"readme":"<p align=\"center\">\n  <img\n    src=\"https://unpkg.com/@adrianmg/paper-mirror@0.2.2/assets/paper-logo.png\"\n    alt=\"Paper logo\"\n    width=\"180\"\n    height=\"180\"\n  >\n</p>\n\n<h1 align=\"center\">Paper Mirror</h1>\n\n<p align=\"center\">\n  Preview your mobile designs from Paper on your phone.\n</p>\n\n<p align=\"center\"><strong>macOS | Linux/Unix | Windows</strong></p>\n\n## Requirements\n\n- Node.js 22.13.0 or newer\n- Paper Desktop for live Paper mirroring\n- A phone and computer on the same trusted local network\n\nThe server and local-file mode support macOS, Linux/Unix, and Windows. Live\nPaper mode also requires a Paper Desktop release that exposes its local MCP\nendpoint on the host platform.\n\nSmooth shader playback uses the structured `get_children` and `get_jsx` tools\navailable in Paper Desktop MCP 0.5.3. Older MCP versions and shader layer\narrangements that cannot be composed safely continue to use native screenshots.\nTopmost shaders render directly; bottommost shaders can preserve up to eight\nforeground layers through bounded transparent captures.\n\n## Quick start\n\nInstall Paper Mirror:\n\n```bash\nnpm i -g @adrianmg/paper-mirror\n```\n\nOpen your mobile design in Paper, select the frame you want to preview, and run:\n\n```bash\npaper-mirror\n```\n\nScan the QR code with your phone to open the preview.\n\nPaper Mirror follows the active Paper tab without adding another steady-state\npolling loop. File and selection checks alternate within one adaptive metadata\nbudget, and renders remain scoped to the detected file.\n\nFor a full-screen app experience, add the preview to your Home Screen:\n\n- **iPhone or iPad:** In Safari, choose **Share > Add to Home Screen**, enable\n  **Open as Web App**, and tap **Add**.\n- **Android:** Open the browser menu and choose **Install app** or\n  **Add to Home screen**.\n\nTo run Paper Mirror without installing it globally:\n\n```bash\nnpx @adrianmg/paper-mirror@latest\n```\n\n<p align=\"center\">\n  <img\n    src=\"https://unpkg.com/@adrianmg/paper-mirror@0.2.2/assets/paper-mirror-preview.png\"\n    alt=\"Paper Mirror preview\"\n    width=\"1280\"\n    height=\"820\"\n  >\n</p>\n\nTo mirror a local image instead:\n\n```bash\npaper-mirror --source ./frame.png\n```\n\nRun `paper-mirror --help` for all options.\n\n## Troubleshooting\n\n### The Home Screen app says \"Not Found\"\n\nYour Home Screen icon saves the exact pairing URL. That URL can stop working\nafter:\n\n- moving to a different computer;\n- changing the computer's hostname;\n- switching networks when the URL uses an IP address instead of a `.local`\n  hostname;\n- running `paper-mirror --rotate-token` or resetting Paper Mirror's settings;\n- changing `--port` or `--public-host`.\n\nStart Paper Mirror, scan the current QR code, and confirm the preview opens in\nthe browser. Then remove the old Home Screen icon and add the new page again.\n\nOn the same Mac, the default `.local` URL should usually survive ordinary Wi-Fi\nchanges. Paper Mirror cannot connect when the phone and computer are on\ndifferent networks.\n\n### The phone cannot connect\n\n- Confirm Paper Mirror is still running and both devices are on the same\n  trusted local network.\n- Avoid guest, hotel, or corporate Wi-Fi that blocks communication between\n  devices.\n- Temporarily disconnect VPNs and allow Node.js through the computer's firewall.\n- If the QR code uses the wrong network address, provide the computer's local\n  IP:\n\n```bash\npaper-mirror --public-host 192.168.1.42\n```\n\n### Paper or its frames are not found\n\nOpen Paper Desktop with a design file open. Select one frame or artboard, or\ncreate one if the document is empty. Live mirroring also requires a Paper\nDesktop version that exposes its local MCP endpoint.\n\nIf updates stop after switching apps, bring the preview back to the foreground.\niOS may suspend Home Screen apps and browser tabs in the background.\n\n### Port 4173 is already in use\n\nStop the previous Paper Mirror process, or choose another port:\n\n```bash\npaper-mirror --port 4174\n```\n\nA different port creates a different pairing URL, so scan the new QR code and\nreplace any existing Home Screen icon.\n\n### \"Install app\" is not available\n\nOn iPhone and iPad, installation is always manual through Safari's\n**Share > Add to Home Screen** action. On Android, local HTTP pages may show\n**Add to Home screen** instead of **Install app**; either option creates a\nshortcut to the preview.\n\n## Security and privacy\n\nPaper Mirror binds to the local network by default so a phone can connect. A\nrandom pairing token protects viewer, frame, manifest, and WebSocket routes.\nFrames remain in memory and are not uploaded by Paper Mirror.\n\nPaper Mirror sends anonymous product-usage events to Umami Cloud after a\nsuccessful launch. They contain app and Paper versions, coarse host and viewer\nplatforms, browser family, browser/PWA mode, source and output types, and\nbucketed frame count, orientation, rendered area, payload size, render latency,\nupdates, duration, time to the first viewer, and connected-device count.\nNavigation is recorded as a boolean. HD state is summarized, while Cover/1:1\nand dark/light canvas values are recorded only after those controls are changed.\nThese become coarse values such as `both`, never click histories. Startup data\nis sent after launch, viewer context is sent once per connected page for each\ncompanion run, and usage summaries are aggregated in memory and sent every 15\nminutes and on clean shutdown.\n\nAnalytics never include designs, names, paths, actual URLs, pairing tokens, raw\nuser agents, exact dimensions, or persistent identifiers. Umami receives\nordinary network metadata for each request. Disable analytics with:\n\n```bash\npaper-mirror --no-telemetry\n```\n\nPaper Mirror also respects `DO_NOT_TRACK=1`.\n\nTreat the QR code and pairing URL as credentials. Use `--rotate-token` to\nrevoke an existing URL, and never expose the server port to the public\ninternet. Use `--host 127.0.0.1` when LAN access is not needed.\n\nThe token is stored under `XDG_CONFIG_HOME` when configured, under `APPDATA`\non Windows, and otherwise under `~/.paper-mirror`.\n\n## License\n\nMIT (c) 2026 Adrian Mato Gondelle. Paper Mirror is an independent project and\nis not affiliated with or endorsed by Paper.\n","readmeFilename":"README.md"}