{"_id":"@electron-releases/adapter-nextjs","name":"@electron-releases/adapter-nextjs","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@electron-releases/adapter-nextjs","version":"0.1.0","description":"Next.js adapter for serving Electron auto-updates","keywords":["electron","auto-update","nextjs","squirrel"],"repository":{"type":"git","url":"git+https://github.com/lott-ai/electron-releases.git","directory":"packages/adapter-nextjs"},"author":{"name":"Chris Lott","url":"https://lott.io"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"publishConfig":{"access":"public","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}}},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsup src/index.ts --format esm --dts --clean","typecheck":"tsc --noEmit"},"dependencies":{"@electron-releases/core":"0.1.0"},"devDependencies":{"@electron-releases/typescript-config":"workspace:*","@types/node":"^24.10.7","tsup":"^8.0.0","typescript":"^5.9.0"},"peerDependencies":{"next":">=14.0.0"},"_id":"@electron-releases/adapter-nextjs@0.1.0","gitHead":"4ff9c545ffde8b62b03f6a7b7994ed4ed153c9b3","bugs":{"url":"https://github.com/lott-ai/electron-releases/issues"},"homepage":"https://github.com/lott-ai/electron-releases#readme","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-ALC6i0VTuJzNxFhI7P21raLMEFQbN4ZpPFSRkpu3NAOensBJIatTwp1zpoOAiXZM3aEQKYnKzliMxicakND1vQ==","shasum":"157cd543ee7f66610fa0a46964f8a8628da8c508","tarball":"https://registry.npmjs.org/@electron-releases/adapter-nextjs/-/adapter-nextjs-0.1.0.tgz","fileCount":4,"unpackedSize":10455,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIQCoRM3rQBxKLJBOeh0vGH/8fSNbn3NTwJZwrGm8q6tgmgIfKny5+GibLvR5WbBAo5ke4O/5bnDaaP//qt+f3RhBTQ=="}]},"_npmUser":{"name":"lottamus","email":"chris@lott.io"},"directories":{},"maintainers":[{"name":"lottamus","email":"chris@lott.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/adapter-nextjs_0.1.0_1768166858409_0.6790479752872369"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-11T21:27:38.331Z","0.1.0":"2026-01-11T21:27:38.576Z","modified":"2026-01-11T21:27:38.943Z"},"maintainers":[{"name":"lottamus","email":"chris@lott.io"}],"description":"Next.js adapter for serving Electron auto-updates","homepage":"https://github.com/lott-ai/electron-releases#readme","keywords":["electron","auto-update","nextjs","squirrel"],"repository":{"type":"git","url":"git+https://github.com/lott-ai/electron-releases.git","directory":"packages/adapter-nextjs"},"author":{"name":"Chris Lott","url":"https://lott.io"},"bugs":{"url":"https://github.com/lott-ai/electron-releases/issues"},"license":"MIT","readme":"# @electron-releases/adapter-nextjs\n\nNext.js App Router adapter for serving Electron auto-updates. Drop-in solution for Squirrel-compatible update servers.\n\n## Installation\n\n```bash\nnpm install @electron-releases/adapter-nextjs @electron-releases/provider-github\n# or\nyarn add @electron-releases/adapter-nextjs @electron-releases/provider-github\n# or\nbun add @electron-releases/adapter-nextjs @electron-releases/provider-github\n```\n\n## Quick Start\n\n**1. Create a catch-all API route:**\n\n```ts\n// app/api/releases/[[...path]]/route.ts\nimport { configureNextjsAdapter } from \"@electron-releases/adapter-nextjs\";\nimport { configureGithubProvider } from \"@electron-releases/provider-github\";\n\nconst githubProvider = configureGithubProvider({\n  token: process.env.GITHUB_TOKEN!,\n  owner: \"your-org\",\n  repo: \"your-app\",\n});\n\nexport const GET = configureNextjsAdapter({\n  releases: githubProvider.releases,\n  assets: githubProvider.assets,\n});\n```\n\n**2. Configure your Electron app:**\n\n```ts\n// In your Electron main process\nimport { autoUpdater } from \"electron\";\n\nautoUpdater.setFeedURL({\n  url: \"https://your-domain.com/api/releases/update/darwin/\" + app.getVersion(),\n});\n\nautoUpdater.checkForUpdates();\n```\n\nThat's it! Your Electron app now has auto-updates.\n\n## Available Endpoints\n\nOnce configured, these endpoints are available (relative to `/api/releases`):\n\n| Endpoint | Description |\n|----------|-------------|\n| `GET /` | List releases. Use `?channel=beta` to filter. |\n| `GET /download` | Auto-redirect based on User-Agent. |\n| `GET /download/:platform` | Download for specific platform. |\n| `GET /update/:platform/:version` | Check for updates (Squirrel format). |\n| `GET /update/win32/:version/RELEASES` | Squirrel.Windows RELEASES file. |\n\n## Configuration Options\n\n```ts\nconfigureNextjsAdapter({\n  // Required: Provider for release metadata\n  releases: githubProvider.releases,\n\n  // Required: Provider for download URLs  \n  assets: githubProvider.assets,\n\n  // Optional: Release channels (default: [\"alpha\", \"beta\", \"stable\"])\n  channels: [\"alpha\", \"beta\", \"stable\"],\n});\n```\n\n## Channel Support\n\nSupport multiple release channels for staged rollouts:\n\n```ts\n// Your API route supports channels automatically\nexport const GET = configureNextjsAdapter({\n  channels: [\"alpha\", \"beta\", \"stable\"],\n  releases: githubProvider.releases,\n  assets: githubProvider.assets,\n});\n```\n\n**In your Electron app:**\n\n```ts\n// Check for beta updates\nautoUpdater.setFeedURL({\n  url: `https://your-domain.com/api/releases/update/darwin/${version}?channel=beta`,\n});\n```\n\n**Channel detection from versions:**\n- `1.0.0` → stable\n- `1.0.0-beta.1` → beta  \n- `1.0.0-alpha.3` → alpha\n\n## Platform Support\n\nThe adapter supports all major Electron platforms:\n\n| Platform | Identifier | Aliases |\n|----------|------------|---------|\n| macOS (Intel) | `darwin` | `mac`, `macos`, `osx` |\n| macOS (Apple Silicon) | `darwin_arm64` | `mac_arm64` |\n| Windows | `exe` | `win32`, `windows`, `win` |\n| Windows ARM | `exe_arm64` | `win32_arm64` |\n| Linux DEB | `deb` | `debian` |\n| Linux RPM | `rpm` | `fedora` |\n| Linux AppImage | `AppImage` | `appimage` |\n\n## Squirrel Integration\n\n### macOS (Squirrel.Mac)\n\n```ts\nimport { autoUpdater } from \"electron\";\n\nautoUpdater.setFeedURL({\n  url: `https://your-domain.com/api/releases/update/darwin/${app.getVersion()}`,\n});\n\nautoUpdater.on(\"update-available\", () => {\n  console.log(\"Update available!\");\n});\n\nautoUpdater.on(\"update-downloaded\", () => {\n  autoUpdater.quitAndInstall();\n});\n\nautoUpdater.checkForUpdates();\n```\n\n### Windows (Squirrel.Windows)\n\n```ts\nimport { autoUpdater } from \"electron\";\n\nautoUpdater.setFeedURL({\n  url: `https://your-domain.com/api/releases/update/win32/${app.getVersion()}`,\n});\n\nautoUpdater.checkForUpdates();\n```\n\n### Using electron-updater\n\nIf you're using `electron-builder` with `electron-updater`:\n\n```ts\nimport { autoUpdater } from \"electron-updater\";\n\nautoUpdater.setFeedURL({\n  provider: \"generic\",\n  url: \"https://your-domain.com/api/releases\",\n});\n\nautoUpdater.checkForUpdatesAndNotify();\n```\n\n## Direct Download Links\n\nProvide download links on your website:\n\n```html\n<!-- Auto-detect platform -->\n<a href=\"https://your-domain.com/api/releases/download\">Download</a>\n\n<!-- Specific platforms -->\n<a href=\"https://your-domain.com/api/releases/download/mac\">Download for macOS</a>\n<a href=\"https://your-domain.com/api/releases/download/win32\">Download for Windows</a>\n<a href=\"https://your-domain.com/api/releases/download/mac_arm64\">Download for Apple Silicon</a>\n\n<!-- Specific channel -->\n<a href=\"https://your-domain.com/api/releases/download/mac?channel=beta\">Download Beta</a>\n```\n\n## API Response Examples\n\n### List Releases\n\n```bash\nGET /api/releases\n```\n\n```json\n{\n  \"channel\": \"stable\",\n  \"version\": \"1.2.3\",\n  \"date\": \"2024-01-15T10:30:00Z\",\n  \"files\": {\n    \"darwin\": {\n      \"name\": \"MyApp-1.2.3-mac.zip\",\n      \"url\": \"https://github.com/.../MyApp-1.2.3-mac.zip\",\n      \"size\": 85.2\n    },\n    \"exe\": {\n      \"name\": \"MyApp-1.2.3-win.exe\", \n      \"url\": \"https://github.com/.../MyApp-1.2.3-win.exe\",\n      \"size\": 72.1\n    }\n  }\n}\n```\n\n### Check for Updates\n\n```bash\nGET /api/releases/update/darwin/1.0.0\n```\n\n**Update available:**\n```json\n{\n  \"name\": \"1.2.3\",\n  \"notes\": \"## What's New\\n- Bug fixes\\n- Performance improvements\",\n  \"pub_date\": \"2024-01-15T10:30:00Z\",\n  \"url\": \"https://your-domain.com/api/releases/download/darwin?update=true&channel=stable\"\n}\n```\n\n**No update (returns 204 No Content)**\n\n## Private Repositories\n\nFor private GitHub repos, ensure your `GITHUB_TOKEN` has `repo` scope:\n\n```ts\nconst githubProvider = configureGithubProvider({\n  token: process.env.GITHUB_TOKEN!, // Needs repo scope for private repos\n  owner: \"your-org\",\n  repo: \"your-private-app\",\n});\n```\n\nThe adapter automatically generates signed URLs for private asset downloads.\n\n## Error Handling\n\nThe adapter returns appropriate HTTP status codes:\n\n| Status | Meaning |\n|--------|---------|\n| 200 | Success |\n| 204 | No update available |\n| 302 | Redirect to download |\n| 400 | Invalid request (bad platform/version) |\n| 404 | Not found |\n| 500 | Server error |\n\n## Environment Variables\n\n```env\n# Required for GitHub provider\nGITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\n\n## TypeScript Support\n\nFull TypeScript support with exported types:\n\n```ts\nimport type {\n  AdapterConfig,\n  ReleaseInfo,\n  PlatformAsset,\n  ReleasesProvider,\n  AssetsProvider,\n} from \"@electron-releases/adapter-nextjs\";\n```\n\n## Related Packages\n\n- [`@electron-releases/core`](https://www.npmjs.com/package/@electron-releases/core) - Core types and routing\n- [`@electron-releases/provider-github`](https://www.npmjs.com/package/@electron-releases/provider-github) - GitHub releases provider\n\n## License\n\nMIT\n\n","readmeFilename":"README.md","_rev":"1-4390d24fd13de77a266a9112fd85fdd3"}