filipegar/inky
Inky is a PHP implementation of ZURB's Inky parser for Foundation for Email. It converts semantic components like button, callout, and row into table-based HTML emails, with configurable grid columns, tag aliases, and custom component factories.
Architecture fit. The package is a small, single-purpose PHP library that ports ZURB's Inky template transformer (the layer that converts Foundation for Emails grid/component tags such as <row>, <columns>, <callout> into table-based HTML). Architecturally it is a plain Composer library with one entry-point class, Hampe\Inky\Inky, exposing releaseTheKraken($html) plus alias and custom-component-factory extension points. It has no Laravel service provider, facade, config file, or Blade integration, so "Laravel fit" is really "PHP fit" — you can composer require it and call it from a Mailable, command, or job, but you own the wiring. The extension model (a ComponentFactoryInterface registry keyed by tag name) is reasonable and would let a team add house-specific email components without forking.
Integration feasibility. Low-to-moderate. The package has 1 star, 0 dependents, and "readme"-level maturity, meaning there is no evidence of a test suite, changelog, tagged releases, CI, or PHP-version matrix. More concerning is provenance: the package is published as filipegar/inky but the README, examples, and namespace are all Hampe\Inky, strongly suggesting this is a re-publish/fork of another author's library with the upstream identifiers left intact. That is not disqualifying for an internal spike, but it means you are depending on code whose maintainer-of-record, security posture, and update path you cannot verify. The README itself contains a missing semicolon in the addAlias example — a small signal that nothing is exercising the docs.
Technical risk. High. Key exposures:
PHPHtmlParser\Dom, a library that has been effectively unmaintained for years. Any Laravel/PHP 8.2+ upgrade path inherits that abandonment, including potential deprecation warnings under PHP 8.3/8.4 and no fixes for parser edge cases.<button> variants, spacing helpers) are supported.Key questions to resolve before adoption.
PHPHtmlParser install cleanly under our current PHP and Laravel constraints, or does it force a downgrade/conflict?hampe/inky? If so, why not depend on the upstream package directly, and which one has more activity?Stack fit. Good at the language level, absent at the framework level. If the stack is Laravel, plan to bind Inky as a singleton in a service provider you own, inject it into a small EmailTemplateCompiler service, and call it from a Mailable's build() or a queued job. It does not hook into Blade, Laravel Mail's Markdown renderer, or Mail::send automatically; there is no config/inky.php, no facade, no publishable assets. Treat it as a vendor utility, not a framework package.
Migration path. The realistic paths, in order of increasing ownership:
releaseTheKraken() in an artisan command or CI step, cache compiled output, ship static HTML. Best risk/effort tradeoff if the parser proves faithful.app/Support or a private package, replace the Hampe\ namespace, and own the tests. Recommended if the PoC passes and the library is genuinely useful.Compatibility. Assume compatibility only with Foundation for Emails 2-era Inky syntax; do not assume MJML, Tailwind-style email, or modern component-based frameworks are in scope. Watch for conflicts on PHPHtmlParser and any transitive Composer constraints, which is the most likely install failure mode on Laravel 10/11. Verify against your supported PHP matrix, including 8.3+ deprecation noise.
Sequencing.
EmailCompiler interface so the implementation is swappable without touching Mailables.Maintenance. This is the dominant cost. The package is effectively unmaintained: no dependents, no release cadence, no visible issue activity, and a namespace that reveals it is a fork-of-a-fork. Budget for someone to own it — pinning a commit, tracking upstream ZURB Inky releases manually, and re-running golden-file tests on every PHP/Laravel upgrade. If the team cannot name that owner, do not adopt.
Support. Community support is effectively zero. ZURB's documentation covers the JavaScript Inky, not this port, so questions about PHP-specific behavior, alias handling, or custom ComponentFactoryInterface implementations will go unanswered. Internal documentation and the golden-file suite become the support surface.
Scaling. The parser is CPU-bound PHP string manipulation over a DOM, so cost scales with template size and email volume. At build-time compilation with cached output, scaling is a non-issue — you compile once per template version. At send-time compilation, expect single-digit-to-tens of milliseconds per template for typical layouts, with larger grid-heavy templates and deep nesting as the tail risk; queue-based sending absorbs this, synchronous request-path sending does not.
Failure modes.
PHPHtmlParser blocking a framework upgrade.Ramp-up. Developer ramp-up is low: the API is a constructor, releaseTheKraken(), addAlias(), and optionally addComponentFactory(). A mid-level PHP developer is productive in under a day. Domain ramp-up is the real cost — understanding Foundation for Emails constraints, which components exist, and how table-based output interacts with email clients. That knowledge is transferable to the Node toolchain and is worth building regardless of whether this package survives. Net recommendation: treat as a PoC candidate, not a production dependency until the fork decision, golden-file tests, and named owner exist; the opportunity score is attractive, but the maturity, provenance, and single-maintainer signals put this firmly in "evaluate, then vendor or replace" territory.
How can I help you explore Laravel packages today?