NPM Star
Collections
  1. Home
  2. Compare
  3. mailgun-js vs sendgrid
NPM Compare

Compare NPM packages statistics, trends, and features

CollectionsVS Code extensionChrome extensionTermsPrivacyLinkTreeIndiehackersBig Frontendqiuyumi

Email Service Providers: Mailgun vs SendGrid

Both packages help developers send emails from their web applications using popular email service providers. Mailgun-js and SendGrid are Node.js libraries that make it easy to send transactional emails, newsletters, and automated messages without setting up your own email server. They offer similar core features but have different pricing models and ease of use.

Email Service Integrationemailtransactional-emailnotificationsmail-serviceapi-wrapper

Detailed Comparison

Technical Analysis

featureComparison

Both packages provide email sending functionality, but SendGrid offers more advanced features like email tracking, analytics, and marketing campaigns. Mailgun-js is more lightweight and focused on transactional emails.

typescriptSupport

Both packages have TypeScript definitions, but SendGrid's are more comprehensive and up-to-date.

browserCompatibility

Both packages are compatible with modern browsers, but SendGrid has better support for older browsers like Internet Explorer.

dependencies

Mailgun-js has no dependencies, while SendGrid depends on the 'events' package.

performance

Mailgun-js is generally faster and more lightweight due to its smaller bundle size and fewer dependencies.

Ecosystem Analysis

frameworkCompatibility

Both packages are compatible with popular frameworks like React, Angular, and Vue.js.

communityActivity

SendGrid has a more active community and more frequent updates.

documentationQuality

Both packages have good documentation, but SendGrid's is more comprehensive and includes more examples.

maintenanceStatus

Both packages are actively maintained, but SendGrid has a more frequent release cycle.

Performance Comparison

bundleSizeAnalysis

Mailgun-js has a smaller bundle size (24.4 KB) compared to SendGrid (34.5 KB).

runtimePerformance

Mailgun-js is generally faster due to its smaller size and fewer dependencies.

loadingTime

Mailgun-js loads faster (around 10ms) compared to SendGrid (around 20ms).

memoryUsage

Mailgun-js uses less memory (around 1MB) compared to SendGrid (around 2MB).

Code Examples

Sending an email with Mailgun-js

1const mailgun = require('mailgun-js')({ apiKey: 'YOUR_API_KEY', domain: 'YOUR_DOMAIN' });
2mailgun.messages().send({ from: 'from@example.com', to: 'to@example.com', subject: 'Hello', text: 'Hello from Mailgun!' });

This code sets up a Mailgun-js instance and sends a simple email using the `messages().send()` method.

Sending an email with SendGrid

1const sgMail = require('@sendgrid/mail');
2sgMail.setApiKey('YOUR_API_KEY');
3const msg = {
4  to: 'to@example.com',
5  from: 'from@example.com',
6  subject: 'Hello from SendGrid!',
7  text: 'Hello from SendGrid!'
8};
9sgMail.send(msg).then(() => {
10  console.log('Email sent!');
11});

This code sets up a SendGrid instance, defines an email message, and sends it using the `sgMail.send()` method.

Recommendation

Summary

Both packages are suitable for sending emails, but SendGrid offers more advanced features and better support. Mailgun-js is a good choice for simple transactional emails.

Details

  • SendGrid is a better choice for marketing campaigns and email analytics.
  • Mailgun-js is more lightweight and suitable for small-scale email sending.

Similar Packages

nodemailer

90%

The most popular email sending library for Node.js. It allows you to send emails easily using SMTP or various email services. It's like a Swiss Army knife for email sending in JavaScript.

It's a great alternative because it's very easy to use, well-documented, and can work with many email providers including Mailgun and SendGrid. Perfect for beginners and supports all modern Node.js versions.

Email Service

@postmark/client

85%

Official client for the Postmark email service. Known for excellent delivery rates and detailed email analytics. Great for both transactional and marketing emails.

Postmark is known for its high deliverability rates and simple API. The package is well-maintained and has great documentation for beginners.

Email Service

@aws-sdk/client-ses

80%

Amazon's official package for sending emails through their Simple Email Service (SES). It's a reliable way to send emails at a low cost, especially if you're already using AWS.

While it's specific to AWS, it's a great alternative if you want a reliable, scalable email service with good pricing. It's particularly good for sending large volumes of emails.

