codeat3/blade-maki-icons
Blade Maki Icons provides ready-to-use Blade components for the complete Maki icon set, letting you drop clean SVG map and UI icons into Laravel views with a simple tag, customizable size, color, and attributes, no extra setup required.
Architecture fit. The package sits entirely in the view layer: a service provider that registers a set of maki-prefixed Blade components backed by static SVG path data, generated from Mapbox's upstream Maki glyph collection. It adds no routes, migrations, config files, queues, scheduled jobs, or runtime services. For a TPM this is the safest possible dependency shape to sponsor — it cannot perturb domain logic, data contracts, or service-level objectives, and its blast radius is bounded to rendered markup. Worth stating plainly in any decision record: this delivers convenience, not capability. Every glyph is reproducible as a hand-written inline SVG partial, so adoption is a design-system hygiene decision with a maintenance-cost payoff, not a feature bet. Reversal is a template refactor, not a programme.
Integration feasibility. High and cheap to validate. Composer install with Laravel auto-discovery; no publish step, no environment variables, no asset-build change, no second toolchain. The sole integration surface is the Blade component namespace, which is prefix-scoped and therefore low-collision. A competent Blade team completes a credible spike — install, render a representative icon set on a real page, confirm attribute passthrough for class and size — inside a single sprint task. Server-side rendering also means no JS bundle growth and no client-side hydration concerns, which is the underrated part of the proposition.
Technical risk. Low on the technical axis, moderate on governance — keep those as separate register entries rather than blending them into one amber square. Release 1.10.0 is compatibility-only: it widens the framework constraint for Laravel 13 with no API changes, no renamed components, no removed icons, no deprecations. Rendered-output risk between 1.9.0 and 1.10.0 is effectively nil, so visual review can be scoped to a smoke test rather than a full design QA pass.
The risks a TPM actually owns:
Key questions.
illuminate/support to ^11/^12? One laggard defeats the upgrade regardless of what this release permits.maki prefix — or our internal wrapper name — collide with an existing design-system namespace?php artisan icons:cache as a standing mitigation?Stack fit. Correct for Laravel with any Blade rendering surface — including Livewire apps, and Inertia apps that still render Blade views. Icons deploy with the application, so a glyph change travels through code review and the release pipeline rather than arriving as an untracked design-tool export. Poor fit for a decoupled SPA with no Blade layer; there a JavaScript icon package is the right answer and extracting icons server-side solves the wrong problem. Also a poor fit as a universal UI set — Maki leaves obvious gaps outside map and POI contexts.
Migration path. Incremental and non-disruptive, which is the main scheduling argument in its favour. There is no cutover event: new map surfaces use the components directly, and existing hand-maintained SVG partials are converted opportunistically as templates are touched. The one hard rule is sequencing discipline — land the internal wrapper component before adoption spreads. A single in-house component that owns sizing, colour, accessibility attributes, and fallback means a future swap is one file rather than a codebase-wide find-and-replace. Retrofitting that abstraction after the vendor prefix has propagated negates most of the original benefit.
Compatibility. Constraint is Laravel 13-ready at 1.10.0; confirm PHP floor parity with our target Laravel version before committing to an upgrade date. The package is a leaf node — no transitive dependency of consequence — so it will not drag a framework version into the graph. The real compatibility check is the reverse direction: a dry-run resolve before the upgrade change set completes, because any other dependency pinning older illuminate/* versions defeats this release irrespective of how current it is. Pin the version explicitly in composer.json; the icon set itself changes between releases, so an unpinned minor bump can silently alter glyphs in shipped UI.
Sequencing. Four steps, in order. (1) Dry-run resolve to confirm nothing else in the graph blocks Laravel 13. (2) Land the internal wrapper component and its tests, so no template depends on the vendor prefix directly. (3) Bump the package in the same change set as the framework upgrade — do not split them, since the bump exists to enable the upgrade. (4) Adopt on a single map/POI surface first, verify rendered output and view-compile in CI, then broaden. Add a view-compile check and snapshot tests on icon-heavy pages as part of step 2, not as follow-up work — together they catch both silent visual drift and component-registration collisions.
Maintenance. Effectively zero. No config to keep in sync, no migrations to run, no background services to monitor, no asset pipeline to rebuild. The only recurring task is an occasional version bump for framework compatibility, and that work is coupled to platform upgrades the team already tracks. It is a net reduction in owned code wherever it replaces hand-edited SVG paths or a manually maintained sprite sheet — that is the concrete operational argument for adoption, and it should be stated as such rather than as a feature win.
Support. The honest assessment: there is no support contract. Community package, single maintainer, generated from an upstream open-source set, no SLA, no commercial backing. This is acceptable only because the payload is static SVG data and the wrapper is thin — a days-scale exit, measured in one template refactor plus a vendored icon directory. If organisational policy requires per-dependency security review or vendor SLAs, this fails that bar on paper and the vendored-SVG alternative should be the sanctioned route. Otherwise adopt under light governance: a dependency-register entry with a named owner, not an architecture-review gate.
Scaling. Two axes, both benign. Runtime scaling is a non-issue — components compile to inline SVG, so cost is markup weight on the page, not compute or I/O. What does scale with traffic is page size on icon-dense screens, so measure rather than assume: icon-heavy dashboards and map legends are the pages to profile, with php artisan icons:cache as the documented mitigation if per-component rendering shows up in payload budgets. Team scaling is where the wrapper component earns its place — one sanctioned entry point keeps design consistency intact as more engineers touch map surfaces, instead of each templating SVGs their own way.
Failure modes. The register should name the realistic ones, all of which degrade visibly and harmlessly rather than taking down a flow:
Ramp-up. Negligible for engineers already comfortable with Blade components — the syntax is standard, attributes pass through as expected, and there is no library to learn. Budget a half-day for the wrapper component and its tests, and a short design review to ratify Maki as the sanctioned vocabulary for map, geolocation, and logistics contexts. The one thing to brief explicitly is the boundary: Maki stays the map/POI set and does not become the house UI icon system. That framing conversation costs an hour and prevents the fragmentation this adoption is meant to avoid.
How can I help you explore Laravel packages today?