---
title: "Why we moved our observability from HyperDX to Dash0"
canonical_url: "https://www.nutrient.io/blog/migrating-observability-hyperdx-to-dash0/"
md_url: "https://www.nutrient.io/blog/migrating-observability-hyperdx-to-dash0.md"
last_updated: "2026-10-07T13:31:22.092Z"
description: "A retrospective on two years with HyperDX, the silent metrics outage that broke our trust, and how standardizing on OpenTelemetry turned a vendor migration into a configuration change."
---

**TL;DR**

- In 2024, we replaced a fragmented Datadog + Mezmo setup with [HyperDX](https://www.hyperdx.io/). It was OpenTelemetry-native, unified all our signals, and cost about 60 percent less at our volume.

- After [ClickHouse acquired HyperDX](https://clickhouse.com/blog/clickhouse-acquires-hyperdx-the-future-of-open-source-observability) in March 2025, the cloud product we’d bought into stopped being the priority. In April 2026, our vendor disabled our metrics for nine days during an incident and never told us.

- We moved to [Dash0](https://www.dash0.com/), another OpenTelemetry-native platform, with mere hours of migration work. The full move took about six weeks from decision to closing the HyperDX account. Instrumentation didn’t change; collector endpoints did.

- Our takeaway: Standardize on [OpenTelemetry](https://opentelemetry.io/) and treat the backend as replaceable.

In April 2026, our observability vendor switched off part of our telemetry and didn’t tell us. We noticed nine days later, and only because our dashboards looked suspiciously calm. We saw no email, status-page notice, or in-app banner. When we asked, support confirmed our metrics had been “temporarily disabled for some users” during an incident on its side. Two months later, we closed the account.

This post covers the two years before that. We chose HyperDX in 2024, a decision we’d make again with the same information. The relationship then eroded after the ClickHouse acquisition, and moving to Dash0 took hours of work instead of weeks. OpenTelemetry (OTel) is the open standard that kept our telemetry portable and made the vendor swap mostly a configuration change.

## The bet: OpenTelemetry first, vendor second

In early 2024, our observability was fragmented. Logs lived in Mezmo, metrics were in Datadog, and distributed tracing existed mostly in aspiration. That meant three signals across two vendors with no correlation between them, plus two bills growing faster than our patience.

Before we evaluated a single replacement, we made an architectural decision: We’d instrument everything with OpenTelemetry and route every signal through [OpenTelemetry Collectors](https://opentelemetry.io/docs/collector/) that we run ourselves. Applications and infrastructure speak OpenTelemetry Protocol ([OTLP](https://opentelemetry.io/docs/specs/otlp/)) to a local collector; the collector decides where the data goes.

That gave us three properties we cared about:

- **Instrument once** — OTel SDKs and auto-instrumentation are vendor-neutral. The only vendor-specific piece in the entire pipeline is the exporter block in the collector configuration.

- **Process on our side** — Sampling, filtering, and attribute cleanup happen in collectors we control, not in a vendor’s ingestion pipeline. Noise reduction shouldn’t require a support ticket.

- **An exit, by design** — If the backend ever needs to change, the change is confined to configuration we already manage with Terraform.

Our working assumption was that most observability vendors are converging on a query UI over a columnar store filled by OpenTelemetry. If that’s true, the lock-in isn’t in our instrumentation but in our dashboards, saved queries, and alert definitions. That’s why we kept those as code too, templated and version-controlled, from day one.

## Why we chose HyperDX in 2024

The OTel foundation narrowed the shortlist to OpenTelemetry-native platforms. In mid-2024, that primarily meant HyperDX and [SigNoz](https://signoz.io/), both built on ClickHouse and both with open source cores.

|                                               | Datadog + Mezmo (incumbent)                   | SigNoz  | HyperDX                                 |
| --------------------------------------------- | --------------------------------------------- | ------- | --------------------------------------- |
| **All signals in one place**                  | No — logs and metrics in separate products    | Yes     | Yes                                     |
| **OpenTelemetry-native**                      | OTel ingestion supported; agent-first product | Yes     | Yes                                     |
| **Open source core (self-host escape hatch)** | No                                            | Yes     | Yes                                     |
| **Cost at our volume (modeled)**              | Baseline                                      | Lower   | About 60 percent below baseline         |
| **Day-to-day search and UX**                  | Mature, split across two UIs                  | Capable | The one our on-call engineers preferred |

HyperDX won on the things we felt every day: search-first workflows, predictable per-event pricing, and an API that let us generate dashboards from Terraform. The open source version was our fallback. If the company vanished, we could self-host the same stack.

### Support that shipped features overnight

Early HyperDX gave us the best vendor support we’d ever had. Our support history from 2024 reads like a changelog:

- We asked whether dashboards could be cloned from the UI, and HyperDX shipped it the next day.

- We asked for a surrounding-context view on log lines, and HyperDX shipped it the same evening, with a follow-up custom-filter feature the next morning.

- We hit a bug assigning user groups on invites, and HyperDX fixed it the same day and posted a workaround in the meantime.

- We accidentally flooded the platform with roughly 300,000 events per second. HyperDX noticed before we did and pinged us to help avoid a surprise bill.

- We asked detailed questions about metrics billing, and a founder walked us through the data-point math until our spreadsheet matched HyperDX’s.

These were founders answering, often within the hour, and frequently turning feedback into deployed features in less than 24 hours. That responsiveness papered over the usual early-product rough edges. Alert evaluation ignored dashboard-level filters, and the product auto-elevated JSON log fields into attributes that could collide with OTel resource attributes. Similar quirks followed, and we reported them. Many got fixed quickly.

### The tradeoffs we accepted

HyperDX had no SOC 2 report at the time and processed data exclusively in the United States. It also offered only soft billing limits because hard caps weren’t implemented yet. We accepted those gaps consciously, with the open source self-hosting option as the fallback if compliance requirements caught up with us.

## What changed after the acquisition

In March 2025, [ClickHouse acquired HyperDX](https://clickhouse.com/blog/clickhouse-acquires-hyperdx-the-future-of-open-source-observability). The announcement promised acceleration without disruption. We had no reason to doubt it, because ClickHouse was already the database underneath the product we liked.

The change was gradual. Over the following year, the center of gravity moved to ClickStack, the bundled ClickHouse observability distribution. Development on the cloud product we were paying for slowed, and API inconsistencies lingered. In one, the dashboards API returned different fields than it accepted, which quietly broke our Terraform-managed dashboards on a provider upgrade. And the founders who used to ship our feature requests overnight were, understandably, busy with bigger things. Support stayed polite but became increasingly absent.

None of that was fatal on its own. A working system with slowing feature velocity is still a working system, and migrations have real costs, so we stayed.

### April 2026: The silent switch-off

On 14 April 2026, our metrics ingestion dropped to near zero. Nothing had changed on our side: no deploys, no collector updates, and no configuration drift. We noticed on 23 April and asked support whether something had changed.

Support told us there had been an incident the previous week and that metrics had been “temporarily disabled for some users.” Ours, it turned out, were among them. They were reenabled when we asked, but then dropped again hours later, before eventually stabilizing.

For nine days, a monitoring vendor had our metrics switched off, and the only reason we found out was that we went looking. We couldn’t find any notification: no email, and no status-page entry that matched. When we asked, directly, where the vendor had sent the incident communication, the question went unanswered.

Losing metrics silently is worse than a clear outage. Alerts built on those metrics can’t fire on data that doesn’t arrive, and absence of data looks exactly like absence of problems. For nine days, everything looked healthier than it was.

For an observability vendor, incident communication is part of the product itself. An observability platform you have to monitor yourself is a contradiction in terms.

We decided to leave the next day, and the evaluation that followed focused on where to go.

## Why Dash0

Our 2026 requirements looked like the 2024 list, plus everything we’d learned to price in: compliance posture, data residency, incident communication, and company trajectory. You can’t read that last one off a pricing page.

We considered five options: staying on the renamed ClickStack offering, self-hosting, Grafana Cloud, [Axiom](https://axiom.co/), and [Dash0](https://www.dash0.com/). Self-hosting lost because running an observability stack is its own on-call rotation, and we’d rather spend that time on product infrastructure. Grafana Cloud lost on cost, at multiples of the alternatives at our volume. Axiom made the shortlist; Dash0 won.

**OpenTelemetry-native, end to end**

Dash0 takes OTLP in, understands OTel semantic conventions natively, and uses no proprietary agents. That’s exactly the shape of data our collectors already produce, so it was close to a drop-in replacement.

**Compliance and residency**

Dash0 has a SOC 2 Type 2 report and hosts data in the European Union (EU) on Amazon Web Services (AWS). Both were gaps we’d consciously accepted in 2024, and we didn’t want to accept them twice.

**Predictable pricing**

Dash0’s per-signal pricing is transparent, and it stayed well below the alternatives we modeled, even when we stress-tested the model at double our current volume.

**Trajectory**

Dash0 was founded in 2023 by the team behind Instana and built OTel-native from the first commit. It has a Terraform provider and dashboards-as-code support. During evaluation, its team answered quickly and substantively, the way HyperDX’s did in 2024.

We didn’t leave ClickHouse; Dash0 is also built on it. We left a product whose roadmap had moved away from us and an operational relationship that had stopped working.

## How the migration actually went

This is where the 2024 bet paid out. Every workload we run already emitted OTLP to a local OpenTelemetry Collector. That covers Kubernetes clusters for our managed cloud, the Amazon Elastic Container Service (ECS) services behind this website, the content delivery network (CDN) layer, and continuous integration (CI) build agents. Switching vendors meant changing the exporter endpoint and credentials in collector configuration, rolled out through Terraform and GitOps, environment by environment. We redeployed no application for the migration. By volume, we were moving terabytes of events and hundreds of millions of metric data points per month. By diff, it was a handful of configuration changes.

OpenTelemetry didn’t cover three things:

- **Dashboards had to be rebuilt.** OTLP makes the data portable; it does nothing for saved queries and chart definitions. Terraform templates generated our HyperDX dashboards, so porting them was translation work, but it was still work.

- **Alert rules were recreated and retuned**, including thresholds that had quietly calibrated themselves to one vendor’s evaluation behavior.

- **Query-language muscle memory reset.** On-call engineers had to relearn search syntax and query habits. There’s no configuration file for that.

Here’s the timeline. We decided to leave on 24 April and ran the evaluation and compliance review over the following weeks. The first services shipped telemetry to Dash0 by mid-May, and we closed the HyperDX account on 9 June. That was about six weeks from decision to closed account, in part because higher-priority work came first, but the migration work itself took hours. The expensive step was adopting OpenTelemetry in the first place, and we paid for it once, in 2024. Migrations after that are configuration changes.

## What we learned

- **Standards outlive vendors** — Instrument against OpenTelemetry, not against whoever currently stores the data. Two years and two vendors later, our instrumentation hasn’t changed.

- **Design portability in from the start** — Local collectors in front of every workload are what made the exit cheap. We built that layer early, assuming we’d eventually use it.

- **Dashboards and alerts are the real lock-in** — Keep them as code. Our Terraform-managed dashboards turned the stickiest part of the migration into a porting exercise.

- **Evaluate trajectory as well as the product** — The HyperDX we signed with in 2024 was excellent. Acquisitions change priorities, and customer experience is often where the change shows first.

- **Incident communication is part of the product** — A vendor that doesn’t tell you when your telemetry is off has misunderstood what it’s selling.

- **Cheap exits change the relationship** — When leaving costs a configuration change, you never feel stuck. That’s worth designing for before you need it.

## What’s next

We’re consolidating on Dash0: dashboards-as-code for everything, deeper alerting integration, and steadily wider tracing. So far, it has been what we hoped HyperDX would remain.

If the industry surprises us again, the collectors are ready.

**If infrastructure retrospectives are your thing, we’ve written a couple:**

- [Modernizing CI build servers: How to migrate from Chef to Ansible](https://www.nutrient.io/blog/migrating-from-chef-to-ansible/)

- [Emerging threats: Your logging system may be an agentic threat vector](https://www.nutrient.io/blog/emerging-threats-your-logging-system.md)

And if you run [Nutrient Document Engine](https://www.nutrient.io/guides/document-engine/monitoring/opentelemetry.md), it ships with OpenTelemetry support out of the box.
---

## Related pages

- [The business case for accessibility: Five ways it drives enterprise value](/blog/5-ways-accessibility-drives-enterprise-value.md)
- [Accessibility Untangled Why It Matters Guide](/blog/accessibility-untangled-why-it-matters-guide.md)
- [Advanced Techniques For React Native Ui Components](/blog/advanced-techniques-for-react-native-ui-components.md)
- [`vector_store` holds your indexed documents (see the multimodal RAG post](/blog/agentic-rag.md)
- [Ai Assistant Agent Governance](/blog/ai-assistant-agent-governance.md)
- [How to build an AI agent for contract redlining against a compliance playbook](/blog/ai-contract-redlining-compliance-playbook.md)
- [Ai Document Automation Extraction To Action](/blog/ai-document-automation-extraction-to-action.md)
- [Ai Document Workflows Ocr Compliance Heavy Teams](/blog/ai-document-workflows-ocr-compliance-heavy-teams.md)
- [Ai Legal Assistant Document Authoring](/blog/ai-legal-assistant-document-authoring.md)
- [Ai Schema Generator Document Extraction](/blog/ai-schema-generator-document-extraction.md)
- [Amazon Textract Alternatives](/blog/amazon-textract-alternatives.md)
- [Start (clears any prior buffer), navigate the document, then stop into a file.](/blog/android-faster-pdf-rendering.md)
- [Android Pdf Out Of Memory Handling](/blog/android-pdf-out-of-memory-handling.md)
- [Angular File Viewer Pdf Image Office Files](/blog/angular-file-viewer-pdf-image-office-files.md)
- [Approval Workflow Software](/blog/approval-workflow-software.md)
- [Approvals Matrix](/blog/approvals-matrix.md)
- [Apryse To Nutrient Migration](/blog/apryse-to-nutrient-migration.md)
- [Auto Tagging And Document Accessibility In Dotnet Sdk](/blog/auto-tagging-and-document-accessibility-in-dotnet-sdk.md)
- [Simple PII redaction.](/blog/automated-pii-removal.md)
- [Azure Document Intelligence Alternatives](/blog/azure-document-intelligence-alternatives.md)
- [Best Ai Document Workflow Platforms](/blog/best-ai-document-workflow-platforms.md)
- [Best Document Ai Platforms](/blog/best-document-ai-platforms.md)
- [Best Document Classification Platforms](/blog/best-document-classification-platforms.md)
- [Best document parser for RAG: LlamaParse vs. Unstructured vs. Reducto vs. Nutrient](/blog/best-document-parser-llamaparse-unstructured-reducto.md)
- [Best Document Parsing Apis](/blog/best-document-parsing-apis.md)
- [Best Document Viewers](/blog/best-document-viewers.md)
- [Best Llm Document Understanding Platforms](/blog/best-llm-document-understanding-platforms.md)
- [Best Multilingual Ocr Software](/blog/best-multilingual-ocr-software.md)
- [Best Pdf Parsers For Rag](/blog/best-pdf-parsers-for-rag.md)
- [Best Salesforce Document Generation Apps](/blog/best-salesforce-document-generation-apps.md)
- [Best Secure Document Collaboration Platforms](/blog/best-secure-document-collaboration-platforms.md)
- [Bpm Guide](/blog/bpm-guide.md)
- [Bpm Tools](/blog/bpm-tools.md)
- [Build Vs Buy Document Extraction](/blog/build-vs-buy-document-extraction.md)
- [Business Automation](/blog/business-automation.md)
- [Capex Vs Opex](/blog/capex-vs-opex.md)
- [The CEO’s AI playbook: Why decision architecture beats model selection](/blog/ceo-ai-playbook-decision-architecture.md)
- [1. Extract and chunk the PDF.](/blog/chat-with-pdf.md)
- [Complete Guide To Pdfjs](/blog/complete-guide-to-pdfjs.md)
- [Construction Document Data Extraction](/blog/construction-document-data-extraction.md)
- [Convert One Drive Files To Pdf In Sharepoint](/blog/convert-one-drive-files-to-pdf-in-sharepoint.md)
- [Create And Edit Pdfs In Flutter](/blog/create-and-edit-pdfs-in-flutter.md)
- [Create Pdfs With React](/blog/create-pdfs-with-react.md)
- [Creating A Document Scanner With Ocr In Python](/blog/creating-a-document-scanner-with-ocr-in-python.md)
- [Creating And Filling Pdf Forms Programmatically In Javascript](/blog/creating-and-filling-pdf-forms-programmatically-in-javascript.md)
- [The CTO’s AI playbook: Why accountability architecture beats orchestration](/blog/cto-ai-playbook-accountability-architecture.md)
- [Digital Signatures](/blog/digital-signatures.md)
- [Digital Workflow Automation](/blog/digital-workflow-automation.md)
- [Docling Alternatives](/blog/docling-alternatives.md)
- [Document Ai Vs Ocr](/blog/document-ai-vs-ocr.md)
- [Document Authoring Audit Trail](/blog/document-authoring-audit-trail.md)
- [Document Extraction Confidence Scores](/blog/document-extraction-confidence-scores.md)
- [Document Extraction For Underwriting](/blog/document-extraction-for-underwriting.md)
- [Document Viewer](/blog/document-viewer.md)
- [Document Watermarking](/blog/document-watermarking.md)
- [Emerging threats: Your logging system may be an agentic threat vector](/blog/emerging-threats-your-logging-system.md)
- [Extend Alternatives](/blog/extend-alternatives.md)
- [Extract Patient Data On Premises](/blog/extract-patient-data-on-premises.md)
- [app.py](/blog/extract-text-from-pdf-using-python.md)
- [Fillable Pdf](/blog/fillable-pdf.md)
- [Google Document Ai Alternatives](/blog/google-document-ai-alternatives.md)
- [How To Add Digital Signature To Pdf Using React](/blog/how-to-add-digital-signature-to-pdf-using-react.md)
- [How To Build A Dotnet Maui Pdf Viewer](/blog/how-to-build-a-dotnet-maui-pdf-viewer.md)
- [How To Build A Flutter Pdf Viewer](/blog/how-to-build-a-flutter-pdf-viewer.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer-with-pdfjs.md)
- [or](/blog/how-to-build-a-javascript-pdf-viewer.md)
- [How To Build A Nextjs Pdf Viewer](/blog/how-to-build-a-nextjs-pdf-viewer.md)
- [How To Build A Powerpoint Viewer Using Javascript](/blog/how-to-build-a-powerpoint-viewer-using-javascript.md)
- [Using Yarn](/blog/how-to-build-a-react-excel-viewer.md)
- [How To Build A React Native Pdf Viewer](/blog/how-to-build-a-react-native-pdf-viewer.md)
- [How To Build A React Powerpoint Viewer](/blog/how-to-build-a-react-powerpoint-viewer.md)
- [How To Build A Reactjs File Viewer](/blog/how-to-build-a-reactjs-file-viewer.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer-with-react-pdf.md)
- [or](/blog/how-to-build-a-reactjs-pdf-viewer.md)
- [How To Build A Reactjs Viewer With Pdfjs](/blog/how-to-build-a-reactjs-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer With Pdfjs](/blog/how-to-build-a-vuejs-pdf-viewer-with-pdfjs.md)
- [How To Build A Vuejs Pdf Viewer](/blog/how-to-build-a-vuejs-pdf-viewer.md)
- [How To Build An Android Pdf Viewer](/blog/how-to-build-an-android-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Ng2 Pdf Viewer](/blog/how-to-build-an-angular-pdf-viewer-with-ng2-pdf-viewer.md)
- [How To Build An Angular Pdf Viewer With Pdfjs](/blog/how-to-build-an-angular-pdf-viewer-with-pdfjs.md)
- [How To Convert Docx To Pdf Using Javascript](/blog/how-to-convert-docx-to-pdf-using-javascript.md)
- [How To Convert Docx To Pdf Using Python](/blog/how-to-convert-docx-to-pdf-using-python.md)
- [How To Convert Html To Pdf Using Html2pdf](/blog/how-to-convert-html-to-pdf-using-html2pdf.md)
- [How To Convert Html To Pdf Using React](/blog/how-to-convert-html-to-pdf-using-react.md)
- [How To Convert Html To Pdf Using Wkhtmltopdf And Csharp](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-csharp.md)
- [or](/blog/how-to-convert-html-to-pdf-using-wkhtmltopdf-and-python.md)
- [How To Convert Html To Pptx](/blog/how-to-convert-html-to-pptx.md)
- [Quarterly report](/blog/how-to-convert-pdf-to-markdown-using-python.md)
- [How To Convert Word To Pdf In Nodejs](/blog/how-to-convert-word-to-pdf-in-nodejs.md)
- [or](/blog/how-to-create-a-react-js-signature-pad.md)
- [How To Create Pdfs With React To Pdf](/blog/how-to-create-pdfs-with-react-to-pdf.md)
- [How To Edit Pdfs Using Ios Pdf Library](/blog/how-to-edit-pdfs-using-ios-pdf-library.md)
- [How To Embed A Pdf Viewer In Your Website](/blog/how-to-embed-a-pdf-viewer-in-your-website.md)
- [How To Extract Tables From Pdf And Images](/blog/how-to-extract-tables-from-pdf-and-images.md)
- [How To Generate Pdf From Html With Nodejs](/blog/how-to-generate-pdf-from-html-with-nodejs.md)
- [base_url tells WeasyPrint where to resolve relative asset paths](/blog/how-to-generate-pdf-reports-from-html-in-python.md)
- [How To Merge Pdfs Using Javascript](/blog/how-to-merge-pdfs-using-javascript.md)
- [How To Ocr Pdfs In Linux](/blog/how-to-ocr-pdfs-in-linux.md)
- [How To Print Pdf In Csharp](/blog/how-to-print-pdf-in-csharp.md)
- [How To Programmatically Create And Fill Pdf Form In Angular](/blog/how-to-programmatically-create-and-fill-pdf-form-in-angular.md)
- [C# barcode scanner: How to scan and read 1D barcodes and QR codes](/blog/how-to-scan-barcodes-in-csharp.md)
- [Open an image.](/blog/how-to-use-tesseract-ocr-in-python.md)
- [From an HTML string.](/blog/html-in-pdf-format.md)
- [Html To Pdf In Javascript](/blog/html-to-pdf-in-javascript.md)
- [Intelligent Data Extraction](/blog/intelligent-data-extraction.md)
- [Invoice Approval Software](/blog/invoice-approval-software.md)
- [Javascript Document Editor](/blog/javascript-document-editor.md)
- [Javascript Pdf Editors](/blog/javascript-pdf-editors.md)
- [Javascript Pdf Libraries](/blog/javascript-pdf-libraries.md)
- [Landing Ai Alternatives](/blog/landing-ai-alternatives.md)
- [Langextract Vs Llamaindex Extraction Comparison](/blog/langextract-vs-llamaindex-extraction-comparison.md)
- [Linearized Pdf](/blog/linearized-pdf.md)
- [Uses OpenAI by default — set OPENAI_API_KEY.](/blog/llamaindex-vs-langchain-rag.md)
- [Llamaindex Vs Langchain Vs Haystack](/blog/llamaindex-vs-langchain-vs-haystack.md)
- [Llamaindex Workflows Vs Langgraph](/blog/llamaindex-workflows-vs-langgraph.md)
- [Llamaparse Alternatives](/blog/llamaparse-alternatives.md)
- [Low Code No Code Document Integrations](/blog/low-code-no-code-document-integrations.md)
- [Material Requisition](/blog/material-requisition.md)
- [or](/blog/merge-pdfs.md)
- [Swift Package Manager](/blog/mobile-pdf-sdk.md)
- [`elements` come from your document parser — each has a type and content.](/blog/multimodal-rag.md)
- [Nutrient Flutter 6 Bindings Api](/blog/nutrient-flutter-6-bindings-api.md)
- [Nutrient Flutter Bindings Architecture](/blog/nutrient-flutter-bindings-architecture.md)
- [Nutrient Vs Conga Composer](/blog/nutrient-vs-conga-composer.md)
- [Ocr Api Comparison](/blog/ocr-api-comparison.md)
- [Online Document Viewer](/blog/online-document-viewer.md)
- [Open Pdf In Your Web App](/blog/open-pdf-in-your-web-app.md)
- [PDF accessibility for developers: Meeting WCAG 2.2, Section 508, and PDF/UA with an SDK](/blog/pdf-accessibility.md)
- [Extract data from PDF files: A developer guide to structured data from PDFs and scans](/blog/pdf-data-extraction-developer-guide.md)
- [Pdf Extraction Benchmark Opendataloader Bench](/blog/pdf-extraction-benchmark-opendataloader-bench.md)
- [Pdf Extraction Document Case Studies](/blog/pdf-extraction-document-case-studies.md)
- [Pdf Page Labels](/blog/pdf-page-labels.md)
- [Pdf Sdk Compliance Security Checklist](/blog/pdf-sdk-compliance-security-checklist.md)
- [Pdf Sdk Performance Benchmark](/blog/pdf-sdk-performance-benchmark.md)
- [Pdf Ua Compliance Guide](/blog/pdf-ua-compliance-guide.md)
- [Pdf Ua Validation](/blog/pdf-ua-validation.md)
- [Pdfjs Accessibility Structtree Printing](/blog/pdfjs-accessibility-structtree-printing.md)
- [Pdfjs Advanced Loading Streaming Workers](/blog/pdfjs-advanced-loading-streaming-workers.md)
- [Pdfjs Annotation Editor Layer](/blog/pdfjs-annotation-editor-layer.md)
- [Pdfjs Area Annotations Canvas Capture](/blog/pdfjs-area-annotations-canvas-capture.md)
- [Pdfjs Coordinate Systems Pdf To Screen](/blog/pdfjs-coordinate-systems-pdf-to-screen.md)
- [Pdfjs Document Outline Bookmarks Metadata](/blog/pdfjs-document-outline-bookmarks-metadata.md)
- [Pdfjs Eventbus Guide](/blog/pdfjs-eventbus-guide.md)
- [macOS](/blog/pdfjs-file-format-conversion-to-pdf.md)
- [macOS](/blog/pdfjs-generating-pdf-thumbnails-pdf2pic.md)
- [Pdfjs Limitations Commercial Upgrade](/blog/pdfjs-limitations-commercial-upgrade.md)
- [Pdfjs Native Annotation Layer Forms](/blog/pdfjs-native-annotation-layer-forms.md)
- [Pdfjs Navigation Zoom Rotation](/blog/pdfjs-navigation-zoom-rotation.md)
- [Pdfjs Pdf Page Manipulation Pdf Lib](/blog/pdfjs-pdf-page-manipulation-pdf-lib.md)
- [Pdfjs React Viewer Setup](/blog/pdfjs-react-viewer-setup.md)
- [Pdfjs Rendering Overlays React Portals](/blog/pdfjs-rendering-overlays-react-portals.md)
- [Pdfjs Server Side Text Extraction](/blog/pdfjs-server-side-text-extraction.md)
- [Pdfjs Sticky Note Annotations](/blog/pdfjs-sticky-note-annotations.md)
- [Pdfjs Text Highlight Annotations](/blog/pdfjs-text-highlight-annotations.md)
- [Pdfjs Text Search Pdffindcontroller](/blog/pdfjs-text-search-pdffindcontroller.md)
- [Pdfjs Thumbnail Sidebar](/blog/pdfjs-thumbnail-sidebar.md)
- [People Process Tools](/blog/people-process-tools.md)
- [Process Flows](/blog/process-flows.md)
- [React Native Pdf Annotation](/blog/react-native-pdf-annotation.md)
- [React Pdf Annotation Layer Forms](/blog/react-pdf-annotation-layer-forms.md)
- [React Pdf Custom Rendering Hooks](/blog/react-pdf-custom-rendering-hooks.md)
- [Using Yarn](/blog/react-pdf-editor.md)
- [React Pdf Loading States Errors Passwords](/blog/react-pdf-loading-states-errors-passwords.md)
- [React Pdf Non Latin Fonts Special Pdfs](/blog/react-pdf-non-latin-fonts-special-pdfs.md)
- [React Pdf Outline Table Of Contents](/blog/react-pdf-outline-table-of-contents.md)
- [React Pdf Performance Optimization](/blog/react-pdf-performance-optimization.md)
- [React Pdf Setup Basic Rendering](/blog/react-pdf-setup-basic-rendering.md)
- [React Pdf Text Layer Custom Renderer](/blog/react-pdf-text-layer-custom-renderer.md)
- [React Pdf Thumbnails Page Navigation](/blog/react-pdf-thumbnails-page-navigation.md)
- [Reducto Alternatives](/blog/reducto-alternatives.md)
- [Requisition System](/blog/requisition-system.md)
- [labels.py](/blog/route-documents-automatically-classify-api.md)
- [or](/blog/sample-blog-updated.md)
- [Sdk Product Updates Q2 2026](/blog/sdk-product-updates-q2-2026.md)
- [System Of Record Vs Source Of Truth](/blog/system-of-record-vs-source-of-truth.md)
- [Add DWS MCP Server to your Claude Code project.](/blog/teaching-llms-to-read-pdfs.md)
- [Open an image file.](/blog/tesseract-python-guide.md)
- [The Six Best Pdf Generator Apis](/blog/the-six-best-pdf-generator-apis.md)
- [Define the HTML part of the document.](/blog/top-10-ways-to-generate-pdfs-in-python.md)
- [Top 5 Javascript Pdf Viewers](/blog/top-5-javascript-pdf-viewers.md)
- [or](/blog/top-js-pdf-libraries.md)
- [Top Ten Ways To Convert Html To Pdf](/blog/top-ten-ways-to-convert-html-to-pdf.md)
- [Unstructured Alternatives](/blog/unstructured-alternatives.md)
- [Using Javascript In Pdf Form Fields](/blog/using-javascript-in-pdf-form-fields.md)
- [Vector Pdf](/blog/vector-pdf.md)
- [Wcag2 Accessibility Requirements Documents](/blog/wcag2-accessibility-requirements-documents.md)
- [Web Sdk Is Now Headless](/blog/web-sdk-is-now-headless.md)
- [What Are Annotations](/blog/what-are-annotations.md)
- [What Is A Vpat](/blog/what-is-a-vpat.md)
- [What Is Business Logic](/blog/what-is-business-logic.md)
- [What Is Document Processing](/blog/what-is-document-processing.md)
- [What Is Intelligent Document Processing](/blog/what-is-intelligent-document-processing.md)
- [What Is Ocr Invoice Processing](/blog/what-is-ocr-invoice-processing.md)
- [What Is Pdf Ua](/blog/what-is-pdf-ua.md)
- [Why Pdfium Is A Trusted Platform For Pdf Rendering](/blog/why-pdfium-is-a-trusted-platform-for-pdf-rendering.md)
- [Why Your Ai Agent Hallucinates Pdf Table Data](/blog/why-your-ai-agent-hallucinates-pdf-table-data.md)