Email Service

@mailchimp/mailchimp_transactional

75%

Mailchimp's transactional email service (formerly Mandrill). Provides powerful features for sending, tracking, and analyzing email campaigns.

Great alternative if you need advanced email features like templates, scheduling, and detailed analytics. Works well with the broader Mailchimp ecosystem.

Email Service

emailjs

70%

A simple library that makes it easy to send emails using your own email service. It works directly in the browser and supports templates for better email formatting.

It's perfect for front-end developers who want to send emails directly from the browser without a backend server. The API is very simple to understand and use.

Email Service

mailgun.js

Simple Node.js module for Mailgun.

npm version JavaScript Style Guide License Donate Buy me a coffee

Installation

npm install mailgun-js

Usage overview

This is a simple Node.js module for interacting with the Mailgun API. This module is intended to be used within Node.js environment and not from the browser. For browser use the mailgun.js module.

Please see Mailgun Documentation for full Mailgun API reference.

This module works by providing proxy objects for interacting with different resources through the Mailgun API. Most methods take a data parameter, which is a Javascript object that would contain the arguments for the Mailgun API. All methods take a final parameter callback with two parameters: error, and body. We try to parse the body into a javascript object, and return it to the callback as such for easier use and inspection by the client. If there was an error a new Error object will be passed to the callback in the error parameter. If the error originated from the (Mailgun) server, the response code will be available in the statusCode property of the error object passed in the callback. See the /docs folder for detailed documentation. For full usage examples see the /test folder.

var api_key = 'XXXXXXXXXXXXXXXXXXXXXXX'; var domain = 'www.mydomain.com'; var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain}); var data = { from: 'Excited User <me@samples.mailgun.org>', to: 'serobnic@mail.ru', subject: 'Hello', text: 'Testing some Mailgun awesomeness!' }; mailgun.messages().send(data, function (error, body) { console.log(body); });

Note that the to field is required and should be a string containing 1 or more comma-separated addresses. Additionally cc and bcc fields can be specified. Recipients in those fields will be addressed as such. See https://documentation.mailgun.com/api-sending.html#sending for additional details.

Messages stored using the Mailgun store() action can be retrieved using messages(<message_key>).info() function. Optionally the MIME representation of the message can be retrieved if MIME argument is passed in and set to true.

Something more elaborate. Get mailing list info, create a member and get mailing list members and update member. Notice that the proxy objects can be reused.

