Tools, templates, React components, reusable GitHub Actions, and curated lists for building emails — write in Markdown or composable functions, get responsive HTML (or React email trees) out, and ship them through shared CI.
This profile README lives in
LLazyEmail/.githubatprofile/README.md. Deeper pages: architecture · repository catalog · contributing & agents.
📖 Documentation: docs.llazyemail.com · llazyemail.github.io/documentation · Source
| I want to... | Go to |
|---|---|
| Understand the mission & ecosystem | What is LLazyEmail? |
| Start generating HTML today | Getting started |
| See how core repos connect | Architecture |
| Convert Markdown to email | Main project (markdown-to-email) |
| Browse documentation sites & lists | Documentation side |
| Browse every repository | Repository index · Full catalog |
| Use React email components | React design system |
| Start a new template | Starters & templates |
| Install npm / GitHub Packages | npm packages |
| Adopt shared CI | CI & workflow conventions |
| Contribute or run an AI agent | Contributing · AGENTS.md |
| Learn how it all works | Learning resources |
| See similar projects | Related projects |
LLazyEmail is an open organization around email template tooling: parsing Markdown, composing HTML from small functions or React components, writing files safely, inspecting which part of an email broke, and automating render + docs CI with reusable GitHub Actions.
Mission in one line: make production HTML email generation boring, testable, and shareable — without pretending email clients are modern browsers.
| Area | What you get |
|---|---|
| Generation pipeline | Catalog → render → disk write (generate-template + markup-generator) |
| Part rendering | Deterministic parts + compose + traces (render-template) and email shell / inspector (template-runtime-display) |
| Markdown path | markdown-to-email (+ markdown-regex, generator-markdown-to-html) |
| Templates | Hackernoon-style (hn_email_template), NoMoreToGo (nomoretogo_email_template), Postmark transactional (postmark-transactional-template-simple), Lit / Remix / React starters |
| CI | email-template-workflows for rendering; documentation-actions for Docusaurus & awesome lists |
| Knowledge | Product docs site, Awesome Email Marketing, Awesome Newsletters, v-school, AssemBLYA, fuck-ecoflow |
We do not invent marketing stats here. Star counts and package versions below are taken from GitHub / npm at documentation time and will drift.
Pick the path that matches your project.
Requires Node (see each package engines; many packages want Node 20+, some CLIs 22+ / 24+).
# Public npm write helpers
npm install markup-generator
# GitHub Packages (@llazyemail) — need read:packages + .npmrc (see each repo's .npmrc.example)
npm install @llazyemail/generate-template @llazyemail/template-runtime-displayimport { createGenerator } from '@llazyemail/generate-template';
const generate = createGenerator({
catalog: [{ ids: ['welcome'], render: (p) => `<p>Hello ${(p as { name: string }).name}</p>` }],
samplePayloads: { welcome: { name: 'Alex' } },
outDir: 'generated',
});
await generate.run({ templateId: 'welcome', payload: { name: 'Alex' }, write: { out: 'generated/welcome.html' } });CLI (after a project generate-template.config.* that exports createProjectGenerator):
npx generate-template --list
npx generate-template --all --out=generatedgit clone https://github.com/LLazyEmail/markdown-to-email.git
cd markdown-to-email
npm install
# Put Markdown in ./source/source.md
npm run dev:parseFull # → generated HTML
# npm run dev:parseReactFull # → React treePackage on npmjs: @lazyemail/markdown-to-email.
npx template-runtime-display inspect ./letter.mjs --out report.html
# or live:
npx template-runtime-display dev ./letter.mjspermissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v7
- uses: LLazyEmail/email-template-workflows@v1
with:
working-directory: .
command: npx generate-template --all --out=generated
artifact-directory: generated- Product docs: https://docs.llazyemail.com
- Awesome Email Marketing: https://github.com/LLazyEmail/awesome-email-marketing
- Awesome Newsletters: https://llazyemail.github.io/awesome-newsletters/
How the core repositories relate. Full write-up: docs/architecture.md.
flowchart TB
subgraph Consumers["Template consumers"]
HN["hn_email_template"]
NMTG["nomoretogo_email_template"]
Postmark["postmark-transactional-template-simple"]
Lit["_playing_with_lit"]
end
subgraph Generate["Generation"]
Gen["generate-template<br/>@llazyemail/generate-template"]
Markup["markup-generator"]
end
subgraph Render["Rendering"]
RT["render-template<br/>@llazyemail/render-template"]
TRD["template-runtime-display<br/>@llazyemail/template-runtime-display"]
end
subgraph Markdown["Markdown path"]
MTE["markdown-to-email"]
end
subgraph CI["Shared Actions"]
ETW["email-template-workflows"]
DocA["documentation-actions"]
end
HN --> TRD
Postmark --> Gen
Postmark --> TRD
Lit --> Gen
NMTG --> Markup
NMTG -.-> MTE
Gen --> Markup
TRD --> RT
Gen -.-> TRD
MTE --> Markup
ETW -->|"render → artifact"| Gen
DocA -->|"docs sites & awesome lists"| Docs["documentation · awesome-* · v-school · assemblya · fuck-ecoflow"]
Ownership rules (short):
| Package | Owns | Does not own |
|---|---|---|
markup-generator |
Disk writes, filenames, read helpers | Template content |
@llazyemail/generate-template |
Catalog, payloads, run / writeAll, CLI |
Part compose / email chrome |
@llazyemail/render-template |
Ordered parts + compose + traces | Catalog / file I/O |
@llazyemail/template-runtime-display |
Email shell, inspector, quality helpers | Generation catalog |
email-template-workflows |
CI install → render → artifact → comment | Your template source |
markdown-to-email |
Markdown syntax → HTML / React layouts | Modern catalog CLI (use generate-template for new work) |
Consumers inject render functions into createGenerator rather than reimplementing validation + write pipelines locally. See generate-template/docs/organization-schema.md.
| Repository | Role | Links |
|---|---|---|
| documentation | Primary Docusaurus product docs | docs.llazyemail.com · GitHub Pages |
| documentation-actions | Reusable Actions + workflows for docs / awesome lists | Pin @v1 · actions index |
| awesome-email-marketing | Curated email marketing resources + docs site under website/ |
Explore tags on the published site |
| awesome-newsletters | Curated newsletter craft / directories / tools | GitHub Pages |
| v-school | Docusaurus docs (inventory, 3D parts, printing, lectures; EN + UK) | Thin documentation-actions callers |
| assemblya | AssemBLYA docs (EN + UK); working fork of atherdon/assemblya |
Uses documentation-actions for CI |
| fuck-ecoflow | Docusaurus docs site; working fork; Git LFS for media | git lfs install before clone/pull |
Sister relationship: documentation ↔ awesome-email-marketing ↔ awesome-newsletters share foundation goals; long-term they lean on documentation-actions instead of duplicated workflow YAML.
markdown-to-email is the classic core engine. It parses Markdown and renders responsive HTML or React email templates.
Where to look in the code
npm modules used by markdown-to-email
"atherdon-callbacks": "^1.10.0",
"atherdon-newsletter-html-replacer": "^0.4.0",
"atherdon-newsletter-js-layouts": "^1.5.1",
"atherdon-newsletter-react": "^1.0.11",
"atherdon-newsletter-react-replacer": "^0.4.0",
"atherdon-old-newsletter-js-outertemplate": "^2.4.0",
"markup-generator": "^0.4.0",
Today’s parallel path: new template repos (for example
postmark-transactional-template-simple,hn_email_template’s currentscripts/generator,_playing_with_lit) prefer@llazyemail/generate-template+@llazyemail/template-runtime-displayrather than growing the Markdown parser further. Both paths remain first-class in the org.
Active highlights by category. Full table of every public repo (including languages and star counts from the API): docs/repositories.md.
| Repository | Description |
|---|---|
| markup-generator | File output and markup-writing generator utility (markup-generator on npmjs) |
| generate-template | Catalog / payload / run+writeAll engine (@llazyemail/generate-template) |
| render-template | Deterministic part/compose HTML renderer with traces |
| template-runtime-display | Email shell + inspector CLI on top of render-template |
| email-template-workflows | Reusable GitHub Action: install → render → artifact → PR comment |
| validator | Small TypeScript validation helpers (@llazyemail/validator) |
| markdown-to-email | Core engine for transforming Markdown into responsive HTML/React email templates |
| generator-markdown-to-html | Generator module for Markdown to HTML (unified / remark / rehype) |
| markdown-regex | Regex constants for parsing Markdown syntax |
| template-object | Factory object for display classes, helps manage email template displays |
| amazon-ses-service | AWS SES sending integration |
| Repository | Description |
|---|---|
| hn_email_template | Plain-JS Hackernoon-style newsletter generator (current path under scripts/) |
| nomoretogo_email_template | NoMoreToGo / MailerLite-style template monorepo (active work under template/) |
| postmark-transactional-template-simple | Standalone transactional email generator proving the catalog + runtime pattern |
| _playing_with_lit | Lit SSR email experiments; consumer of generate-template |
| Repository | Description |
|---|---|
| react-email-template | Core React components for structural email layouts (the "React One" template) |
| react-email-table | Cross-client HTML table wrappers for React emails |
| react-email-typography-components | Components for structured email typography |
| react-email-miscellaneous-components | Miscellaneous React helpers for email layouts |
| react-email-letter-components | Letter-style components for email creation |
| react-sendgrid-form | Form component integration for SendGrid |
| email-template-react | React email template |
| nextjs-preview | Next.js preview app for templates |
| Repository | Description |
|---|---|
| default-email-template | General email boilerplate, good for cloning |
| generator-module | Example generator module for cloning (historical link; not in current public inventory) |
| replacer | Example replacer module for cloning (archived on GitHub) |
| pixel-email-cli | Example CLI for cloning |
| template-typography | Starter for custom email typography packages |
| free-email-templates-to-try | Free, ready-to-use HTML email templates |
| react-plain-template-example | Plain JavaScript and React DOM template example |
| remix-ecommerce-react-email-template | E-commerce email starter built with React |
| remix-hn-react-email-template | Hackernoon-style React remix starter |
| remix-amazon-billing-email-template | Amazon-style billing remix starter |
| remix-google-billing-email-template | Google-style billing remix starter |
| remix-stripe-billing-email-template | Stripe-style billing remix starter |
| remix-taskrabbit-react-email-template | TaskRabbit-style remix starter |
| remix-uber-react-email-template | Uber-style remix starter |
| remix-venmo-react-email-template | Venmo-style remix starter |
| template-react-email-template | Template repo for React email design-system starters |
| Repository | Description |
|---|---|
| hn_email_template | HN template |
| mjml-email-template | MJML version |
| nomoretogo_email_template | NMTG version |
| _trying-lit | Plain JS template (atherdon-old-newsletter-js-outertemplate) (historical link; not in current public inventory — see _playing_with_lit) |
| Repository | Description |
|---|---|
| _trying_simple_tags | Sandbox for HTML/tag parsing |
| _trying-oclif | Standalone oclif CLI for the rendering engine |
| awesome-email-marketing | Curated list of email marketing tools, articles and frameworks |
| awesome-newsletters | Curated newsletter directories, articles, tools, and resources |
| templates-battlefield | Sandbox for template experiments |
Archived / legacy repositories
| Repository | Notes |
|---|---|
| _trying_frontmatter | Archived front-matter experiments |
| lit-typography | Archived lit-typography package |
| replacer | Archived replacer module (“finally getting a separated place”) |
Prefer current packages above. Full flags and languages: docs/repositories.md.
Versions below were read from npmjs / GitHub Packages APIs while writing this doc — always confirm with npm view / the package page before pinning.
| Package | Approx. version | Repository |
|---|---|---|
markup-generator |
4.1.0 | markup-generator |
markdown-regex |
2.1.1 | markdown-regex |
@lazyemail/markdown-to-email |
3.0.2 | markdown-to-email |
email-template-object |
0.2.0 | template-object |
Requires a token with read:packages and scope mapping in .npmrc (copy each repo’s .npmrc.example).
| Package | Approx. version | Repository |
|---|---|---|
@llazyemail/generate-template |
1.9.0 | generate-template |
@llazyemail/template-runtime-display |
1.2.1 | template-runtime-display |
@llazyemail/render-template |
0.3.0 | render-template |
@llazyemail/validator |
0.2.0 | validator |
simple-tags (org package) |
5.0.0 | _trying_simple_tags |
markup-generator v4 bundles its internal workspace packages into one public tarball (trusted publishing / OIDC). Older markdown-to-email READMEs may still list pre-v4 dependency ranges.
Email HTML — email-template-workflows
Pin LLazyEmail/email-template-workflows@v1. Supports npm / yarn / pnpm / bun, monorepos, script mode, command mode, and build-command mode (MJML, pandoc, …). Uploads artifacts and can upsert one PR comment per comment-key. Agent playbook: docs/agent-playbook.md.
Docs & awesome lists — documentation-actions
Pin LLazyEmail/documentation-actions@v1 after release. Reusable workflows cover Docusaurus test-deploy / Pages deploy, markdownlint, soft-fail lychee, changelog, docs-index, catalog API, auto-rebase, star-request, and awesome-list checks. Prefer copying from examples/ over duplicating YAML. Checklist: skills/docusaurus-docs-site/SKILL.md.
- Pin third-party Actions to a full commit SHA with a
# vX.Y.Zcomment; Renovate updates them. - Prefer draft PRs; do not merge unless the owner asks.
- Org Actions access must allow reusable workflows from these repositories.
More detail: docs/contributing.md.
- Open small, single-purpose draft PRs.
- Keep existing curated content — extend, annotate, or archive; do not delete wholesale.
- Include the commit trailer when working for the maintainer:
Co-authored-by: petroved <arthur.tkachenko.netweight@gmail.com>
- Follow the target repository’s
CONTRIBUTING.md/AGENTS.md. - Never commit secrets.
| Pattern | Used by | Flow |
|---|---|---|
.changelog/ fragments |
email-template-workflows, documentation-actions |
Fragment → release PR folds into CHANGELOG.md → tag / GitHub Release → floating v1 |
| Changesets | generate-template (and similar libraries) |
npx changeset → Version Packages PR → publish on GitHub Release |
| GitHub Release + publish workflow | markup-generator, template-runtime-display, … |
Release / workflow publishes to npmjs or GitHub Packages |
Do not hand-edit compiled CHANGELOG.md files when a fragment or Changesets system is in use. Labels like skip-changelog / no-changelog waive CI where configured.
Most active repos ship a root AGENTS.md. Agents should read it first.
Org-wide expectations:
- Treat
src/+ tests as ground truth; keep docs in sync without deleting historical guidance. - Prefer
createGenerator+ injectedrenderover localBuildPipeline-style duplication. - Prefer thin callers of
documentation-actions/email-template-workflows. - Parts passed to
render-templatemust return strings (stringify Lit / React output first). - Open draft PRs; never merge/close unless the human owner asks.
- Always add the
Co-authored-by: petroved <…>trailer when working for Arthur.
Indexes: many repos also expose llms.txt / llms-full.txt for LLM tooling.
| Resource | URL |
|---|---|
| Organization | https://github.com/LLazyEmail |
| Profile source | https://github.com/LLazyEmail/.github |
| Product docs | https://docs.llazyemail.com |
| Docs (GitHub Pages) | https://llazyemail.github.io/documentation/ |
| Awesome Email Marketing | https://github.com/LLazyEmail/awesome-email-marketing |
| Awesome Newsletters site | https://llazyemail.github.io/awesome-newsletters/ |
| https://www.linkedin.com/company/llazyemail/ | |
| Architecture (this repo) | docs/architecture.md |
| Full repo catalog | docs/repositories.md |
| Contributing | docs/contributing.md |
Suggested consumer README badge examples:
[](https://github.com/LLazyEmail/email-template-workflows)
[](https://github.com/LLazyEmail/documentation-actions)- Build your email templates with React
- Creating email templates with React components
- HTML Email Basics
- How to build emails with React
- Build a Reusable Design System With React
- Create elegant HTML email templates using React
- React-email-editor
Building templates and components
Email marketing and strategy
Tools, lists and glossary
- Designing Error Messages and a Logging Strategy in Node.js
- Comparing Node.js logging tools
- npmlog
- How to use levels function in Logger
- How to handle log events with the npmlog library?
- markdownlint
- Mintlify docs
Worth a look for ideas and comparison:
| Path | Purpose |
|---|---|
profile/README.md |
GitHub organization profile (this file) |
docs/architecture.md |
Core repo relationship diagram and ownership |
docs/repositories.md |
Full categorized catalog of public repos |
docs/contributing.md |
Contributing, AGENTS, CI, changelog, packages |
README.md |
Short pointer for the .github repository itself |
Facts in these docs come from public repository metadata and READMEs. If something drifts, prefer the source repo and send a draft PR that extends this profile rather than deleting sections.
