Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Releases: productdevbook/unemail

v0.5.0

19 Jun 18:16
@github-actions github-actions

Choose a tag to compare

🚀 Features

View changes on GitHub

Contributors

narekhovhannisyan
Assets 2
Loading

v0.4.1 — shipped: deliverability, compliance, and ergonomics

17 Apr 07:00
@github-actions github-actions

Choose a tag to compare

First release carrying the full v1.1 scope — 36 issues closed since v0.3.0, 251 tests up from 141, still zero runtime dependencies, still works on Node / Bun / Deno / Cloudflare Workers / the browser.

Install:

npm i unemail # or: pnpm add unemail / bun add unemail
deno add jsr:@productdevbook/unemail

⚠️ Breaking

One rename across every driver and webhook import — one sed away.

- import resend from "unemail/drivers/resend"
+ import resend from "unemail/driver/resend"
- import resendWebhook from "unemail/webhooks/resend"
+ import resendWebhook from "unemail/webhook/resend"

Matches the naming convention used by the sibling libs (ahize, etiket). See MIGRATION.md for the full diff + shell recipe.


🛡️ Compliance & deliverability

The headline of v1.1. Gmail + Yahoo Feb-2024 bulk-sender rules are now a one-liner, and every primitive you need to run a real outbound program ships in-core.

  • RFC 8058 one-click List-Unsubscribe — add unsubscribe: { url, mailto } to any message; headers auto-injected. Framework-agnostic one-click handler + HMAC-signed tokens in `unemail/compliance`. (#57)
  • DKIM signing in the SMTP driver — RSA-SHA256 and Ed25519-SHA256, pure Web-Crypto, relaxed/relaxed canonicalization. Per-message resolver for multi-tenant. (#58)
  • Suppression store (memory + unstorage) with `withSuppression` middleware — bounces / complaints / opt-outs never leave the process. (#59)
  • Preferences store (category opt-outs) with `withPreferences` middleware — the Novu/Knock primitive, slim and pluggable. (#84)
  • ARC signer (RFC 8617) for forwarders. (#78)
  • DMARC aggregate (RUA) parser — gzip-aware, zero-dep XML subset. (#69)
  • MTA-STS policy generator + TLS-RPT JSON parser. (#79)
  • FBL/ARF parser (RFC 5965). (#80)

📨 Core & drivers

  • `msg.template` pass-through across SendGrid, Mailgun, Postmark, Brevo, MailerSend, Loops, Zeptomail — native template variables everywhere. (#60)
  • `msg.personalizations` — SendGrid-style per-recipient fan-out; one API call when the driver supports it, automatic loop otherwise. (#63)
  • `msg.tracking` / `msg.sandbox` / `msg.metadata` — per-message overrides mapped into each provider. (#66)
  • `msg.amp` and `msg.raw` — AMP4Email alt-part and bypass-the-builder raw MIME. (#91)
  • `driver.cancel(id)` / `driver.retrieve(id)` — Resend implements; others surface `UNSUPPORTED`. (#65)
  • `email.sendBatchStream(messages)` — AsyncIterable that yields one result per message for huge fan-outs. (#89)
  • Queue worker honours `msg.scheduledAt` (memory + unstorage). (#61)
  • New queue adapters: BullMQ, pg-boss, AWS SQS. (#77)
  • Multi-region driver presets — Mailgun EU/US. (#76)
  • Typed `Address` primitive (RFC 5322 + SMTPUTF8 validation). (#81)
  • Typed `getInstance()` escape hatch documented for native provider APIs. (#67)
  • `msg.preheader` is a first-class field.

🛠️ Middleware

  • `withOAuth2` + `oauth2Gmail` / `oauth2Microsoft` presets — access-token refresh with caching. (#62)
  • `withDedupe` (idempotencyKey / contentHash / recipient+subject). (#82)
  • `withRetry` gains `exponential-jitter` / `full-jitter` / `decorrelated-jitter` + dead-letter routing. (#83)
  • `withRateLimit` gets `rateLimitPresets` (sendgrid, mailgun, resend, postmark, ses, brevo) + proactive `Retry-After` backoff. (#75)
  • `withMetrics` + Prometheus exposition registry. (#86)
  • `scrubPii` / `withPiiLogging` — mask / hash / drop for GDPR logging. (#90)

🎨 Rendering

  • HTML pipeline (`unemail/render/pipeline`) — composable `withPreheader`, `cidRewrite`, `darkModeHook`, `inlineCss` transforms. (#73, #92)
  • Handlebars, Liquid, and i18n renderer adapters. (#87)
  • ICS calendar invite builder (`unemail/ics`) — RFC 5545 `VEVENT` with organizer, attendees, alarms, methods REQUEST / PUBLISH / CANCEL / REPLY. (#64)

📡 Inbound & webhooks

  • Reply stripper (EN/TR/DE/FR/ES) + thread stitcher over `In-Reply-To` / `References`. (#68)
  • SES inbound adapter via SNS, with auto-confirm hook. (#85)
  • Standard Webhooks (standardwebhooks.com) reference verifier — <5 kB drop-in replacement for Svix's ~1 MB client. (#71)
  • Unified event stream (`unemail/events`) — `send.queued` / `send.attempt` / `send.success` / `send.error` converges with webhook-native `delivered` / `opened` / `clicked` / `bounced` / `complained` / `unsubscribed` into a single `EmailEvent` bus. (#70)

🧪 Testing & DX

  • New matchers: `toHaveSentTo`, `toHaveSentWithSubject`, `toHaveSentWithAttachment`, `toHaveSentMatching`. (#74)
  • `toEmailSnapshot()` helper — scrubs Message-ID/Date for stable snapshots. (#74)
  • `Result` helpers — `isOk` / `isErr` / `unwrap` / `unwrapOr` / `mapOk` / `mapErr` / `tryAsync`. (#88)
  • New cover art, full README refresh.
  • Idempotent release workflow — reruns cleanly after partial failures.
  • `pnpm release` now runs `attw` + `jsr:check --dry-run` before bumpp, so slow-type errors surface locally instead of in CI.

📚 Docs

README, MIGRATION.md, and every `docs/*.md` page refreshed in lockstep. New: `docs/rfcs/001-packaging.md` documents the single-package + sub-paths decision for v1.x.

🙏 Credits

v1.1 shipped end-to-end with Claude Opus 4.7 (1M context). Research, architecture, 251 tests, 36 issues — one sprint.

Full diff: v0.3.0...v0.4.1

Loading
alexfriesen reacted with rocket emoji
1 person reacted

v0.3.0

09 Aug 13:35
@github-actions github-actions

Choose a tag to compare

🚀 Features

View changes on GitHub

Contributors

unitythemaker
Loading
adarshmadrecha reacted with thumbs up emoji luisvinicius09 reacted with rocket emoji
2 people reacted

v0.2.0

10 Jun 08:14
@github-actions github-actions

Choose a tag to compare

🚀 Features

View changes on GitHub

Contributors

fayazara
Loading

v0.1.1

03 May 04:19
@github-actions github-actions

Choose a tag to compare

🐞 Bug Fixes

View changes on GitHub

Contributors

productdevbook
Loading

v0.1.0

17 Apr 18:51
@github-actions github-actions

Choose a tag to compare

🐞 Bug Fixes

View changes on GitHub

Contributors

productdevbook
Loading

v0.0.4

07 Apr 09:03
@github-actions github-actions

Choose a tag to compare

🚀 Features

View changes on GitHub

Contributors

productdevbook
Loading

v0.0.3

06 Apr 20:51
@github-actions github-actions

Choose a tag to compare

🚀 Features

View changes on GitHub

Contributors

productdevbook
Loading

v0.0.2

06 Apr 14:26
@github-actions github-actions

Choose a tag to compare

🚀 Features

🐞 Bug Fixes

View changes on GitHub

Contributors

productdevbook
Loading

AltStyle によって変換されたページ (->オリジナル) /