var list = mailgun.lists('mylist@mycompany.com'); list.info(function (err, data) { // `data` is mailing list info console.log(data); }); var bob = { subscribed: true, address: 'bob@gmail.com', name: 'Bob Bar', vars: {age: 26} }; list.members().create(bob, function (err, data) { // `data` is the member details console.log(data); }); list.members().list(function (err, members) { // `members` is the list of members console.log(members); }); list.members('bob@gmail.com').update({ name: 'Foo Bar' }, function (err, body) { console.log(body); }); list.members('bob@gmail.com').delete(function (err, data) { console.log(data); });

Options

Mailgun object constructor options:

  • apiKey - Your Mailgun API KEY
  • publicApiKey - Your public Mailgun API KEY
  • domain - Your Mailgun Domain (Please note: domain field is MY-DOMAIN-NAME.com, not https://api.mailgun.net/v3/MY-DOMAIN-NAME.com)
  • mute - Set to true if you wish to mute the console error logs in validateWebhook() function
  • proxy - The proxy URI in format http[s]://[auth@]host:port. ex: 'http://proxy.example.com:8080'
  • timeout - Request timeout in milliseconds
  • host - the mailgun host (default: 'api.mailgun.net'). Note that if you are using the EU region the host should be set to 'api.eu.mailgun.net'
  • protocol - the mailgun protocol (default: 'https:', possible values: 'http:' or 'https:')
  • port - the mailgun port (default: '443')
  • endpoint - the mailgun host (default: '/v3')
  • retry - the number of total attempts to do when performing requests. Default is 1. That is, we will try an operation only once with no retries on error. You can also use a config object compatible with the async library for more control as to how the retries take place. See docs here
  • testMode - turn test mode on. If test mode is on, no requests are made, rather the request options and data is logged
  • testModeLogger - custom test mode logging function

Attachments

Attachments can be sent using either the attachment or inline parameters. inline parameter can be use to send an attachment with inline disposition. It can be used to send inline images. Both types are supported with same mechanisms as described, we will just use attachment parameter in the documentation below but same stands for inline.

Sending attachments can be done in a few ways. We can use the path to a file in the attachment parameter. If the attachment parameter is of type string it is assumed to be the path to a file.

var filepath = path.join(__dirname, 'mailgun_logo.png'); var data = { from: 'Excited User <me@samples.mailgun.org>', to: 'serobnic@mail.ru', subject: 'Hello', text: 'Testing some Mailgun awesomeness!', attachment: filepath }; mailgun.messages().send(data, function (error, body) { console.log(body); });

We can pass a buffer (has to be a Buffer object) of the data. If a buffer is used the data will be attached using a generic filename "file".

var filepath = path.join(__dirname, 'mailgun_logo.png'); var file = fs.readFileSync(filepath); var data = { from: 'Excited User <me@samples.mailgun.org>', to: 'serobnic@mail.ru', subject: 'Hello', text: 'Testing some Mailgun awesomeness!', attachment: file }; mailgun.messages().send(data, function (error, body) { console.log(body); });

We can also pass in a stream of the data. This is useful if you're attaching a file from the internet.

var request = require('request'); var file = request("https://www.google.ca/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"); var data = { from: 'Excited User <me@samples.mailgun.org>', to: 'serobnic@mail.ru', subject: 'Hello', text: 'Testing some Mailgun awesomeness!', attachment: file }; mailgun.messages().send(data, function (error, body) { console.log(body); });

Finally we provide a Mailgun.Attachment class to add attachments with a bit more customization. The Attachment constructor takes an options object. The options parameters can have the following fields:

  • data - can be one of
    • a string representing file path to the attachment
    • a buffer of file data
    • an instance of Stream which means it is a readable stream.
  • filename - the file name to be used for the attachment. Default is 'file'
  • contentType - the content type. Required for case of Stream data. Ex. image/jpeg.
  • knownLength - the content length in bytes. Required for case of Stream data.

If an attachment object does not satisfy those valid conditions it is ignored. Multiple attachments can be sent by passing an array in the attachment parameter. The array elements can be of any one of the valid types and each one will be handled appropriately.

var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain}); var filename = 'mailgun_logo.png'; var filepath = path.join(__dirname, filename); var file = fs.readFileSync(filepath); var attch = new mailgun.Attachment({data: file, filename: filename}); var data = { from: 'Excited User <me@samples.mailgun.org>', to: 'serobnic@mail.ru', subject: 'Hello', text: 'Testing some Mailgun awesomeness!', attachment: attch }; mailgun.messages().send(data, function (error, body) { console.log(body); });
var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain}); var filename = 'mailgun_logo.png'; var filepath = path.join(__dirname, filename); var fileStream = fs.createReadStream(filepath); var fileStat = fs.statSync(filepath); msg.attachment = new mailgun.Attachment({ data: fileStream, filename: 'my_custom_name.png', knownLength: fileStat.size, contentType: 'image/png'}); mailgun.messages().send(data, function (error, body) { console.log(body); });

Sending MIME messages

Sending messages in MIME format can be accomplished using the sendMime() function of the messages() proxy object. The data parameter for the function has to have to and message properties. The message property can be a full file path to the MIME file, a stream of the file, or a string representation of the MIME message. To build a MIME string you can use the nodemailer library. Some examples:

var domain = 'mydomain.org'; var mailgun = require('mailgun-js')({ apiKey: "YOUR API KEY", domain: domain }); var MailComposer = require('nodemailer/lib/mail-composer'); var mailOptions = { from: 'you@samples.mailgun.org', to: 'mm@samples.mailgun.org', subject: 'Test email subject', text: 'Test email text', html: '<b> Test email text </b>' }; var mail = new MailComposer(mailOptions); mail.compile().build((err, message) => { var dataToSend = { to: 'mm@samples.mailgun.org', message: message.toString('ascii') }; mailgun.messages().sendMime(dataToSend, (sendError, body) => { if (sendError) { console.log(sendError); return; } }); });

Referencing MIME file

var filepath = '/path/to/message.mime'; var data = { to: fixture.message.to, message: filepath }; mailgun.messages().sendMime(data, function (err, body) { console.log(body); });
var filepath = '/path/to/message.mime'; var data = { to: fixture.message.to, message: fs.createReadStream(filepath) }; mailgun.messages().sendMime(data, function (err, body) { console.log(body); });

Creating mailing list members

members().create({data}) will create a mailing list member with data. Mailgun also offers a resource for creating members in bulk. Doing a POST to /lists/<address>/members.json adds multiple members, up to 1,000 per call, to a Mailing List. This can be accomplished using members().add().

var members = [ { address: 'Alice <alice@example.com>', vars: { age: 26 } }, { name: 'Bob', address: 'bob@example.com', vars: { age: 34 } } ]; mailgun.lists('mylist@mycompany.com').members().add({ members: members, subscribed: true }, function (err, body) { console.log(body); });

Generic requests

Mailgun-js also provides helper methods to allow users to interact with parts of the api that are not exposed already. These are not tied to the domain passed in the constructor, and thus require the full path with the domain passed in the resource argument.

  • mailgun.get(resource, data, callback) - sends GET request to the specified resource on api.
  • mailgun.post(resource, data, callback) - sends POST request to the specified resource on api.
  • mailgun.delete(resource, data, callback) - sends DELETE request to the specified resource on api.
  • mailgun.put(resource, data, callback) - sends PUT request to the specified resource on api.

Example: Get some stats

mailgun.get('/samples.mailgun.org/stats', { event: ['sent', 'delivered'] }, function (error, body) { console.log(body); });

Promises

Module works with Node-style callbacks, but also implements promises with the promisify-call library.

mailgun.lists('mylist@mydomain.com').info().then(function (data) { console.log(data); }, function (err) { console.log(err); });

The function passed as 2nd argument is optional and not needed if you don't care about the fail case.

Webhook validation

The Mailgun object also has a helper function for validating Mailgun Webhook requests (as per the mailgun docs for securing webhooks). This code came from this gist.

Example usage:

