{"_id":"@berryhouse/meddler","_rev":"3-60dbd150801d3d4e374052e2d39ca734","name":"@berryhouse/meddler","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@berryhouse/meddler","version":"1.0.0","keywords":["medium","export","converter","markdown","hugo","eleventy","jekyll","astro","static-site-generator","cli","blog","migration"],"author":{"url":"https://brennan.day","name":"Brennan Kenneth Brown"},"license":"AGPL-3.0-or-later","_id":"@berryhouse/meddler@1.0.0","maintainers":[{"name":"brennanbrown","email":"mail@brennanbrown.ca"}],"homepage":"https://github.com/brennanbrown/meddler#readme","bugs":{"url":"https://github.com/brennanbrown/meddler/issues"},"bin":{"meddler":"dist/index.js"},"dist":{"shasum":"28a038f2b9012dccef5aa64aaf84ca57c21b60c4","tarball":"https://registry.npmjs.org/@berryhouse/meddler/-/meddler-1.0.0.tgz","fileCount":11,"integrity":"sha512-4vetXC9Fk8EGFJNF/tg55R5GeXCj2yV53Y3obuL+SiGeQDjlwiTIbk6OzAKWub6DGnlu7l8xuGouC0LNjiiYlw==","signatures":[{"sig":"MEUCIQDybeEHskuH+IZqrCwoSuJfBAuBRWyniHEe2OV9sKDAPgIgG6jG0ga/6/UrRMqXJXyNJhdyc3tUB2ughjOpVBCEx8Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70250},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"220542142647e08c176873568ddc152b180e0635","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"brennanbrown","email":"mail@brennanbrown.ca"},"repository":{"url":"git+https://github.com/brennanbrown/meddler.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.8.0","description":"CLI tool for Meddler - Convert Medium exports to Markdown for Hugo, Eleventy, Jekyll, Astro","directories":{},"_nodeVersion":"25.5.0","dependencies":{"got":"^11.8.6","ora":"^5.4.1","chalk":"^4.1.2","adm-zip":"^0.5.16","fs-extra":"^11.2.0","commander":"^12.1.0","@berryhouse/core":"1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","@types/adm-zip":"^0.5.5","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/meddler_1.0.0_1770895767541_0.41592024025903984","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@berryhouse/meddler","version":"1.0.1","keywords":["medium","export","converter","markdown","hugo","eleventy","jekyll","astro","static-site-generator","cli","blog","migration"],"author":{"url":"https://brennan.day","name":"Brennan Kenneth Brown"},"license":"AGPL-3.0-or-later","_id":"@berryhouse/meddler@1.0.1","maintainers":[{"name":"brennanbrown","email":"mail@brennanbrown.ca"}],"homepage":"https://github.com/brennanbrown/meddler#readme","bugs":{"url":"https://github.com/brennanbrown/meddler/issues"},"bin":{"meddler":"dist/index.js"},"dist":{"shasum":"027adb4a2deb63f470c015d8b77d4c8c9d2b99f4","tarball":"https://registry.npmjs.org/@berryhouse/meddler/-/meddler-1.0.1.tgz","fileCount":11,"integrity":"sha512-ZEQtcnIE1I+NqGMeVtaY3teAqdkkkEhZCPTRO+Ti0uiZ7i85IRnDeWHGPx0uBY+AVz3ezRSEz6zlFcXquRdv0A==","signatures":[{"sig":"MEYCIQCW1JOJ/flG9CHY4+a274ICsPR0rAT1PTKvxcB0PTwfvQIhAMY6Q9DcTsgYZgQyvBoLmZVCj/feyeTPxMiiNtS99giA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70250},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"220542142647e08c176873568ddc152b180e0635","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"brennanbrown","email":"mail@brennanbrown.ca"},"repository":{"url":"git+https://github.com/brennanbrown/meddler.git","type":"git","directory":"packages/cli"},"_npmVersion":"11.8.0","description":"CLI tool for Meddler - Convert Medium exports to Markdown for Hugo, Eleventy, Jekyll, Astro","directories":{},"_nodeVersion":"25.5.0","dependencies":{"got":"^11.8.6","ora":"^5.4.1","chalk":"^4.1.2","adm-zip":"^0.5.16","fs-extra":"^11.2.0","commander":"^12.1.0","@berryhouse/core":"1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.11.0","@types/adm-zip":"^0.5.5","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/meddler_1.0.1_1770895838727_0.7996366519400824","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@berryhouse/meddler","version":"1.0.2","description":"CLI tool for Meddler - Convert Medium exports to Markdown for Hugo, Eleventy, Jekyll, Astro","main":"dist/index.js","bin":{"meddler":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsc --watch","start":"node dist/index.js","prepublishOnly":"npm run build"},"keywords":["medium","export","converter","markdown","hugo","eleventy","jekyll","astro","static-site-generator","cli","blog","migration"],"author":{"name":"Brennan Kenneth Brown","url":"https://brennan.day"},"homepage":"https://github.com/brennanbrown/meddler#readme","repository":{"type":"git","url":"git+https://github.com/brennanbrown/meddler.git","directory":"packages/cli"},"bugs":{"url":"https://github.com/brennanbrown/meddler/issues"},"engines":{"node":">=18.0.0"},"dependencies":{"@berryhouse/core":"1.0.2","commander":"^12.1.0","chalk":"^4.1.2","ora":"^5.4.1","fs-extra":"^11.2.0","adm-zip":"^0.5.16","got":"^11.8.6"},"devDependencies":{"@types/node":"^20.11.0","@types/fs-extra":"^11.0.4","@types/adm-zip":"^0.5.5","typescript":"^5.4.0"},"license":"AGPL-3.0-or-later","gitHead":"220542142647e08c176873568ddc152b180e0635","types":"./dist/index.d.ts","_id":"@berryhouse/meddler@1.0.2","_nodeVersion":"25.5.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-COeS8uC4NOBq8S3BqmYY2VLnUJW01p6nEfwb8eB6DV4Bgav/JVf4LdWnXtIDVaYnKhOZ+had4ad2n2aItjH6jA==","shasum":"ae757dcec52f187047d39db869ee0ac714942e79","tarball":"https://registry.npmjs.org/@berryhouse/meddler/-/meddler-1.0.2.tgz","fileCount":11,"unpackedSize":70259,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAeiP5usy8ZjLXJIgdtW9qgKrUbI4A23MJS0ZXBOyqJEAiEAzgf3p/S0p5u9hTnM3doFT7I+CWPHWI9at2KJNVCDFR4="}]},"_npmUser":{"name":"brennanbrown","email":"mail@brennanbrown.ca"},"directories":{},"maintainers":[{"name":"brennanbrown","email":"mail@brennanbrown.ca"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/meddler_1.0.2_1770896168121_0.9769162732667163"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-12T11:29:27.424Z","modified":"2026-02-12T11:36:08.439Z","1.0.0":"2026-02-12T11:29:27.672Z","1.0.1":"2026-02-12T11:30:38.881Z","1.0.2":"2026-02-12T11:36:08.283Z"},"bugs":{"url":"https://github.com/brennanbrown/meddler/issues"},"author":{"name":"Brennan Kenneth Brown","url":"https://brennan.day"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/brennanbrown/meddler#readme","keywords":["medium","export","converter","markdown","hugo","eleventy","jekyll","astro","static-site-generator","cli","blog","migration"],"repository":{"type":"git","url":"git+https://github.com/brennanbrown/meddler.git","directory":"packages/cli"},"description":"CLI tool for Meddler - Convert Medium exports to Markdown for Hugo, Eleventy, Jekyll, Astro","maintainers":[{"name":"brennanbrown","email":"mail@brennanbrown.ca"}],"readme":"# @meddler/cli\n\nCommand-line interface for converting Medium exports to static site generator formats.\n\n## Installation\n\n```bash\nnpm install -g @meddler/cli\n```\n\n## Usage\n\n### Basic Conversion\n\n```bash\n# Convert with default settings (Hugo + YAML + Markdown)\nmeddler convert medium-export.zip\n\n# Specify output directory\nmeddler convert medium-export.zip -o my-site\n\n# Convert a folder (unzipped export)\nmeddler convert /path/to/medium-export/\n```\n\n### Presets\n\n```bash\n# Use specific SSG presets\nmeddler convert medium-export.zip --preset hugo      # Default\nmeddler convert medium-export.zip --preset eleventy\nmeddler convert medium-export.zip --preset jekyll\nmeddler convert medium-export.zip --preset astro\n```\n\n### Advanced Options\n\n```bash\nmeddler convert medium-export.zip \\\n  --front-matter toml \\\n  --target astro \\\n  --format html \\\n  --include-drafts \\\n  --include-responses \\\n  --embed-mode clean \\\n  --supplementary all \\\n  --date-format \"YYYY-MM-DD\" \\\n  --add-reading-time \\\n  --add-word-count\n```\n\n## Commands\n\n### `convert`\n\nConvert a Medium export to static site format.\n\n```bash\nmeddler convert <input> [options]\n```\n\n**Arguments:**\n- `<input>` - Path to Medium export ZIP file or directory\n\n**Options:**\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `-o, --output` | `meddler-output` | Output directory |\n| `--format` | `markdown` | Output format: `markdown`, `html`, `json` |\n| `--front-matter` | `yaml` | Front matter format: `yaml`, `toml`, `json` |\n| `--target` | `hugo` | Target SSG: `hugo`, `eleventy`, `jekyll`, `astro` |\n| `--preset` | - | Use preset configuration |\n| `--include-drafts` | `false` | Include draft posts |\n| `--include-responses` | `false` | Include response posts |\n| `--embed-mode` | `preserve` | Embed handling: `preserve`, `clean`, `remove` |\n| `--image-mode` | `download` | Image handling: `download`, `reference` |\n| `--supplementary` | `all` | Supplementary data to include |\n| `--date-format` | - | Custom date format string |\n| `--slug-format` | `lowercase` | Slug format: `lowercase`, `preserve` |\n| `--add-reading-time` | `false` | Add reading time to front matter |\n| `--add-word-count` | `false` | Add word count to front matter |\n| `--section-breaks` | - | Section break marker |\n| `--config` | `.meddlerrc.json` | Configuration file path |\n| `--dry-run` | `false` | Show what would be converted |\n| `--verbose` | `false` | Verbose output |\n| `-h, --help` | - | Show help |\n| `-v, --version` | - | Show version |\n\n### `validate`\n\nValidate a Medium export without converting.\n\n```bash\nmeddler validate medium-export.zip\n```\n\n### `info`\n\nShow information about a Medium export.\n\n```bash\nmeddler info medium-export.zip\n```\n\n## Configuration File\n\nCreate `.meddlerrc.json` in your project directory:\n\n```json\n{\n  \"frontMatter\": \"yaml\",\n  \"target\": \"hugo\",\n  \"format\": \"markdown\",\n  \"outputDir\": \"content\",\n  \"includeDrafts\": true,\n  \"includeResponses\": false,\n  \"embedMode\": \"preserve\",\n  \"imageMode\": \"download\",\n  \"supplementary\": [\"profile\", \"earnings\"],\n  \"dateFormat\": \"2006-01-02\",\n  \"slugFormat\": \"lowercase\",\n  \"addReadingTime\": true,\n  \"addWordCount\": true,\n  \"sectionBreaks\": \"###\",\n  \"extraFields\": {\n    \"author\": \"{{author.name}}\",\n    \"locale\": \"en-US\",\n    \"canonical_url\": \"{{url}}\"\n  }\n}\n```\n\n### Field Templates\n\nUse template variables in `extraFields`:\n\n- `{{title}}` - Post title\n- `{{slug}}` - Post slug\n- `{{date}}` - Publication date\n- `{{author.name}}` - Author display name\n- `{{author.username}}` - Author username\n- `{{url}}` - Original Medium URL\n- `{{wordCount}}` - Word count\n- `{{readingTime}}` - Reading time in minutes\n\n## Presets\n\n### Hugo\n\n```json\n{\n  \"target\": \"hugo\",\n  \"frontMatter\": \"yaml\",\n  \"format\": \"markdown\",\n  \"dateFormat\": \"2006-01-02\",\n  \"contentDir\": \"content/posts\",\n  \"draftDir\": \"content/drafts\"\n}\n```\n\n### Eleventy\n\n```json\n{\n  \"target\": \"eleventy\",\n  \"frontMatter\": \"yaml\",\n  \"format\": \"markdown\",\n  \"dateFormat\": \"YYYY-MM-DD\",\n  \"contentDir\": \"posts\",\n  \"draftDir\": \"drafts\"\n}\n```\n\n### Jekyll\n\n```json\n{\n  \"target\": \"jekyll\",\n  \"frontMatter\": \"yaml\",\n  \"format\": \"markdown\",\n  \"dateFormat\": \"YYYY-MM-DD\",\n  \"contentDir\": \"_posts\",\n  \"draftDir\": \"_drafts\"\n}\n```\n\n### Astro\n\n```json\n{\n  \"target\": \"astro\",\n  \"frontMatter\": \"yaml\",\n  \"format\": \"markdown\",\n  \"dateFormat\": \"YYYY-MM-DD\",\n  \"contentDir\": \"src/content/blog\",\n  \"draftDir\": \"src/content/drafts\"\n}\n```\n\n## Examples\n\n### Convert with Custom Settings\n\n```bash\nmeddler convert export.zip \\\n  --front-matter toml \\\n  --target astro \\\n  --format html \\\n  --include-drafts \\\n  --supplementary profile,earnings \\\n  --add-reading-time\n```\n\n### Use Configuration File\n\n```bash\n# Create config\ncat > .meddlerrc.json << EOF\n{\n  \"target\": \"eleventy\",\n  \"includeDrafts\": true,\n  \"addReadingTime\": true\n}\nEOF\n\n# Convert using config\nmeddler convert export.zip\n```\n\n### Dry Run\n\n```bash\n# Preview what will be converted\nmeddler validate export.zip --verbose\nmeddler convert export.zip --dry-run\n```\n\n## Output Structure\n\n```\nmeddler-output/\n├── content/\n│   ├── posts/\n│   │   ├── 2024-01-01_my-post.md\n│   │   └── 2024-01-02-another-post.md\n│   └── drafts/\n│       └── draft-post.md\n├── data/\n│   ├── author.json\n│   ├── publications.json\n│   ├── lists/\n│   │   └── reading-list.json\n│   └── earnings.json\n├── images/\n│   ├── image1.jpg\n│   └── image2.png\n└── meddler.log\n```\n\n## Error Handling\n\nThe CLI provides detailed error messages:\n\n- **Invalid export**: \"This doesn't look like a Medium export. No README.html found.\"\n- **No posts**: \"This export doesn't contain any posts.\"\n- **Permission denied**: \"Cannot write to output directory.\"\n- **Corrupted file**: \"Failed to read ZIP file.\"\n\n## Tips\n\n1. **Backup your export**: Always keep the original Medium export\n2. **Test with dry-run**: Use `--dry-run` to preview changes\n3. **Use presets**: Start with a preset, then customize\n4. **Check output**: Review converted files before publishing\n5. **Handle images**: Choose `download` for self-contained sites or `reference` for external hosting\n\n## Troubleshooting\n\n### Large Exports\n\nFor exports with many posts (>1000), consider:\n- Using `--exclude-images` if images are hosted elsewhere\n- Splitting conversion into batches\n- Increasing Node.js memory: `node --max-old-space-size=4096 $(which meddler)`\n\n### Memory Issues\n\n```bash\n# Increase Node.js memory limit\nexport NODE_OPTIONS=\"--max-old-space-size=4096\"\nmeddler convert large-export.zip\n```\n\n### Performance\n\n- SSD storage improves ZIP extraction speed\n- More RAM helps with large exports\n- Close other applications during conversion\n\n## Integration\n\n### GitHub Actions\n\n```yaml\nname: Convert Medium Export\non: [push]\njobs:\n  convert:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - uses: actions/setup-node@v2\n      - run: npm install -g @meddler/cli\n      - run: meddler convert medium-export.zip --preset hugo\n      - uses: actions/upload-artifact@v2\n        with:\n          name: site\n          path: meddler-output/\n```\n\n### Makefile\n\n```makefile\n.PHONY: convert clean\n\nconvert:\n\tmeddler convert medium-export.zip --preset hugo\n\nclean:\n\trm -rf meddler-output\n\ndeploy: clean convert\n\t# Your deployment commands here\n```\n\n## License\n\nAGPL-3.0-or-later\n\n## 🍓 About\n\nMeddler is a 🍓 [Berry House](https://berryhouse.ca) project created by [Brennan Kenneth Brown](https://brennan.day).\n\nIf you find Meddler useful and want to support projects like this, please consider [donating on Ko-fi](https://ko-fi.com/brennan).\n","readmeFilename":"README.md"}