deaniliev/laravel-docling

Laravel package for the Docling Serve document conversion API

Maintainers

Package info

github.com/deaniliev/laravel-docling

pkg:composer/deaniliev/laravel-docling

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-07-31 09:27 UTC

This package is auto-updated.

Last update: 2026-07-31 10:12:50 UTC


README

Laravel package for the Docling Serve document conversion API.

Convert PDFs, Office docs, HTML, images, and more to Markdown, JSON, HTML, or text from your Laravel app.

Requirements

Installation

composer require deaniliev/laravel-docling

Publish the config (optional):

php artisan vendor:publish --tag=docling-config

Configuration

Add these to your .env:

DOCLING_BASE_URL=http://localhost:5001
DOCLING_API_KEY=
DOCLING_TIMEOUT=120
DOCLING_POLL_INTERVAL=2
DOCLING_POLL_TIMEOUT=600
Env Description Default
DOCLING_BASE_URL Docling Serve base URL http://localhost:5001
DOCLING_API_KEY Sent as X-Api-Key when set null
DOCLING_TIMEOUT HTTP timeout (seconds) 120
DOCLING_POLL_INTERVAL Async poll interval (seconds) 2
DOCLING_POLL_TIMEOUT Max wait for async tasks (seconds) 600

Usage

Docling Serve v1 expects a sources array (with kind: http|file). This package builds that payload for you.

Convert from URL

use Deaniliev\Docling\Facades\Docling;
use Deaniliev\Docling\ConvertOptions;

$result = Docling::convertFromUrl(
    'https://arxiv.org/pdf/2501.17887',
    ConvertOptions::make()->toFormats(['md'])->doOcr(true)
);

echo $result->markdown();

Convert from local file

$result = Docling::convertFromFile(
    storage_path('app/documents/report.pdf'),
    ConvertOptions::make()->toFormats(['md', 'json'])
);

echo $result->markdown();
$json = $result->json();

Convert from base64

$result = Docling::convertFromBase64(
    base64_encode(file_get_contents($path)),
    'report.pdf',
    ConvertOptions::make()->toFormats(['md'])
);

Asynchronous conversion

$task = Docling::convertFromUrlAsync('https://example.com/large.pdf');

// Poll until finished (throws on failure or timeout)
$task = Docling::waitForTask($task->taskId);

$result = Docling::result($task->taskId);

echo $result->markdown();

Or manage polling yourself:

$task = Docling::convertFromFileAsync('/path/to/doc.pdf');

while (! $task->isFinished()) {
    sleep(2);
    $task = Docling::poll($task->taskId);
}

if ($task->isSuccess()) {
    $result = Docling::result($task->taskId);
}

Options

ConvertOptions covers common Docling options and accepts any extra fields via with():

$options = ConvertOptions::make()
    ->fromFormats(['pdf'])
    ->toFormats(['md', 'json'])
    ->imageExportMode('embedded')
    ->doOcr(true)
    ->ocrLang(['en'])
    ->tableMode('accurate')
    ->pdfBackend('docling_parse')
    ->pipeline('standard')
    ->pageRange([1, 5])
    ->doPictureDescription(true)
    ->with(['vlm_pipeline_preset' => 'default']);

Health check

$status = Docling::health();

Without the Facade

use Deaniliev\Docling\Docling;

$client = Docling::make(
    baseUrl: 'http://localhost:5001',
    apiKey: 'secret',
);

$result = $client->convertFromUrl('https://example.com/doc.pdf');

Testing

composer install
composer test

License

MIT