Search

A tour of the dd_emailforge app

dd_emailforge runs inside your terminal. You'll mostly use the keyboard, but you can also click in the tree and the email outline. If you forget a key, press F1 for Help at any time.

The main screen
  1. Header. Three rows at the top with the app name and a rotating tagline.
  2. Structure (left). A tree of your whole email. The top three rows are always there:
    • [HEAD]: the email's details: name, subject, preheader, language, title, base URL for local images, web fonts, and custom CSS.
    • [BRAND]: your email's font, text and background colors, content width, and button colors. These apply across the whole email.
    • [BODY]: everything readers see. Below it are your blocks: sections, columns, and the content inside them.
  3. Details (right). A summary of the selected block's settings, plus a blueprint: a simple text outline of the whole email. Click any box in the blueprint to select that block.
  4. Footer bar. One line of shortcuts, starting with F1:Help. It changes depending on what you're doing.
A section selected in the Structure tree and highlighted in the outline of the email on the right
Pop-up windows
WindowOpen it withWhat it's for
HelpF1Every shortcut, at a glance.
ThemeF2The app's own colors. This changes how the app looks, not your email. Your email's look lives in [BRAND].
ValidationF3A list of problems in your template. Press Enter on one to jump to the block or field to fix. If there are no problems, you just see a "✓ Validation passed" message.
Insert picker/Add a block. Type to filter, pick with ↑/↓, then press Enter. The list is split into "blocks" (email-header, email-hero, …) and "primitives" (mj-section, mj-text, …).
FormEditEnter (or double-click)Edit the selected block's fields.
Image pickerCtrl+P (in FormEdit)Choose an image from the template's images/ folder.
New / Openn / oStart a new template or open another one.
Messages(automatic)Short pop-up notes for success, info, warnings, and errors.
The Insert picker listing blocks, filtered to show button
The FormEdit window for a button, with fields for label, link and padding
Keyboard shortcuts

Keys are case-sensitive: J means Shift+J.

KeyWhat it does
F1Help
F2App theme (colors of the app, not your email)
F3Validate. In the list, Enter jumps to the problem.
nNew template
oOpen a template
pPreview in your browser
Shift+EExport (template.mjml and template.html)
sSave now (also keeps a .backup copy)
/Insert a block
Enter or double-clickEdit the selected block (FormEdit)
j / kMove down / up the tree
g / GJump to the top / bottom of the tree
h / lCollapse / expand the selected item
SpaceToggle collapse/expand
TabSwitch between the Structure and Details panels
J / KMove the selected block down / up
yDuplicate the selected block
dDelete the selected block right away, with no confirmation (not [HEAD], [BRAND], or [BODY]). Undo with u.
uUndo (up to 20 steps)
U or Ctrl+RRedo
C / VAdd / remove a column in the selected section. Every press resets all columns to equal widths.
c / vSelect the previous / next column
Ctrl+QQuit (q on its own does nothing)
The Help window listing keyboard shortcuts
Saving

You rarely need to think about saving. dd_emailforge autosaves template.json about two seconds after each change. Press s to save right away. A manual save also keeps a template.json.backup copy. Ctrl+S in FormEdit also rewrites template.mjml, which keeps the browser preview up to date.

Blocks you can add
  • Email blocks (body level only): email-header (logo), email-hero, email-article, email-cta, and email-footer (company details, unsubscribe link, social links, copyright). These go directly under [BODY], not inside sections.
  • Layout: section, column, group, wrapper, hero.
  • Content: text, image, button, divider, spacer, social, table, navbar, accordion, carousel.

Where things can go:

  • A section holds columns (or groups). A new section starts with no columns: press C once for one full-width column, twice for two half-width columns.
  • Columns and heroes hold content blocks. You can't put a section inside a hero.
  • A wrapper holds sections and heroes.

Where a new block lands depends on what's selected when you press /:

Table
Selected New block goes…
A top-level block (email-header, a section, …) Right after it
[BODY] At the very end, below the footer
A column or hero Inside it, at the end (content blocks only)
A content block (text, image, …) Right after it

A content block added while [BODY] or an email block is selected is wrapped in a new section with one full-width column. The easy rule: select the block you want the new one to follow.

For developers: what's on screen
  • The tree mirrors template.json (head, brand, body.nodes[]). Block names in the Insert picker match the node types in the file, such as email-header, mj-section, mj-text.
  • [BRAND] values become mj-attributes in the MJML.
  • Ctrl+S in FormEdit saves and regenerates template.mjml. Autosave writes template.json two seconds after a change.
  • Mouse clicks work in the tree and blueprint. Bracketed paste is supported.