jolicode/apache-tika-bundle
Symfony bundle that integrates Apache Tika to extract text and metadata from PDFs, Office documents, and other files. Provides simple services and configuration for document content extraction in PHP applications.
Architecture fit — poor, unchanged by v1.1.0. jolicode/apache-tika-bundle is a Symfony bundle, and Laravel does not have a bundle system. Laravel consumes individual Symfony components (HttpFoundation, HttpKernel, Console), but it never loads a Bundle class, never runs Extension::load(), and never compiles a ContainerBuilder from third-party service definitions. The bundle's entire value proposition — an apache_tika: config tree, autowired TikaClient service, compiler passes — is inert under Laravel. v1.1.0 relaxes a Composer constraint; it does not add a Laravel service provider, a facade, a config publish path, or any auto-discovery mechanism. The artifact remains structurally unusable in a Laravel application. What actually transfers is the underlying library, vaites/php-apache-tika, which is a plain PHP HTTP client for a Tika Server. So the correct framing is still: we are evaluating a dependency we would bypass, not adopt.
Integration feasibility — one blocker partially cleared, one intact.
| Blocker | Status after v1.1.0 |
|---|---|
| Composer constraint conflict | Materially softened. The release note states compatibility with Symfony >= 4.0. If the constraint is genuinely open-ended (>=4.0), it may now co-resolve with Laravel 10/11's Symfony 6/7 components instead of hard-failing. This must be verified by running the actual resolver, not inferred from the changelog. |
| PHP version floor | Unknown, possibly improved. A release that widens Symfony support was likely built against a newer PHP floor than the 2019 code, but the note says nothing about PHP versions and nothing about testing under 8.2/8.3. Treat as unverified. |
| Bundle loads under Laravel | Unchanged and unfixable without an upstream rewrite. No amount of constraint loosening addresses this. |
So the change is real but narrow: it moves the package from "cannot be installed" to "can probably be installed and still cannot be used." That is a shorter distance to a dead end, not a shorter distance to value.
Technical risk — the package remains the risk, not the capability.
opportunity: 9.42 score is still misleading. Read it as "document text extraction is a real, under-served need" — true for invoice ingestion, resume parsing, contract review, and RAG pipelines. It is not a statement about this package. Score 0.48 remains the honest signal, though a freshness-dimension bump of a few hundredths would be defensible on the evidence of a merged release. The two numbers measure different things and should not be averaged.Key questions for the spike (still answerable in one day):
jolicode/apache-tika-bundle v1.1.0 actually resolve against a Laravel 11 skeleton, and under what PHP constraint? Read the resolver output, not the changelog.vaites/php-apache-tika still receive releases, and does its current version support PHP 8.2+? The bundle bump may or may not imply a client bump — confirm independently.smalot/pdfparser, phpoffice/phpword) avoids the JVM entirely and may be sufficient.Stack fit — bypass the bundle, keep the capability. v1.1.0 does not change the ranking. Three options, still ranked:
Http facade. No PHP client dependency at all. We control timeouts, retries, and headers. Least code, least vendor surface, easiest to test with Http::fake(). Recommended.vaites/php-apache-tika directly, wrapped in a Laravel service provider. Worth it only if the client's format-detection and metadata parsing save real work. Accepts a dependency in exchange for ergonomics.jolicode/apache-tika-bundle. Still not viable. The v1.1.0 constraint change removes the installation objection but leaves the architectural one fully intact — there is no code path by which Laravel loads a bundle. If a Symfony sibling service exists, it stays there and we do not mirror it in Laravel.The honest characterisation of v1.1.0 for our purposes: it makes a package we would not use easier to install.
Migration path — there isn't one, and that is fine. Nothing in the Laravel codebase depends on this bundle, so "migration" collapses to a greenfield integration. If a Symfony service already uses the bundle, treat the Laravel side as an independent consumer of the same Tika Server endpoint, sharing infrastructure but not code. Note that a sibling service bumping to v1.1.0 is their change, not ours, and should not pull us into a shared dependency.
Compatibility. Verify before writing any code:
composer require jolicode/apache-tika-bundle:^1.1 in a throwaway Laravel 11 skeleton to establish what v1.1.0's constraint actually permits — this is now a cheap, decisive test that was not worth running before. Record the result either way; it closes the question permanently.composer require vaites/php-apache-tika in the same skeleton and read the actual resolution output. Do not trust the published constraint; check it.Sequencing. Unchanged — the release is not a trigger to re-order work.
apache/tika in Docker, POST three representative documents (a scanned PDF, a DOCX, a malformed file), measure latency and output quality.DocumentExtractor interface with a Tika implementation behind it, bound in a service provider. The interface matters more than the implementation: it lets us swap to pure-PHP or a cloud API later without touching call sites.Maintenance — still assume full ownership, but the case for a hard fork is weaker. v1.1.0 is evidence that the maintainer will merge reasonable PRs, which is the minimum viable condition for depending on a small package. Budget for: periodic Composer audit failures, a possible fork if the client breaks on a future PHP release, and manual Tika Server CVE tracking. Do not budget for upstream feature work — a project with this release cadence will not deliver one. The PHP client is ~500 lines and replaceable in a day; the Tika Server is the durable commitment.
Support — effectively none, marginally better than none. There is now a demonstrated responsive merge, which is worth something in a security-patch scenario: a CVE fix in the client has a plausible path upstream. There is still no Stack Overflow corpus, no issue-tracker velocity, and no vendor SLA. Any incident remains an internal incident. Acceptable for a well-understood, thin integration; unacceptable if the team expects to escalate.
Scaling — the JVM is the constraint, not the PHP.
Failure modes — ranked by how badly they hide. Unchanged by the release; none of these are addressed by a constraint bump.
| Failure | Symptom | Mitigation |
|---|---|---|
| Silent empty extraction | Returns "" — indistinguishable from a legitimately empty document |
Validate: reject zero-byte extractions above a file-size threshold; surface as a distinct status, never as success |
| JVM OOM on large files | 500 or connection reset | maxContentLength on the server, file-size gate in the adapter |
| Timeout on scanned PDFs | Worker killed mid-job | Explicit timeout below the queue's retry_after; dead-letter after N attempts |
| Malformed/adversarial input | Parser crash, or worse, CVE-class exploit | Size caps, format allowlist, run Tika as a non-root, network-isolated service |
| Client/server version drift | Degraded extraction fidelity, no error | Pin both; assert version on health check |
| Network partition PHP↔Tika | Timeouts under load | Health check + circuit breaker in the adapter |
Ramp-up — measured in days, and the cost is not where people expect. A mid-level Laravel developer writes the adapter in a day. The real ramp-up is operational: someone must own a Java service, its heap tuning, its CVE cadence, and its container lifecycle. For a PHP-only team, that is a new capability, not a library install. v1.1.0 does nothing to reduce this — if anything, a team reading the changelog might conclude the package is now Laravel-ready, which it is not, and waste a sprint discovering that. Head that off explicitly.
Bottom line for the decision record: the 0.48 score is accurate and the 9.42 "opportunity" score is describing the problem space, not this artifact. The prior recommendation rested in part on the package being unmaintained since 2019; that specific ground has been withdrawn by v1.1.0, which merged a community Symfony-compatibility contribution. The recommendation itself does not move, because it rested primarily on an architectural fact the release does not touch: a Symfony bundle cannot be wired into a Laravel application. Do not take a dependency on jolicode/apache-tika-bundle in a Laravel codebase. The underlying capability is genuinely valuable; pursue it as a Tika Server behind a DocumentExtractor interface, and gate the whole effort on a one-day spike that proves Tika outperforms pure-PHP parsing on our actual document corpus. Re-review only if upstream ships a Laravel service provider or a framework-agnostic core — neither is on the table today.
How can I help you explore Laravel packages today?