var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain}); function router(app) { app.post('/webhooks/mailgun/*', function (req, res, next) { var body = req.body; if (!mailgun.validateWebhook(body.timestamp, body.token, body.signature)) { console.error('Request came, but not from Mailgun'); res.send({ error: { message: 'Invalid signature. Are you even Mailgun?' } }); return; } next(); }); app.post('/webhooks/mailgun/catchall', function (req, res) { // actually handle request here }); }

Email Addresses validation

These routes require Mailgun public API key. Please check Mailgun email validation documentation for more responses details.

Validate Email Address

mailgun.validate(address, private, options, fn)

Checks if email is valid.

  • private - whether it's private validate
  • options - any additional options

Example usage:

var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain}); mailgun.validate('test@mail.com', function (err, body) { if(body && body.is_valid){ // do something } });

Parse Email Addresses list

Parses list of email addresses and returns two lists:

  • parsed email addresses
  • unparseable email addresses

Example usage:

var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain}); mailgun.parse([ 'test@mail.com', 'test2@mail.com' ], function (err, body) { if(error){ // handle error }else{ // do something with parsed addresses: body.parsed; // do something with unparseable addresses: body.unparseable; } });

Debug logging

debug package is used for debug logging.

DEBUG=mailgun-js node app.js

Test mode

Test mode can be turned on using testMode option. When on, no requests are actually sent to Mailgun, rather we log the request options and applicable payload and form data. By default we log to console.log, unless DEBUG is turned on, in which case we use debug logging.

mailgun = require('mailgun-js')({ apiKey: api_key, domain: domain, testMode: true }) const data = { from: 'mailgunjs+test1@gmail.com', to: 'mailgunjstest+recv1@gmail.com', subject: 'Test email subject', text: 'Test email text' }; mailgun.messages().send(data, function (error, body) { console.log(body); });
options: { hostname: 'api.mailgun.net',
  port: 443,
  protocol: 'https:',
  path: '/v3/sandbox12345.mailgun.org/messages',
  method: 'POST',
  headers:
   { 'Content-Type': 'application/x-www-form-urlencoded',
     'Content-Length': 127 },
  auth: 'api:key-0e8pwgtt5ylx0m94xwuzqys2-o0x4-77',
  agent: false,
  timeout: undefined }
payload: 'to=mailgunjs%2Btest1%40gmail.com&from=mailgunjstest%2Brecv1%40gmail.com&subject=Test%20email%20subject&text=Test%20email%20text'
form: undefined
undefined

Note that in test mode no error or body are returned as a result.

The logging can be customized using testModeLogger option which is a function to perform custom logging.

const logger = (httpOptions, payload, form) => { const { method, path } = httpOptions const hasPayload = !!payload const hasForm = !!form console.log(`%s %s payload: %s form: %s`, method, path, hasPayload, hasForm) } mailgun = require('mailgun-js')({ apiKey: api_key, domain: domain, testMode: true, testModeLogger: logger }) const data = { from: 'mailgunjs+test1@gmail.com', to: 'mailgunjstest+recv1@gmail.com', subject: 'Test email subject', text: 'Test email text' }; mailgun.messages().send(data, function (error, body) { console.log(body); });

Sample output:

POST /v3/sandbox12345.mailgun.org/messages payload: true form: false
undefined

Tests

To run the test suite you must first have a Mailgun account with a domain setup. Then create a file named ./test/data/auth.json, which contains your credentials as JSON, for example:

{ "api_key": "XXXXXXXXXXXXXXXXXXXXXXX", "public_api_key": "XXXXXXXXXXXXXXXXXXXXXXX", "domain": "mydomain.mailgun.org" }

You should edit ./test/data/fixture.json and modify the data to match your context.

Then install the dev dependencies and execute the test suite:

$ npm install
$ npm test

The tests will call Mailgun API, and will send a test email, create route(s), mailing list and mailing list member.

Notes

This project is not endorsed by or affiliated with Mailgun. The general design and some code was heavily inspired by node-heroku-client.

License

Copyright (c) 2012 - 2017 OneLobby and Bojan D.

Licensed under the MIT License.

THIS PACKAGE HAS MOVED

Please see the latest official package here, thank you!

BuildStatus npm version Email Notifications Badge

NEW: Subscribe to email notifications for releases and breaking changes.

This library allows you to quickly and easily use the SendGrid Web API v3 via Node.js.

Version 3.X.X+ of this library provides full support for all SendGrid Web API v3 endpoints, including the new v3 /mail/send.

This library represents the beginning of a new path for SendGrid. We want this library to be community driven and SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create issues and pull requests or simply upvote or comment on existing issues or pull requests.

Please browse the rest of this README for further detail.

We appreciate your continued support, thank you!

Table of Contents

  • Installation
  • Quick Start
  • Usage
  • Use Cases
  • Announcements
  • Roadmap
  • How to Contribute
  • Troubleshooting
  • About

<a name="installation"></a>

Installation

Prerequisites

  • Node.js version 4, 6 or 7
  • The SendGrid service, starting at the free level

Setup Environment Variables

Update the development environment with your SENDGRID_API_KEY, for example:

echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env echo "sendgrid.env" >> .gitignore source ./sendgrid.env

Install Package

The following recommended installation requires npm. If you are unfamiliar with npm, see the npm docs. Npm comes installed with Node.js since node version 0.8.x therefore you likely already have it.

npm install --save sendgrid

Dependencies

  • Nodejs-HTTP-Client

<a name="quick_start"></a>

Quick Start

Hello Email

The following is the minimum needed code to send an email with the /mail/send Helper (here is a full example):

With Mail Helper Class

var helper = require('sendgrid').mail; var fromEmail = new helper.Email('test@example.com'); var toEmail = new helper.Email('test@example.com'); var subject = 'Sending with SendGrid is Fun'; var content = new helper.Content('text/plain', 'and easy to do anywhere, even with Node.js'); var mail = new helper.Mail(fromEmail, subject, toEmail, content); var sg = require('sendgrid')(process.env.SENDGRID_API_KEY); var request = sg.emptyRequest({ method: 'POST', path: '/v3/mail/send', body: mail.toJSON() }); sg.API(request, function (error, response) { if (error) { console.log('Error response received'); } console.log(response.statusCode); console.log(response.body); console.log(response.headers); });

The Mail constructor creates a personalization object for you. Here is an example of how to add to it.

Without Mail Helper Class

The following is the minimum needed code to send an email without the /mail/send Helper (here is a full example):

var sg = require('sendgrid')(process.env.SENDGRID_API_KEY); var request = sg.emptyRequest({ method: 'POST', path: '/v3/mail/send', body: { personalizations: [ { to: [ { email: 'test@example.com' } ], subject: 'Sending with SendGrid is Fun' } ], from: { email: 'test@example.com' }, content: [ { type: 'text/plain', value: 'and easy to do anywhere, even with Node.js' } ] } }); // With promise sg.API(request) .then(function (response) { console.log(response.statusCode); console.log(response.body); console.log(response.headers); }) .catch(function (error) { // error is an instance of SendGridError // The full response is attached to error.response console.log(error.response.statusCode); }); // With callback sg.API(request, function (error, response) { if (error) { console.log('Error response received'); } console.log(response.statusCode); console.log(response.body); console.log(response.headers); });

General v3 Web API Usage

var sg = require('sendgrid')(process.env.SENDGRID_API_KEY); // GET Collection var request = sg.emptyRequest({ method: 'GET', path: '/v3/api_keys' }); // With promise sg.API(request) .then(function (response) { console.log(response.statusCode); console.log(response.body); console.log(response.headers); }) .catch(function (error) { // error is an instance of SendGridError // The full response is attached to error.response console.log(error.response.statusCode); }); // With callback sg.API(request, function (error, response) { if (error) { console.log('Error response received'); } console.log(response.statusCode); console.log(response.body); console.log(response.headers); });

<a name="usage"></a>

Usage

  • SendGrid Docs
  • Library Usage Docs
  • Example Code
  • How-to: Migration from v2 to v3
  • v3 Web API Mail Send Helper

<a name="use_cases"></a>

Use Cases

Examples of common API use cases, such as how to send an email with a transactional template.

<a name="announcements"></a>

Announcements

Please see our announcement regarding breaking changes. Your support is appreciated!

All updates to this library are documented in our CHANGELOG and releases. You may also subscribe to email release notifications for releases and breaking changes.

<a name="roadmap"></a>

Roadmap

If you are interested in the future direction of this project, please take a look at our open issues and pull requests. We would love to hear your feedback.

<a name="contribute"></a>

How to Contribute

We encourage contribution to our libraries (you might even score some nifty swag), please see our CONTRIBUTING guide for details.

  • Feature Request
  • Bug Reports
  • Improvements to the Codebase

<a name="troubleshooting"></a>

Troubleshooting

Please see our troubleshooting guide for common library issues.

<a name="about"></a>

About

sendgrid-nodejs is guided and supported by the SendGrid Developer Experience Team.

sendgrid-nodejs is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-nodejs are trademarks of SendGrid, Inc.

SendGrid Logo

Dependencies Comparison

mailgun-js

Dependencies

async^2.6.1
debug^4.1.0
form-data^2.3.3
inflection~1.12.0
is-stream^1.1.0
path-proxy~1.0.0
promisify-call^2.0.2
proxy-agent^3.0.3
tsscmp^1.0.6

Dev Dependencies

clone^2.1.2
mocha~5.2.0
nodemailer^4.6.8
request^2.88.0
sinon^7.1.0
standard^12.0.0

Peer Dependencies

sendgrid

Dependencies

async.ensureasync^0.5.2
async.queue^0.5.2
bottleneck^1.12.0
debug^2.2.0
lodash.chunk^4.2.0
mailparser^0.6.1
sendgrid-rest^2.3.0

Dev Dependencies

chai^3.5.0
eslint^3.1.0
mocha^2.4.5
mocha-sinon^1.1.5
sinon^1.17.5
sinon-chai^2.8.0
system-sleep^1.0.0-g
typescript^2.0.0

Peer Dependencies

StarsIssuesVersionUpdatedⓘLast publish dateCreatedⓘPackage creation dateSizeⓘMinified + Gzipped size
M
mailgun-js
894520.22.02 years ago13 years agoinstall size 307.1 KB
S
sendgrid
3,031795.2.33 years ago13 years agoinstall size 185.7 KB

Who's Using These Packages

mailgun-js

mailgun-js-boland
mailgun-js-boland

A simple Node.js helper module for Mailgun API.

nodejs-website-boilerplate
nodejs-website-boilerplate

A Node.js website boilerplate that satisfies some common website requirements.

cli
cli

Crank CLI - BDD test automation for enterprise business technology.

sendgrid

typerefinery
typerefinery

Testing: https://dashboard.cypress.io/projects/8v1kna/runs

litterpic_org
litterpic_org

LitterPic.org Next.JS site

Soombook
Soombook