christhompsontldr/laravel-inky
Laravel Inky integrates Zurb's Inky email templating with Laravel, letting you write clean, component-based Blade views that compile into responsive HTML emails. It simplifies building mobile-friendly transactional messages with reusable partials and Laravel Mail.
Architecture fit
christhompsontldr/laravel-inky is a thin Laravel service-provider wrapper around the Inky templating language — the semantic HTML layer from Foundation for Emails that compiles <container>, <row>, <columns>, and <button> into the table-based markup email clients actually render. For a Laravel shop already authoring mail in Blade and dispatching through Mailables, that is the correct shape of dependency: it attaches at the view/compilation layer and leaves Mailables, the Mail facade, queues, events, and transport (SES, Postmark, SMTP) untouched. It composes with, rather than replaces, the pieces you still need — a CSS inliner (tijsverkoyen/css-to-inline-styles or equivalent), Foundation for Emails SCSS, and a rendering-preview service.
The scoping caveat that most often derails a TPM's plan: Inky is a structural compiler only. It does not ship or compile Foundation's SCSS, does not inline CSS, and does not verify cross-client rendering. Teams assume "Inky package == Foundation emails" and are surprised when the output is correctly structured but visually broken. Adopting this package is one of three workstreams (structure, styling, validation), not the whole of them. Budget accordingly.
Integration feasibility
Low-to-moderate effort, and unusually well-bounded to plan around. The wiring surface is: composer require, package auto-discovery on Laravel 5.5+, optional config publish, view extension registration, then authoring Inky/Blade templates referenced from Mailable::build() via ->view(). A single engineer reaches a working proof of concept inside a day. The schedule-consuming work is template authoring, visual regression validation, and client-compatibility testing — none of which this package accelerates.
The planning insight that matters: the deliverable is swappable at low cost. The wrapper is plausibly a few hundred lines, and the compile step is portable to an in-house wrapper or MJML. That justifies scoping adoption as a timeboxed experiment with a one-line rollback (view swap on a single Mailable) rather than a platform commitment.
Technical risk — the dominant concern
small/large breakpoints, or menu/callout output produces subtly wrong HTML that only surfaces in client testing — the most expensive class of defect to discover late.Key questions to resolve before commitment
composer.json, and is there CI evidence they pass?lorenzhs/inky or equivalent), at what pinned version?Mail::markdown)?If questions 1–3 cannot be answered from the repo in under an hour, that itself is a signal: the package has no operational documentation and you should proceed directly to the fork path.
Stack fit
Fits any Laravel application already using Blade + Mailables — the default posture. Poor fit if you (a) send primarily via Mail::markdown() and want to keep it, (b) need a design-system-driven email component library with a supported release train, or (c) have compliance obligations requiring a maintained dependency with a security contact.
Migration path
Three realistic starting points, converging on the same target state:
| Starting point | Fit | Rationale |
|---|---|---|
| Hand-rolled table HTML in Blade | Strongest | Highest defect reduction per unit effort; removes <table role="presentation"> boilerplate entirely |
| Existing Node / Foundation for Emails build step | Strong | Deletes npm + Gulp/Webpack from CI and every dev machine — but you trade the canonical Inky implementation for the PHP port |
| Laravel Markdown mailables | Partial only | Markdown mail is upstream-maintained and accessible by default; Inky is a downgrade in maintenance posture and an upgrade in layout control. Migrate only templates where layout is genuinely constrained |
The comparison to price before committing is not "this package vs nothing." It is this package vs the underlying inky PHP library wrapped in-house (~200–400 LOC you own) vs MJML (materially larger community, active maintenance, existing Laravel integrations) vs status quo. Given 0 dependents, wrapping in-house or forking is arguably the default rather than the fallback.
Compatibility
Verify explicitly, never infer: Laravel major, PHP version, interaction with any existing view-engine customization, and interaction with whatever CSS inliner sits in the render path. Run this as a POC gate with a written pass/fail, not a footnote in a design doc.
Sequencing
Maintenance
Treat this as unvetted third-party code you now own, not a library you consume. Name an internal owner for the email templating layer and accept a standing tax of roughly 1–2 engineer-days per Laravel major for compatibility verification and pin bumps. The zero-adoption signal means no upstream will absorb that work for you. Mitigate with an exact version pin, a vendored/forked copy under internal namespace, and a documented upgrade procedure.
Support
No issue-triage expectation, no security disclosure process, no release cadence. If the organization has any compliance or uptime obligation that presupposes a vendor security contact, this package does not satisfy it — the fork path is the only way to get there. For everyone else, the support model is "internal owner reads the diff and decides," which is workable at this scope but should be stated plainly in the adoption record.
Scaling
Two axes. Template volume: the compiler has no meaningful per-template cost, but the CSS inliner and preview harness you bolt alongside it are the parts that get expensive at scale — budget them as first-class line items, not afterthoughts. Render throughput: confirm whether compiled output is cached; if every send recompiles Inky markup, high-volume notification fan-out pays a repeated compilation cost that a cache would remove. This is question 4 in the technical evaluation and it belongs in the capacity plan, not just the spike notes.
Failure modes
Mail::markdown() templates for consistency, trading an upstream-maintained path for an unmaintained one. Hold the line: migrate only templates where layout is genuinely constrained.Ramp-up
Low for any engineer already fluent in Blade. New engineers need roughly half a day to learn Inky's component vocabulary (<container>, <row>, <columns>, <button>) and the mental model that it compiles to tables. Designers pick it up faster than table HTML because it matches their layout vocabulary. The real ramp-up cost is in whoever owns the preview harness and the CSS pipeline — that is a distinct skill set and should be assigned, not assumed. Run the whole adoption as one engineer, one week, one template in production, with a defined abandon trigger; the cost of finding out is 3–5 engineer-days and the cost of being wrong is a one-line view swap.
How can I help you explore Laravel packages today?