Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Jstree Bundle Laravel Package

tadcka/jstree-bundle

Symfony bundle that integrates the jsTree JavaScript library, making it easy to render interactive, hierarchical tree views in your Symfony applications. Wraps jsTree configuration and assets for quick, minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor, and largely category-mismatched. tadcka/jstree-bundle is a Symfony bundle, not a Laravel package. It ships a Tadcka\JsTreeBundle\TadckaJsTreeBundle registered through the Symfony kernel, Twig template helpers, and DI-based asset registration. There is no ServiceProvider, no facade, no publishable config, no Blade views. Laravel's package discovery will not autoload anything usable. The package's actual substance is thin: jsTree is a client-side jQuery plugin, and the bundle is essentially a wrapper that registers the vendor JS/CSS and exposes a Twig-rendered container. The reusable value is the ~50 lines of markup and asset wiring — not the PHP.

Integration feasibility — low. Two independent blockers:

  1. Framework boundary. Pulling Symfony's framework-bundle into a Laravel app to satisfy a tree widget is a non-starter; it drags in kernel, routing, and container conventions that collide with Illuminate's. Partial-component extraction (just the Twig template and asset paths) is possible but then you have written the integration yourself and gained nothing.
  2. Composer resolution. Constraints date to 2015 and target Symfony 2.x / PHP 5.x. On a modern Laravel runtime (PHP 8.2/8.3), resolution will almost certainly fail without --ignore-platform-reqs or constraint overrides — both of which mean running unverified code on an unsupported interpreter.

Technical risk — high on every axis. Last release 2015-09-25, i.e. roughly a decade of no maintenance. 2 stars and 0 dependents means no downstream usage to surface bugs, no issue triage, no security response path. jsTree itself pins a jQuery-era front-end model that conflicts with a modern Vite/ESM asset pipeline. Unmaintained JS bundled transitively is the classic vector for silent XSS and prototype-pollution issues. There are no tests, no CI, no SECURITY.md, and no stated support window.

Key questions for the requester:

  • What is the actual requirement — hierarchical browse/reorder UI, or server-side tree storage/query? If the latter, the package is irrelevant and the answer is a closure-table/nested-set package plus a modern tree component.
  • Is jQuery already a hard constraint in the front-end? If yes, jstree via npm is defensible; the bundle still is not.
  • Who is the named owner accepting an unmaintained dependency? With 0 dependents and no maintainer, that owner is permanently on the hook.
  • Does the environment allow a Symfony bundle at all, or is this a mislabeled request?

Integration Approach

Stack fit — none as-shipped. Laravel 10/11 uses Illuminate providers, Blade, Vite, and PHP 8.2+; the package assumes Symfony 2, Twig, and Assetic-style asset handling. There is no version of Laravel for which this is a supported combination.

Recommended path — treat as reference source, not a dependency. Two viable options:

Option A (recommended): replace with a first-party implementation.

  1. npm i jstree (or jstree fork / @types/jstree) and import it in resources/js/app.js under Vite.
  2. Build a Blade component (<x-tree :nodes="$nodes" />) that renders the container plus a small Alpine or vanilla init script.
  3. Expose a single JSON endpoint via an invokable controller, with TreePolicy, pagination on children, and CSRF-protected write routes for drag-drop reorder.
  4. Store hierarchy with kalnoy/nestedset if server-side ordering matters. Effort: roughly 1–2 engineer-days for a read-only tree, 3–5 for reorder persistence with authorization.

Option B (only if jQuery is mandated): vendor the jsTree library directly. Extract the markup pattern from the bundle's Twig template as a reference, but do not install the PHP package. This preserves the "integration knowledge" without importing an abandoned Symfony dependency tree.

Migration path and sequencing. There is nothing to migrate from — no existing install to upgrade. Sequence: (1) confirm the underlying feature requirement, (2) resolve the front-end asset decision (Vite-native vs. jQuery), (3) implement the Blade component and JSON endpoint, (4) add authorization and input validation on the tree payload, (5) write a Playwright test covering expand/reorder. Do not sequence this behind "evaluate the bundle" — that evaluation is already conclusive.

Compatibility note. If someone on the team insists on attempting install, gate it behind a throwaway branch with a strict Composer audit (composer why-not) and a documented failure — expect a hard stop at PHP platform constraints.

Operational Impact

Maintenance — a permanent liability. No maintainer, no releases since 2015, no issue response. Adopting it creates code the team owns but did not write, in a framework idiom (Symfony DI/Twig) that Laravel engineers will not debug fluently. The maintenance cost is not proportional to the package's size — it is proportional to the mismatch, which is total.

Support — no escalation path. With 2 stars and 0 dependents, there is no community. Internal support means reading the source and reverse-engineering intent. Security patches for jsTree or the Symfony 2 components will never arrive through this channel; CVEs would surface via advisory feeds against transitive dependencies you cannot upgrade independently.

Scaling — mostly a non-issue, with a caveat. Rendering is client-side; the bundle adds no server-side load. The scaling risk sits in whatever JSON endpoint feeds the tree: naive implementations that serialize an entire hierarchy per request will degrade on deep or wide trees. Plan server-side lazy loading (jsTree's ajax config with per-node URLs) and cache the flattened tree in Redis if read-heavy.

Failure modes to anticipate:

  • Composer resolution failure on modern PHP — the most likely first failure, and a hard blocker.
  • Asset pipeline breakage when Vite replaces the bundle's asset assumptions; silent 404s on jstree.min.js.
  • XSS via node labels if names are rendered as HTML (jsTree supports HTML in text); enforce escaping server-side and set the plugin's escape-style options.
  • Authorization gaps on mutation routes — drag-drop reorder endpoints are commonly shipped without per-node policy checks.
  • jQuery global collision if the app or another dependency manages a different jQuery version.
  • Abandonment by omission — no Dependabot signal, so transitive vulnerabilities go unnoticed.

Ramp-up — deceptive. The code is small enough to read in an hour, which invites the false conclusion that it is low-risk. The real ramp-up cost is educating the team that the package is a Symfony artifact with no Laravel contract, and that any "quick win" here is actually a bespoke adapter project dressed as a dependency install.

Recommendation: Reject as a dependency; harvest as a reference. The opportunity score (1.73) and adoption score (0.01) agree with the qualitative read: this is not a package to build on. The underlying capability is cheap to reimplement natively and materially safer to own.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle