oshea
v0.13.3
Published
A Markdown-to-PDF convertor with an extensible plugin system.
Maintainers
Readme
oshea
A Node.js command-line tool that transforms Markdown files into beautifully styled PDFs.
It features a powerful, extensible plugin system, making it incredibly versatile for creating anything from CVs and cover letters to recipe books and custom reports. Built on markdown-it for Markdown parsing and puppeteer for PDF generation.
[!TIP] The rise of AI tooling has brought enormous growth to universal Markdown usage. oshea is ideal for anyone who writes in Markdown but needs polished, professional, reproducible output for resumes, reports, presentations, and more.
See Creating Plugins with Claude Skills for building plugins with Claude or Codex.
Quick Start
Convert a basic Markdown file to PDF
oshea my-document.mdUse a built-in plugin for styling
oshea my-resume.md --plugin cvOr through your Markdown's front matter
---
yourName: "Jane Doe"
oshea_plugin: cover-letter
---
**{{ yourName }}**
As a creator of cover letters with professional formatting...oshea my-letter.md --plugin cover-letterGallery
Installation
From NPM
npm install -g osheaFrom GitHub
git clone https://github.com/brege/oshea.git
cd oshea
npm install -gDocumentation
- Docs for the main documentation index
- Paths registry README used by all app and test modules
- Plugins bundled in the app and how to use and build them
- Scripts for an index of maintainer scripts
- Tests for integration, end-to-end, and life-cycle tests with Mocha
Working with Plugins
Use any plugin with your markdown files:
oshea convert my-resume.md --plugin cvTake a look at the Bundled Plugins page for more examples.
Watch mode
oshea can watch for changes to your markdown and plugin files with oshea --watch.
[!TIP] The
convertcommand is implicit when a markdown file is provided. For generators (like building recipe books), the distinction betweenconvertandgeneratebecomes important.
Creating Custom Plugins
To customize layouts, you can archetype from existing plugins.
oshea plugin create --from cover-letter academic-letterPlugin structure
my-plugins/academic-letter/
├── .contract schema and in-situ testing
├── default.yaml plugin config, --help text, metadata
├── style.css custom CSS properties
├── example.md self-activating example
├── index.js handler
└── README.md plugin descriptionPlugins are portable and can be shared across projects. See Bundled Plugins index for more information.
Creating Plugins with Claude and Codex Skills
Use the skill-first workflow documented in the Claude Skills Guide. The technical contract that agents compose plugins from is in: Plugin Contract, AI Interaction Specification, and Archetyping Walkthrough.
Iterate with your agent on the plugin until your document is satisfactory. As of February 2026, this process takes about 5 minutes.
Usage & Commands
Cheat Sheet
See Cheat Sheet for many, many examples.
Tab-completion
echo 'source <(oshea completion)' >> ~/.bashrc
source ~/.bashrcManaging Plugins
oshea plugin help cv # plugin-specific help
oshea plugin list # list all plugins (add --short for brief)
oshea plugin validate my-plugin # validate plugin structure and testsInstalling Plugins
Install a local plugin
oshea plugin add ./my-pluginInstall a plugin from GitHub
oshea plugin add https://github.com/user/my-pluginSee the Plugins Index for more information. There is also an index of known external plugins at github.com/brege/oshea-plugins.
Testing
This project has a rich testing framework based on its .mocharc.js. In addition to the in-situ tests bundled with each plugin, there are over 300 tests, ranging from unit, integration, end-to-end, and lifecycle tests, in a declarative, manifest-driven harness and factory mocking system.
See the Test Index for all test suite documentation.
