{"_id":"@dropinblog/astro","_rev":"8-067022a3514a084eb7a947868b5c2879","name":"@dropinblog/astro","dist-tags":{"latest":"2.2.0"},"versions":{"1.0.0":{"name":"@dropinblog/astro","version":"1.0.0","keywords":["astro","astro-integration","dropinblog","blog","cms"],"author":{"name":"DropInBlog"},"license":"MIT","_id":"@dropinblog/astro@1.0.0","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"},{"name":"nidal1","email":"touhami9@gmail.com"}],"homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"dist":{"shasum":"5d2a36ecb4b4c3c4fe657a1821dbefce4f02f4d1","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-1.0.0.tgz","fileCount":69,"integrity":"sha512-F11PrKQErLcDKdl0AW56D5qZbjclKzHhmc7WCLM31LBZU7ixcGxLgwF7Q6qyftp29+xg+9Ps2e9vcnoUCHTmDA==","signatures":[{"sig":"MEUCIBBNHnjQi7XseRDzX9hngIztYFhUhcKlMSlCrYb7vngAAiEAkaQXjdBqQGHy1fGUxhIeri2ISJkyDvaQQih3wJ5yRHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108668},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.20.8"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./routes/*.ts":"./dist/routes/*.js","./package.json":"./package.json","./virtual.d.ts":"./src/virtual.d.ts","./routes/*.astro":"./src/routes/*.astro","./components/*.astro":"./src/components/*.astro"},"gitHead":"61785b22752f74ff5a0009a315d28b73fec719fd","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","clean":"rm -rf dist"},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"repository":{"url":"git+https://github.com/DropInBlog/astro.git","type":"git"},"_npmVersion":"10.8.2","description":"DropInBlog rendered content for Astro projects.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","astro":"^5.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@types/node":"^25.8.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro_1.0.0_1781121571719_0.9725887310853374","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dropinblog/astro","version":"1.0.1","keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"author":{"name":"DropInBlog"},"license":"MIT","_id":"@dropinblog/astro@1.0.1","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"},{"name":"nidal1","email":"touhami9@gmail.com"}],"homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"dist":{"shasum":"7e7ec54f809a7c5f56c983b6020486ac54b91e26","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-1.0.1.tgz","fileCount":69,"integrity":"sha512-YiuSiwKfw+5R9NcfLCh+W1XPwOFGyDc8DK9DNhywiZZVDgtvQj7ROivcwwlrH9PbLs8brwO+apXU0n7bUyE1Fg==","signatures":[{"sig":"MEUCIQD46G5wKf/o1QsExDSHoV1mbqP9HPck5/ptu2R+XTWzFgIgcuV0tgB4EgOS3kxwgZ4BgyzzcjK81+E9KEUWcPSISBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108725},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.20.8"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./routes/*.ts":"./dist/routes/*.js","./package.json":"./package.json","./virtual.d.ts":"./src/virtual.d.ts","./routes/*.astro":"./src/routes/*.astro","./components/*.astro":"./src/components/*.astro"},"gitHead":"0ebfbb6abc7df46f3d89632dfcce8222f232a0a4","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","clean":"rm -rf dist"},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"repository":{"url":"git+https://github.com/DropInBlog/astro.git","type":"git"},"_npmVersion":"10.8.2","description":"DropInBlog rendered content for Astro projects.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","astro":"^5.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@types/node":"^25.8.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro_1.0.1_1782143381659_0.48925546525619623","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dropinblog/astro","version":"1.0.2","keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"author":{"name":"DropInBlog"},"license":"MIT","_id":"@dropinblog/astro@1.0.2","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"},{"name":"nidal1","email":"touhami9@gmail.com"}],"homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"dist":{"shasum":"b9011e36668775b76b98998de8826aede8ca5219","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-1.0.2.tgz","fileCount":69,"integrity":"sha512-SS8kwZ/yr+FXSDwQDe8XLJJN3+7NeAYk4/OSktrbzm15+rovCoOE/oWgYlPj0vAzf7eDoWCJm5+soq51fr0sIg==","signatures":[{"sig":"MEQCIAQMySR6LB/Qd0anC/91ghTEV1AGpXheZffTP8Ue6JTUAiBa2nCehgUPnOIHsCL/SVUHhUsifdjnO4VkfKnIGWrqtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108764},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.20.8"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./routes/*.ts":"./dist/routes/*.js","./package.json":"./package.json","./virtual.d.ts":"./src/virtual.d.ts","./routes/*.astro":"./src/routes/*.astro","./components/*.astro":"./src/components/*.astro"},"gitHead":"8c2a6d15c765249bde073085700cad00a17f73f6","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","clean":"rm -rf dist"},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"repository":{"url":"git+https://github.com/DropInBlog/astro.git","type":"git"},"_npmVersion":"10.8.2","description":"SEO-first blogging for Astro: server-rendered posts, meta tags, sitemap, and RSS feeds","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","astro":"^5.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@types/node":"^25.8.0"},"peerDependencies":{"astro":"^5.0.0 || ^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro_1.0.2_1782143863884_0.2025671782185161","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@dropinblog/astro","version":"2.0.0","keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"author":{"name":"DropInBlog"},"license":"MIT","_id":"@dropinblog/astro@2.0.0","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"},{"name":"nidal1","email":"touhami9@gmail.com"}],"homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"dist":{"shasum":"70420c542f2beb34b843ba7829c285ad89a31def","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-2.0.0.tgz","fileCount":69,"integrity":"sha512-Mh9sIxbMWkL4RFs/o3pNpIVJJWT05IhXmWPwbW1v1pJh1WhJhbCZOKIzNMChtMsOkNfInUP3ptFcZ9quSnG82A==","signatures":[{"sig":"MEQCICcIhfvd4fWVQlwfG3654fj7Kc8rfn7+G9JoDvAD6cQoAiAz0PSYDt0o4yFjyyjFQQLEHgWb7q997r0zwL9uKIA+lg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108764},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./routes/*.ts":"./dist/routes/*.js","./package.json":"./package.json","./virtual.d.ts":"./src/virtual.d.ts","./routes/*.astro":"./src/routes/*.astro","./components/*.astro":"./src/components/*.astro"},"gitHead":"12a79bf0707a62310b8503787fb586e389775b31","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","clean":"rm -rf dist"},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"repository":{"url":"git+https://github.com/DropInBlog/astro.git","type":"git"},"_npmVersion":"10.9.8","description":"SEO-first blogging for Astro: server-rendered posts, meta tags, sitemap, and RSS feeds","directories":{},"_nodeVersion":"22.23.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","astro":"^7.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@types/node":"^25.8.0"},"peerDependencies":{"astro":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro_2.0.0_1782569955702_0.562135580005374","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@dropinblog/astro","version":"2.0.1","keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"author":{"name":"DropInBlog"},"license":"MIT","_id":"@dropinblog/astro@2.0.1","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"}],"homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"dist":{"shasum":"79347c614ec9938a4b6241f8bca19734567a803d","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-2.0.1.tgz","fileCount":73,"integrity":"sha512-M/+i2Q3goyyyzw4bWEYnqf/dx4Exe9THUHeuRRKzY4d3EbXFzjprBrbnfdu3o1t3PG7OrDZjK+eFaWEBypbVSA==","signatures":[{"sig":"MEQCIEfDn6R3kFsk9SUbUgU+9HWD6Vgmv47NSrhYU81BLTRXAiBrQ7Db4kjiJtjSQ6COlrKcv7eM9vic8gdcOwrTGjaSfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":109609},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./routes/*.ts":"./dist/routes/*.js","./package.json":"./package.json","./virtual.d.ts":"./src/virtual.d.ts","./routes/*.astro":"./src/routes/*.astro","./components/*.astro":"./src/components/*.astro"},"gitHead":"a747e61954bb3a15edba1df11cce33232fa6456f","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","clean":"rm -rf dist"},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"repository":{"url":"git+https://github.com/DropInBlog/astro.git","type":"git"},"_npmVersion":"10.9.8","description":"SEO-first blogging for Astro: server-rendered posts, meta tags, sitemap, and RSS feeds","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","astro":"^7.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@types/node":"^25.8.0"},"peerDependencies":{"astro":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro_2.0.1_1783728466174_0.7741420060123259","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@dropinblog/astro","version":"2.1.0","keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"author":{"name":"DropInBlog"},"license":"MIT","_id":"@dropinblog/astro@2.1.0","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"}],"homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"dist":{"shasum":"3e5b3d74ad6cac3e8abd915f1d925e986e446318","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-2.1.0.tgz","fileCount":73,"integrity":"sha512-X++DcFQTrxeW5gTfIO11t8T/rA0tuAQ2oY6OkIhck3XJx+y/6aC2hxSoOdDkA7yyandtMZGCGlqHpcs0W0KuVg==","signatures":[{"sig":"MEYCIQCekln8wSRCFMvh+LyGjqMThiIInOe2Z7Y1CXYV9hm02QIhANsLJba4KOpfvrWcwRzvhAsRXyldJlGF497q6UIV/4BQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":112992},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./routes/*.ts":"./dist/routes/*.js","./package.json":"./package.json","./virtual.d.ts":"./src/virtual.d.ts","./routes/*.astro":"./src/routes/*.astro","./components/*.astro":"./src/components/*.astro"},"gitHead":"b01a58d3cc047f9ef52ecc9475fecfb70a1dfe22","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","clean":"rm -rf dist"},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"repository":{"url":"git+https://github.com/DropInBlog/astro.git","type":"git"},"_npmVersion":"10.9.8","description":"SEO-first blogging for Astro: server-rendered posts, meta tags, sitemap, and RSS feeds","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.0","astro":"^7.0.0","vitest":"^3.0.0","typescript":"^5.6.0","@types/node":"^25.8.0"},"peerDependencies":{"astro":"^6.0.0 || ^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/astro_2.1.0_1784225658702_0.574945514562814","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@dropinblog/astro","version":"2.2.0","description":"SEO-first blogging for Astro: server-rendered posts, meta tags, sitemap, and RSS feeds","homepage":"https://github.com/DropInBlog/astro#readme","bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"repository":{"type":"git","url":"git+https://github.com/DropInBlog/astro.git"},"keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"license":"MIT","author":{"name":"DropInBlog"},"type":"module","publishConfig":{"access":"public"},"types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./runtime":{"types":"./dist/lib/runtime.d.ts","import":"./dist/lib/runtime.js"},"./client":{"types":"./dist/lib/client.d.ts","import":"./dist/lib/client.js"},"./components/*.astro":"./src/components/*.astro","./routes/*.astro":"./src/routes/*.astro","./routes/*.ts":"./dist/routes/*.js","./virtual.d.ts":"./src/virtual.d.ts","./package.json":"./package.json"},"peerDependencies":{"astro":"^6.0.0 || ^7.0.0"},"devDependencies":{"@types/node":"^25.8.0","astro":"^7.0.0","typescript":"^5.6.0","vite":"^8.0.0","vitest":"^3.0.0"},"engines":{"node":">=22.12.0"},"scripts":{"build":"tsc -b","dev":"tsc -b --watch","clean":"rm -rf dist","test":"vitest run"},"_id":"@dropinblog/astro@2.2.0","gitHead":"bce2eb300f2c8fd7421c2c590edc7a435bb43aea","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-oeUUbDTAibK1r1EG9mJxt5X2wRmVav2lWPcabKeSfbgZ1VqEjDIEDRgyRpKWUqD9ZLSGv7Em46Dduyr95i5mHA==","shasum":"188a407b99938d7d614933211fa186b8ebb30cbe","tarball":"https://registry.npmjs.org/@dropinblog/astro/-/astro-2.2.0.tgz","fileCount":73,"unpackedSize":114504,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dropinblog%2fastro@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDENBk1iTis82AZzDqyqs5eFPAiFuI0D6Bv3yUQ/hg9QAIhAK1kJIaXnlgm56NZr53ZVLx/Zh1UpakRlkiJIMk+onIf"}]},"_npmUser":{"name":"jason18505","email":"jason@dropinblog.com"},"directories":{},"maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/astro_2.2.0_1785959344377_0.2654634482003315"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-10T19:59:31.529Z","modified":"2026-08-05T19:49:04.956Z","1.0.0":"2026-06-10T19:59:31.868Z","1.0.1":"2026-06-22T15:49:41.812Z","1.0.2":"2026-06-22T15:57:44.011Z","2.0.0":"2026-06-27T14:19:15.834Z","2.0.1":"2026-07-11T00:07:46.351Z","2.1.0":"2026-07-16T18:14:18.845Z","2.2.0":"2026-08-05T19:49:04.513Z"},"bugs":{"url":"https://github.com/DropInBlog/astro/issues"},"author":{"name":"DropInBlog"},"license":"MIT","homepage":"https://github.com/DropInBlog/astro#readme","keywords":["astro-integration","astro-component","withastro","dropinblog","blog","cms","seo","performance"],"repository":{"type":"git","url":"git+https://github.com/DropInBlog/astro.git"},"description":"SEO-first blogging for Astro: server-rendered posts, meta tags, sitemap, and RSS feeds","maintainers":[{"name":"jason18505","email":"jason@dropinblog.com"},{"name":"schoberg","email":"jesse@dropinblog.com"}],"readme":"# @dropinblog/astro\n\nAstro integration for [DropInBlog](https://dropinblog.com/) with static (SSG), server-rendered (SSR), and Server Islands support.\n\n## Features\n\n- DropInBlog - one entry in `astro.config.mjs` injects every route\n- Three rendering modes: static, server-rendered, and Server Islands\n- Build-time caching - rebuilds skip posts that haven't changed\n- SEO-optimized: meta tags, Open Graph, Twitter cards, and JSON-LD on every page\n- RSS feeds and XML sitemap included\n- Bring your own layout component\n- Works with Astro 6 and 7\n\n## Installation\n\n```bash\nnpm install @dropinblog/astro\n```\n\n## Quick Start\n\n### 1. Configure Environment Variables\n\nCreate a `.env` file in your Astro project. These are read server-side at build time, so do not prefix them with `PUBLIC_` to avoid exposing credentials to the browser:\n\n```env\nDROPINBLOG_BLOG_ID=your_dropinblog_blog_id\nDROPINBLOG_API_KEY=your_dropinblog_api_key\n```\n\n> Use your **public** API key. It is read-only and safe in build environments.\n\n### 2. Add the Integration\n\n```js\n// astro.config.mjs\nimport { defineConfig } from 'astro/config';\nimport dropInBlog from '@dropinblog/astro';\n\nexport default defineConfig({\n  site: 'https://yoursite.com',\n  integrations: [dropInBlog()],\n});\n```\n\nRoutes registered by the integration:\n\n- `/blog` - Main blog list\n- `/blog/page/{page}` - Paginated blog list\n- `/blog/category/{slug}` - Category pages\n- `/blog/category/{slug}/page/{page}` - Paginated category pages\n- `/blog/author/{slug}` - Author pages\n- `/blog/author/{slug}/page/{page}` - Paginated author pages\n- `/blog/{slug}` - Single post pages\n- `/blog/sitemap.xml` - Sitemap\n- `/blog/feed` - RSS feed\n- `/blog/category/{slug}/feed` - Category RSS feeds\n- `/blog/author/{slug}/feed` - Author RSS feeds\n\nTo mount the blog at a different path (e.g. `/news`), pass `basePath`:\n\n```js\ndropInBlog({ basePath: '/news' })\n```\n\nEnsure your blog's URL in DropInBlog settings matches where the routes are mounted so permalinks, canonical tags, RSS, and the sitemap all align.\n\n### 3. Add a Head Slot to Your Layout\n\nBy default blog pages use a minimal built-in layout. To use your own, pass its path:\n\n```js\ndropInBlog({ layout: '/src/layouts/Layout.astro' })\n```\n\nYour layout receives a `title` prop and the blog content through its default `<slot />`. It **must** include a named `head` slot inside `<head>`. That's where the integration places SEO meta tags, Open Graph/Twitter tags, canonical URL, JSON-LD schema, fonts, and styles:\n\n```astro\n---\nconst { title } = Astro.props;\n---\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>{title}</title>\n    <slot name=\"head\" />\n  </head>\n  <body>\n    <slot />\n  </body>\n</html>\n```\n\nWithout `<slot name=\"head\" />`, Astro silently drops the head content and meta tags will be missing from your pages.\n\n## Options\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `apiKey` | `DROPINBLOG_API_KEY` env | DropInBlog public API key |\n| `blogId` | `DROPINBLOG_BLOG_ID` env | Your blog ID |\n| `basePath` | `'/blog'` | URL prefix for all blog routes |\n| `mode` | `'auto'` | `'auto'`, `'ssg'`, `'ssr'`, or `'island'` |\n| `layout` | built-in minimal layout | Path to your Astro layout component |\n| `cacheTtlMs` | `300000` (5 min) | Build-cache TTL used when per-post freshness data is unavailable |\n\n## Build Hook URL\n\nDropInBlog can notify your site whenever your blog changes. In your DropInBlog dashboard, go to Settings and set the Build Hook URL to any endpoint you choose. DropInBlog sends an HTTP POST request to that URL every time blog content or design changes, including when:\n\n* A post is published, updated, or deleted\n* A category or author is added, updated, or deleted\n* Layout or design settings are saved\n\nPost events include a JSON body with the `postId` and `slug` of the affected post; other events send an empty payload.\n\nWith Astro's default static (`ssg`) mode this is the recommended setup: paste the deploy hook URL from your hosting provider (Vercel, Netlify, Cloudflare, etc.) and every blog change triggers a fresh build, so your published site is never stale. Rebuilds are fast because the build cache skips posts that haven't changed.\n\nIn `island` mode, post bodies are fetched on each request, but new posts, SEO tags, and list pages still come from the last build, so a build hook is still recommended. In `ssr` mode every page is rendered per request and you typically don't need it; set one only if you want a webhook for your own automation whenever blog content changes.\n\n## Previewing Posts with Private Visibility\n\nTo preview a post before making it public, publish it with **Private** visibility in DropInBlog, then rebuild your site. The post is built at its normal URL (`/blog/{slug}`) so you can view and share it by link, but it stays hidden everywhere else:\n\n- It never appears in blog lists, category/author pages, the sitemap, or RSS feeds.\n- The page carries `<meta name=\"robots\" content=\"noindex\">` so search engines won't index it.\n\nSwitch the post to Public visibility and rebuild to launch it. Note that \"private\" means **unlisted, not access-controlled**: anyone with the link can view the page. On static (SSG) builds, content edits require a rebuild to show up.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}