{"_id":"@briangershon/publishable","_rev":"5-69ac04cce349aac25e0bb5d5321a902c","name":"@briangershon/publishable","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@briangershon/publishable","version":"0.1.0","keywords":["cli","publishing","agents","blog"],"author":{"name":"Brian Gershon"},"license":"MIT","_id":"@briangershon/publishable@0.1.0","maintainers":[{"name":"briangershon","email":"brian@briangershon.com"}],"bin":{"publishable":"dist/index.js"},"dist":{"shasum":"a33fecb75d17504a65e5cdfa2e2f2f0e6e7a3850","tarball":"https://registry.npmjs.org/@briangershon/publishable/-/publishable-0.1.0.tgz","fileCount":5,"integrity":"sha512-cIGvwUg9L/AlXm3qe13EMhnQ13Kj8v225uZMR6/8sCvEqGkEfrgCq9kDy0e/FkTRJgswcCnGf/A9AgrZslUriw==","signatures":[{"sig":"MEYCIQDZFEbjjymaeLNAA8djTTPYZ0zkYJCcZHwzmPbI/TvwawIhAJVKDTsdpCsEjUlMMKoHgRgUeDyN7N4ASfWfbWwsgGx8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2967},"type":"module","engines":{"node":">=v22.22.2"},"gitHead":"35395874f8546143af60663d67acd6bdba38c8d6","scripts":{"dev":"node --experimental-strip-types src/index.ts","build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"briangershon","email":"brian@briangershon.com"},"_npmVersion":"11.6.3","description":"A tool for creating and managing content for publication.","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/publishable_0.1.0_1774832253971_0.47513999171729426","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@briangershon/publishable","version":"0.1.1","keywords":["cli","publishing","agents","blog"],"author":{"name":"Brian Gershon"},"license":"MIT","_id":"@briangershon/publishable@0.1.1","maintainers":[{"name":"briangershon","email":"brian@briangershon.com"}],"homepage":"https://github.com/briangershon/publishable#readme","bugs":{"url":"https://github.com/briangershon/publishable/issues"},"bin":{"publishable":"dist/index.js"},"dist":{"shasum":"53f6c508e9fd954e096d93dd4e934a51ea100bed","tarball":"https://registry.npmjs.org/@briangershon/publishable/-/publishable-0.1.1.tgz","fileCount":5,"integrity":"sha512-V0B/n6iW0OkwThYSEHsmVBo2R0uhYwfERvVOu5Xx6UTSTuM2DeOsTZot+uUG2zl/6upFMaNcZVsRwIJe3QMcKw==","signatures":[{"sig":"MEUCIHJS9jJ8RHDUKBi+S+znFVGwi03hb0sx5Puc/8s3bSyxAiEAyBDjWnMXEfU8V1knyuTV9lkcn0R/7Q2YDsroNrrwcjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briangershon%2fpublishable@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3092},"type":"module","engines":{"node":">=v22.22.2"},"gitHead":"2a5d0cb645255c464bedbfbfee552733bb75df43","scripts":{"dev":"node --experimental-strip-types src/index.ts","build":"tsc && chmod +x dist/index.js","start":"node dist/index.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e52b8f90-ab33-4592-99d9-c6026c7238c1"}},"repository":{"url":"git+https://github.com/briangershon/publishable.git","type":"git"},"_npmVersion":"11.9.0","description":"A tool for creating and managing content for publication.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/publishable_0.1.1_1774833479282_0.34072967077877325","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@briangershon/publishable","version":"0.1.2","keywords":["cli","publishing","agents","blog"],"author":{"name":"Brian Gershon"},"license":"MIT","_id":"@briangershon/publishable@0.1.2","maintainers":[{"name":"briangershon","email":"brian@briangershon.com"}],"homepage":"https://github.com/briangershon/publishable#readme","bugs":{"url":"https://github.com/briangershon/publishable/issues"},"bin":{"publishable":"dist/index.js"},"dist":{"shasum":"be0b3f764816d5db1cd9259c16410d981ca32d53","tarball":"https://registry.npmjs.org/@briangershon/publishable/-/publishable-0.1.2.tgz","fileCount":5,"integrity":"sha512-YgDifP0TgBBY7+btFHmkUkzc3Y1fWRQ7fUguGThLXSDXm4+RY0t+ol7WPhjGpn5NiO4GTRcEXjQnNBrkvnmlgg==","signatures":[{"sig":"MEYCIQDv1qqAA5bbsFVvfEMkuBz/yONQv9gm6X+BfmmtVuhBOAIhANqVa2cP/L31B7yiSViLnDHcHdXN4qqBIGCb1XKsCg6s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briangershon%2fpublishable@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3131},"type":"module","engines":{"node":">=v22.22.2"},"gitHead":"a6393aae6165651a74bfb500b6b1a9a9233b593f","scripts":{"dev":"node --experimental-strip-types src/index.ts","build":"tsc && chmod +x dist/index.js","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e52b8f90-ab33-4592-99d9-c6026c7238c1"}},"repository":{"url":"git+https://github.com/briangershon/publishable.git","type":"git"},"_npmVersion":"11.9.0","description":"A tool for creating and managing content for publication.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/publishable_0.1.2_1774834302481_0.8248233337067088","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@briangershon/publishable","version":"0.1.3","keywords":["cli","publishing","agents","blog"],"author":{"name":"Brian Gershon"},"license":"MIT","_id":"@briangershon/publishable@0.1.3","maintainers":[{"name":"briangershon","email":"brian@briangershon.com"}],"homepage":"https://github.com/briangershon/publishable#readme","bugs":{"url":"https://github.com/briangershon/publishable/issues"},"bin":{"publishable":"dist/index.js"},"dist":{"shasum":"1e4f256f41a5e9a54c7313e1d226396a33c26a6e","tarball":"https://registry.npmjs.org/@briangershon/publishable/-/publishable-0.1.3.tgz","fileCount":5,"integrity":"sha512-s53ANZr7IEGvFukJ2kGSdwfqRb+6Zd0EwkpluNlYHHEnBpy7neLN7nKxFEbnsCCocBTqYHFfrLEcQg6ruZtQmw==","signatures":[{"sig":"MEYCIQCrpq59oRufdJTseh5tbwoyeLGU5/bBnEPlkAaxfYxqjwIhAKJNAdzJtdG20Vnt0G7buJLAw3DGDuu9KItgogR/wpXx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briangershon%2fpublishable@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3400},"type":"module","engines":{"node":">=v22.22.2"},"gitHead":"79888f7277487a3c4c6f363890cec0544fd91bb2","scripts":{"dev":"node --experimental-strip-types src/index.ts","build":"tsc && chmod +x dist/index.js","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e52b8f90-ab33-4592-99d9-c6026c7238c1"}},"repository":{"url":"git+https://github.com/briangershon/publishable.git","type":"git"},"_npmVersion":"11.9.0","description":"A tool for creating and managing content for publication.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/publishable_0.1.3_1774834738137_0.3853784674558036","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@briangershon/publishable","version":"0.2.0","description":"A tool for creating and managing content for publication.","type":"module","bin":{"publishable":"dist/index.js"},"scripts":{"prepublishOnly":"npm run build","build":"tsc && chmod +x dist/index.js","lint":"oxlint src","test":"vitest run","test:coverage":"vitest run --coverage","check":"npm run lint && tsc --noEmit && prettier --check . && npm test","format":"prettier --write .","dev":"tsx src/index.ts","start":"node dist/index.js"},"keywords":["cli","publishing","agents","blog"],"author":{"name":"Brian Gershon"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/briangershon/publishable.git"},"engines":{"node":">=v22.22.2"},"devDependencies":{"@types/node":"^24.0.0","@vitest/coverage-v8":"^4.1.2","oxlint":"latest","prettier":"^3.8.1","tsx":"^4.21.0","typescript":"^5.8.0","vitest":"^4.1.2"},"dependencies":{"ajv":"^8.18.0","commander":"^14.0.3","gray-matter":"^4.0.3"},"gitHead":"6dbd9206213b14482dc739bf40cfd287bbe99c7b","_id":"@briangershon/publishable@0.2.0","bugs":{"url":"https://github.com/briangershon/publishable/issues"},"homepage":"https://github.com/briangershon/publishable#readme","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-6lnoV25KxCbqRChKcRBPkmwjQSGStIg951zEYJaRqI/sBCVwfGbYa4WQRDSWwBX87hY0DY5D2pzgfyY7xhV8OQ==","shasum":"c0e29f0cc00558d71ac0253e284efe2e1fd251bc","tarball":"https://registry.npmjs.org/@briangershon/publishable/-/publishable-0.2.0.tgz","fileCount":65,"unpackedSize":110753,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briangershon%2fpublishable@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEMCIEe/xF4qY56Fp7a6PpI8Q2DKklyEgqS+xNSm4x9UbJFgAh8W842p6uZtR/aw8fk+sVqOlcGEofPEjvefUFY1cbRa"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e52b8f90-ab33-4592-99d9-c6026c7238c1"}},"directories":{},"maintainers":[{"name":"briangershon","email":"brian@briangershon.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/publishable_0.2.0_1775441490678_0.21740406515887956"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-30T00:57:33.806Z","modified":"2026-04-06T02:11:31.200Z","0.1.0":"2026-03-30T00:57:34.118Z","0.1.1":"2026-03-30T01:17:59.413Z","0.1.2":"2026-03-30T01:31:42.630Z","0.1.3":"2026-03-30T01:38:58.275Z","0.2.0":"2026-04-06T02:11:30.876Z"},"bugs":{"url":"https://github.com/briangershon/publishable/issues"},"author":{"name":"Brian Gershon"},"license":"MIT","homepage":"https://github.com/briangershon/publishable#readme","keywords":["cli","publishing","agents","blog"],"repository":{"type":"git","url":"git+https://github.com/briangershon/publishable.git"},"description":"A tool for creating and managing content for publication.","maintainers":[{"name":"briangershon","email":"brian@briangershon.com"}],"readme":"# @briangershon/publishable\n\nUse any tools you like to write your content and publish it — `publishable` focuses on one thing: ensuring your metadata is consistent every time you export. Define a schema that specifies the frontmatter fields each post requires (title, summary, tags, dates, etc.), and `publishable` validates those fields at export time. Every save is versioned so you can review history or restore earlier drafts.\n\nMost static site generators (Astro, Hugo, Jekyll, Eleventy, Next.js) expect a markdown file per post with YAML frontmatter. Export your post as a complete markdown file — or as JSON — in the exact shape your site requires.\n\n## Installation\n\n```bash\nnpm install -g @briangershon/publishable\n```\n\n## Usage\n\n```bash\nnpx @briangershon/publishable --help\n```\n\n## Quickstart\n\nImagine you're running a gardening website. Each post covers a specific plant and needs structured metadata: plant name, sun requirements, and planting date. Here's how to draft, validate, and export those posts with `publishable`:\n\n| Claude Code Prompt                                                                                                | CLI Command                                                        |\n| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |\n| \"Set up my publishable vault\" _(one-time setup)_                                                                  | `publishable init`                                                 |\n| \"Create a draft for a gardening post about sunflowers. Include plant name, sun requirements, and planting date.\"  | `publishable update sunflowers --file sunflowers.md`               |\n| \"Create a draft for my tulips post\"                                                                               | `publishable update tulips --file tulips.md`                       |\n| \"Create a draft for my radishes post\"                                                                             | `publishable update radishes --file radishes.md`                   |\n| \"Update my sunflowers draft with the latest notes\"                                                                | `publishable update sunflowers --file sunflowers.md`               |\n| \"Create a gardening schema that requires plant name, sun requirements, and planting date\" _(one-time per schema)_ | `publishable schema create gardening --file gardening-schema.json` |\n| \"Export my sunflowers post using the gardening schema as markdown\"                                                | `publishable export sunflowers --schema gardening --format md`     |\n\n## Built-in schemas\n\nBuilt-in schema: `blog`. Run `publishable schema show blog` to inspect it.\n\nSocial and body-only content (LinkedIn, Bluesky, X, etc.) doesn't require a schema — use `--no-schema` on `validate` and `export` to explicitly skip frontmatter validation.\n\nCustom schemas: run `publishable schema --help` for details.\n\n## Local Development\n\nRun directly from source without a build step (requires Node 22.6+):\n\n```bash\nnpm run dev -- --help\n```\n\n## Publishing package to npm\n\nAfter merging latest code to main branch:\n\n1. `git checkout main && git pull`\n2. `npm version patch` # or `minor`, or `major`\n3. `git push --follow-tags`\n\nA GitHub release is automatically written and published to NPM.\n\n**First-time setup:**\n\n1. Add `OPENROUTER_API_KEY` secret in GitHub repo Settings → Secrets and variables → Actions.\n2. Run `npm login` locally and ensure you have access to the `@briangershon` scope.\n3. Manually publish the package once to establish it on npm: `npm publish --access public`\n4. Set up [npm Trusted Publishing](https://docs.npmjs.com/generating-provenance-statements) in your npm package settings to allow the GitHub Actions workflow to publish without a stored token.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}