alt-three/emoji
Alt Three Emoji is a Laravel package that integrates the Emoji One library, making it easy to convert emoji shortcodes to Unicode and render emoji as images. It includes a service provider and facade for quick setup, so you can add rich emoji support to user-generated content.
Read of the scores. A 0.285 quality signal against an 8.87 opportunity signal is the classic "real problem, wrong vehicle" shape. The capability (emoji normalization in a Laravel request/render pipeline) is worth solving; the package is not the thing to bet on.
Architecture fit. The package is a conventional Laravel 5 service provider exposing a singleton parser plus a facade alias, wrapping a shortcode↔unicode mapping table. Architecturally that is a thin decorator over a data file — it slots into a Blade directive or a formatter without touching domain code, which is the right shape. The problem is era, not shape: the design predates package auto-discovery, typed properties, and PHP 8 strictness. In a Laravel 10/11 codebase it reads as an artifact.
Integration feasibility. Composer is the gating item, not the code. Constraints were written before PHP 8 and Laravel 9, so composer require will likely fail platform resolution outright. The realistic path is forking or vendoring the parser and mapping array into an internal namespace — at which point you are maintaining a package, not consuming one.
Technical risk.
Key questions. Do we need bidirectional conversion or only render-time? Who owns the mapping data after adoption? What is the canonical stored form — unicode, shortcode, or both? Is the schema utf8mb4 today? Does conversion sit at API ingest, at Blade render, or both — and is that decided or accidental? Which Unicode version do we contract against given that iOS and Android render different glyphs for the same codepoint?
Stack fit. Only a clean fit on Laravel 5.x–6.x. On 8/9/10/11, prefer symfony/emoji's EmojiTransliterator (maintained, framework-adjacent, shortcode↔unicode) or an emojibase JSON dataset wrapped in a small internal service. Both are strictly better bets than reviving this package.
Migration path. Fork into App\Support\Emoji with the same public method semantics so call sites do not move, and put an interface in front of it immediately. Back it with the forked parser first, then swap the implementation underneath once tests exist. Backfill stored shortcodes only if they already exist in the database; otherwise normalize at the boundary and leave history alone — retroactive rewriting of user content is a product decision, not an engineering one.
Compatibility. Verify PHP 8.1–8.4 against deprecations the package will trip: dynamic properties, ${var} interpolation, implicit nullable parameters. Confirm provider registration under auto-discovery if the app is 5.5+, and check the mapping array for era-specific helper calls (each, array_get, str_*). Run it once under the target PHP version before committing to the fork.
Sequencing.
utf8mb4. This is the long pole: plan online DDL for large tables and audit index prefix lengths before touching code.Steps 1–3 are the real project; step 4 is a day of work.
Maintenance. Upstream is dead; you own every line and the data file forever. Absolute cost is low given the small surface, but it is not zero — budget a half-day per Unicode release to refresh mappings, or accept documented drift as a conscious decision.
Support. No maintainer, no security channel, no issue triage, no changelog to consult during an incident. This must be entered on the unmaintained-dependency register with a named internal owner and a scheduled review date. That ownership is the actual deliverable, not the code.
Scaling. String operations are cheap; the risk is placement, not throughput. Do not convert inside DB queries or in an indexer's inner loop, and cache normalized output on hot render paths. Eager loading of the mapping array is a non-issue under opcache.
Failure modes.
:new_emoji: rendered literally.max:255 measured against graphemes, bytes, or code units produces false rejections or truncation mid-cluster.utf8mb4 — the most likely production incident by a wide margin.Ramp-up. A mid-level engineer can read the entire package in under a day. The ramp-up risk is not comprehension; it is the absence of a second opinion when something breaks at 2am and there is no upstream, no docs, and no community thread to search.
How can I help you explore Laravel packages today?