Skip to main content

Evaluate Emailwizard with one command

Git-backed email templates, fast previews, safe releases, and a simple send API — packaged as a self-hosted service your team can fully control in a production environment.

Quickstart


docker run --rm -it \
-p 8080:8080 \
-e EW_ADDR=":8080" \
-e EW_DIR="/data/emailwizard-essentials" \
-e EW_REPO_URL="https://github.com/emailwizard/emailwizard-essentials.git" \
-v "$PWD/emailwizard-essentials:/data/emailwizard-essentials" \
emailwizard/emailwizard
            

Running this command on your local development will allow you to evaluate emailwizard. Test template repository will be downloaded.

Production deployment

Full command to run emailwizard - production ready

Deploy everywhere with docker container.

              
docker run --rm -it \
  -p 8080:8080 \
  -e EW_ADDR=":8080" \
  -e EW_DIR="/data/emailwizard-essentials" \
  -e EW_REPO_URL="git@github.com:emailwizard/emailwizard-essentials.git" \
  -e EW_DEPLOY_KEY="/run/secrets/repo-deploy-key" \
  -e EW_SMTP_HOST="my-smtp.example.org" \
  -e EW_SMTP_PORT="587" \
  -e EW_SMTP_USERNAME="foo@example.org" \
  -e EW_SMTP_PASSWORD="password" \
  -v "$PWD/emailwizard-essentials:/data/emailwizard-essentials" \
  -v "$PWD/repo-deploy-key:/run/secrets/repo-deploy-key:ro" \
  emailwizard/emailwizard
              
            

Simple and powerful template language

Each template is stored as a file in your Git repository. To render dynamic content, Emailwizard uses the Liquid templating language — simple to learn, powerful enough for real-world product emails. For easier development and consistency, templates can be split into smaller reusable parts. For example, keep your branded header and footer in separate files and include them across every email.

Example template

<h1>{{ total_price }} Paid Successfully!</h1>

{% include 'header.html.tpl' %}
<table class="invoice-items" cellpadding="0" cellspacing="0">
  {% for item in items %}
    <tr>
      <td>{{ item.name }}</td>
      <td class="alignright">{{ item.price }}</td>
    </tr>
  {% endfor %}
  <tr class="total">
    <td class="alignright" width="80%">Total</td>
    <td class="alignright">{{ total_price }}</td>
  </tr>
</table>
{% include 'footer.html.tpl' %}
            

Emailwizard also encourages you to keep JSON test data alongside templates. These files power instant previews during development and double as ready-to-use example payloads when integrating with the HTTP API.

Json data to render above template

{
  "total_price": "$34.98",
  "title": "Thanks for using Dreki tools",
  "items": [
      {
          "name": "Service 1",
          "price": "$ 19.99"
      },
      {
          "name": "Service 2",
          "price": "$ 9.99"
      },
      {
          "name": "Service 3",
          "price": "$ 4.00"
      }
  ],
}
          

A workflow developers already like

Emailwizard treats templates like code: versioned in Git, reviewed in PRs, validated in CI, and deployed with confidence.

Git as the source of truth

Every template change is diffable, reviewable, and reversible. No more “who changed this email?” mysteries.

Preview

Render previews with sample data, validate required variables, and catch broken layouts before merging. Share template with team member in seconds.

Safe rollouts

Pin versions, deploy gradually, and roll back instantly by reverting a commit.

Works with your stack

Any language, any framework — your app just calls an HTTP endpoint to render or send.

A simple send API

Your application sends emails by referencing a template and passing data. Emailwizard handles rendering, inlining, provider integration, and tracking the exact template version used.

Sending email

              
POST /v1/send/emailwizard-essentials/invoice.html.tpl

{
  "template-data": {
      "total_price": "$34.98",
      "title": "Thanks for using our services",
      "items": [
          {
              "name": "Service 1",
              "price": "$ 19.99"
          },
          {
              "name": "Service 2",
              "price": "$ 9.99"
          },
          {
              "name": "Service 3",
              "price": "$ 4.00"
          }
      ],
      "header": "Thanks for using Acme Inc.",
    },
    "from": "sales@example.org",
    "to": [
        "customer@example.com"
    ],
    "subject": "Invoice Email"
}
              

Deploy like any other service

Run Emailwizard locally, in Docker Compose, Kubernetes, or wherever your team deploys services. Add health checks, metrics, logs, and you’re done.

Observability

Logs, metrics, and health endpoints — easy to plug into your tooling.

Security

Self-host for control over data, templates, and delivery configuration.

Rollbacks

Roll back templates by reverting commits — no emergency hotfix edits.