andrey-helldar/xml-core
A lightweight PHP library providing core XML utilities, serving as a shared foundation for Helldar's XML-related packages. Keeps common XML handling logic simple and reusable across PHP and Laravel projects.
Architecture fit: xml-core is a framework-agnostic, dependency-light PHP primitive: build XML, parse XML, convert XML↔PHP arrays. It is not an application-facing Laravel package (no controllers, no config surface worth publishing); it is a shared base layer the author's other XML packages sit on top of. That shapes the leverage model: the TPM rarely adopts this deliberately. It arrives either (a) transitively when a sibling package in the same ecosystem is pulled in, or (b) as a decision to avoid hand-rolling DOM/SimpleXML for a small, well-understood conversion job.
Integration feasibility: Mechanically trivial — one composer require, no service provider, no migrations, no bootstrapping. The real feasibility question is not "can we install it" but "what is it already doing in our lockfile." At 2 stars and a composite score of 0.155, community adoption is effectively zero; the demand signal comes entirely from the author's own package family. If a transitive dependency is the reason to evaluate it, that is a supply-chain fact to record, not a feature to celebrate.
Technical risk: The dominant risk is that the repository is archived. Everything else is secondary to that single fact:
Key questions:
composer.lock transitively? Which top-level dependency pulls it, and can that dependency be pinned to a version that does not?composer.json? The release notes do not distinguish, and with the repo archived we can no longer ask for the diff.Stack fit: Pure PHP via Composer, so it resolves against any Laravel version that satisfies the PHP constraint. There is no framework coupling to break. That cuts both ways: nothing about Laravel 12 or 13 will force it to move, and nothing will move it either.
Migration path: Two distinct paths depending on how we arrive.
SimpleXML/DOMDocument behind our own adapter, or an actively maintained alternative, gives us the same capability with an upstream who answers.composer.lock, and (c) we record a named owner and an exit plan. Then treat every future Composer resolution failure as ours to fix, because upstream will not.Compatibility: Verify the package's require.php against the runtime we deploy; an archived package will never widen that constraint. Also check its sibling packages in the same author's XML family as a group — if one of them is the actual dependency of record, the archiving decision applies to the set, not just this node.
Sequencing:
composer why <vendor>/<package> against every application and service. Establish whether this is a decision we are making or a fact we are discovering.Maintenance: Zero upstream cost and total local ownership — the two are the same statement. Once the archive is factored in, there is no version to track, no changelog to monitor, and no upgrade work. What replaces it is a contingent liability: if a PHP security release touches XML handling, or a Laravel major changes how the package's dependencies behave, we are the maintainer. That liability is cheap to carry for a narrow, isolated use and expensive to carry for a load-bearing one.
Support: None. No issue triage, no security advisories, no compat PRs. The practical support channel is the MIT licence and a fork. Budget for a named engineer who has read the source — not a team, but definitely a person.
Scaling: No scaling concern at the package level; the cost profile is whatever XML parsing and DOM construction cost natively, which dominates for large documents. If we ever process large or deeply nested XML, memory footprint is a design consideration regardless of which library we use, so this package neither helps nor hurts.
Failure modes:
composer.lock, commit the lock, resolve the full graph in a scratch branch before any framework upgrade.Ramp-up: Essentially none technically — the API is small and idiomatic, and an engineer will be productive in an hour. The ramp-up that matters is organisational: the team needs to know that a dependency can be unmaintained by design and that this one is. The failure here is not skill, it is a gap between "the tests pass" and "nobody will ever fix this."
Recommendation: Do not adopt deliberately; if it is already present transitively, contain it. Pin the tag, wrap it in an adapter with contract tests with real payloads, keep it away from any XML we did not generate, assign a named owner, and record the fork-or-replace exit path now while it is cheap. The package is small, MIT-licensed and readable, so the exit is genuinely available — that is the only reason containment is a reasonable answer to an archived dependency.
How can I help you explore Laravel packages today?