npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

haraka-plugin-mailkite

v0.1.0

Published

Connect an existing Haraka MX or submission server to a MailKite-contract backend (MailKite Cloud or self-hosted api-local): inbound mail as signed webhooks, anti-open-relay RCPT checks, SMTP AUTH + relay.

Readme

haraka-plugin-mailkite

Connect an existing Haraka install to a MailKite-contract backend — MailKite Cloud or a self-hosted api-local — without adopting the whole mailkite/server repo.

  • MX role: inbound mail is POSTed to your backend as an HMAC-signed webhook (raw RFC822 + envelope + SPF/DKIM/spam verdict headers), with live anti-open-relay recipient checks against the backend's accepted-domains list.
  • Submission role: SMTP AUTH validated against the backend (API key = password), authenticated mail relayed through the backend's send pipeline.
  • Backend interface: the contract.

Install

cd /path/to/your/haraka   # the directory holding config/
npm install haraka-plugin-mailkite
echo mailkite >> config/plugins

MX and submission belong on separate Haraka instances (different trust models) — install the package in each and set the role per instance.

Configure — config/mailkite.ini

[main]
role = mx                                   ; or: submit
api_url = https://api.mailkite.dev          ; your backend base URL
ingest_url = https://api.mailkite.dev/api/ingest   ; mx role only
; hmac_secret is read from env MAILKITE_HMAC_SECRET — never put it on disk

Env (preferred over ini for anything secret):

| Var | Role | Purpose | |---|---|---| | MAILKITE_HMAC_SECRET | both | shared edge secret (signs ingest, authenticates edge calls) | | MAILKITE_API_URL | both | backend base URL | | MAILKITE_INGEST_URL | mx | ingest endpoint override | | MAILKITE_RELAY_URL | submit | relay endpoint override |

For the MX role, keep rcpt_to.host_list out of config/plugins — this plugin's live backend check replaces it. For the submission role, TLS is required (AUTH is only advertised on encrypted sessions).

Multiple backends on one MX

Drop a config/backends.json and one Haraka MX serves several backends at once — each recipient domain routed to the backend that claims it (order = priority):

{
  "backends": [
    { "name": "cloud", "url": "https://api.mailkite.dev",  "secretEnv": "MAILKITE_HMAC_SECRET" },
    { "name": "mine",  "url": "https://mail.example.com",  "secretEnv": "MY_BACKEND_SECRET" }
  ]
}

Semantics: docs/multi-backend.md.

Provenance

plugins/ and lib/ are verbatim copies of the canonical sources in mailkite/server (mta/, mta-submit/) — the same code running MailKite's production MX. scripts/sync.mjs --check (run by npm test and prepack) fails the build if they ever drift. File issues against the canonical repo.

License

AGPL-3.0-only. The MailKite name and logo are trademarks — see the repo's TRADEMARK.md.