Library / SDK
PDAL/PDAL avatar
PDAL/PDAL

PDAL Review: A C++ Point Cloud Processing Foundation

PDAL is Point Data Abstraction Library. GDAL for point cloud data.

1,432 stars515 forksC++NOASSERTION

At a glance

What is it?
PDAL is a C++ library for abstracting point cloud data, organized around readers, filters, writers, kernels, plugins, and applications. It suits native software developers, while its README leaves installation and first-use details to the project website.
Who is it for?
Adopt PDAL when a C++ project needs a dedicated point cloud abstraction layer and its build, dependency, licence, and format interfaces fit the target system. Do not choose it solely from the repository name or the "GDAL for point cloud data" description.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • PDAL/PDAL1,432 ★ · +10
Star history
Repository2026-10-172026-11-07
PDAL/PDAL1.4k1.4k

10 Stars in the last 21 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

PDAL's Point Cloud Abstraction Boundary

PDAL identifies itself as "GDAL for point cloud data." That comparison conveys the intended scope, but it does not specify the supported formats, API surface, coordinate reference system behavior, or deployment requirements. PDAL is presented primarily as a C++ library, which makes it relevant to native applications, command-line tools, and existing codebases that need a common layer for point cloud operations.

The intended users are developers rather than people looking for a desktop point cloud viewer. Based on the repository layout, PDAL separates input and output handling, transformations, command applications, lower-level kernels, and plugins. That organization suggests format access and point processing are represented as software components rather than confined to one executable. This is an architectural reading of the repository, not confirmation of a particular public interface, because the README does not include API declarations.

PDAL also appears to address more than one kind of point cloud workflow. The examples are divided into reading, writing, filtering, streaming, batching, kernel, and writer examples. This range can help a developer choose an entry pattern, but the README does not state which pipelines, filters, or formats are included in a standard installation. A prospective adopter should inspect the relevant example directories rather than infer complete feature coverage from their names.

Repository Layout Defines PDAL's Processing Roles

The clearest evidence about PDAL's architecture comes from its top-level directories. The `io/` directory is the natural location for input and output components, while `filters/` is intended for transformations. The `kernels/` directory sits at a lower processing level, and `apps/` contains application entry points. Together, these names indicate a processing library organized around composable roles.

The examples reinforce that division. Directories named `writing-reader/`, `writing-filter/`, `writing-writer/`, and `writing-kernel/` provide distinct authoring starting points. Separate `reading-streamer/` and `writing-streamer/` examples indicate that streaming is treated as its own programming concern. The `batch-streamer/` example adds a batch-oriented path, while `examples/writing/` and `examples/writing-filter/` cover more general compositions. The directory names do not reveal the exact calls, data structures, or execution order used by those programs.

This creates a clear documentation boundary. PDAL appears designed around staged point cloud processing, but a reviewer should not assume that every filter can be combined with every reader and writer, or that streaming always has particular memory characteristics. Those details depend on implementation, plugin availability, and the point cloud formats involved. The README does not document those compatibility relationships.

For a C++ integration, the repository layout offers specific places to begin. Start with `io/` when the issue is format access, inspect `filters/` for processing, and use `examples/` to identify the intended composition style. The `plugins/` directory also requires attention because it indicates that some functionality may live outside the core library.

Installing PDAL Starts With the Project Website

The repository README does not provide installation commands, prerequisite packages, compiler settings, or a supported build matrix. It links to the main website at `https://pdal.org/` and directs users to the project documentation. Without those instructions, an accurate tutorial cannot include a package-manager command, CMake invocation, container image, or platform-specific installation sequence.

A first real use should therefore begin with the documentation reached from the PDAL website. The repository contains `CMakeLists.txt`, `PDALConfig.cmake.in`, `cmake/`, `pdal_features.hpp.in`, and `pixi.toml`, showing that the build has several configuration surfaces. Those file names do not establish how a user should invoke them, so no unverified build command is included here.

The appropriate example depends on the intended job. Use `examples/reading-streamer/` or `examples/writing/` to investigate point cloud input and output, and use `examples/filter-streamer/` to investigate streaming with a filter. Before starting, verify the required C++ library target, transitive dependencies, plugin availability, and the command-line application associated with the chosen pipeline. The README does not name those targets or dependencies.

PDAL's Native Scope Leaves Integration Questions Open

A primarily C++ repository makes PDAL a different proposition from a hosted service or a standalone graphical application. Native scope can be appropriate when point cloud processing must be embedded inside an existing C++ codebase, but the README does not document language bindings, API stability guarantees, binary compatibility policy, or the process for consuming a release as another project.

The presence of `PDALConfig.cmake.in` indicates a CMake package configuration template, yet it does not reveal the resulting exported target name or install prefix. The presence of `plugins/` suggests extensibility, but the repository listing does not say which plugins are shipped, how they are enabled, or whether a particular deployment requires them. These details affect whether an existing build system can consume the library cleanly.

There is also a boundary between workflow documentation and source examples. The repository includes `examples/`, `doc/`, and `doxygen/`, which are concrete locations for fuller technical documentation. Their contents are not reproduced in the README, so this review cannot confirm command syntax, supported point cloud formats, coordinate reference system behavior, filtering operations, or plugin loading semantics. Each claim requires the corresponding project documentation or source file.

PDAL Is Not a Complete Point Cloud Toolchain

PDAL is the wrong choice if the requirement is a documented desktop viewer, a single-click conversion utility, or a hosted service for inspecting point clouds. The README provides no evidence for those use cases. PDAL identifies itself as a library, and its repository layout centers on software components and native build configuration.

It can also be the wrong abstraction for a small script that needs one fixed conversion. The README does not establish that PDAL can be installed as a lightweight Python package or invoked through a simple one-line interface. A native C++ library may add build and dependency work when the actual requirement is a narrow file transformation.

A different design choice is to call one format-specific library directly. Such an approach avoids a general abstraction when the application reads one fixed format and performs one fixed operation, but it does not provide the same visible separation between readers, filters, writers, kernels, and plugins. The actual difference is scope: PDAL is positioned as a shared point cloud processing layer, while a format-specific library remains close to one file format and its own API. The README names no competing library, so a product comparison is not documented here.

PDAL Releases and Upgrade Boundaries

The repository is not archived, and the last push was on 2026-10-09. The recent release history includes PDAL 2.10.0 on 2026-02-13, 2.10.1 on 2026-03-27, and 2.10.2 on 2026-06-12. This establishes recent repository and release activity, but it does not establish compatibility, upgrade effort, or support for a particular point cloud format.

The version numbering separates a broader 2.10.0 release from patch releases 2.10.1 and 2.10.2. The README does not describe release changes, migration steps, or breaking behavior. `HOWTORELEASE.md` is present in the repository, but its contents are not available in the README, so the release process cannot be assessed from the public information shown here.

Maintenance and upgrade cost remain partly unknown because the README does not publish a compatibility policy, migration guide, or dependency list. An integration should inspect the documentation for the selected 2.10 release and check the build configuration against the target compiler and platform. The presence of multiple recent releases is useful release information, not proof that an upgrade will be inexpensive.

PDAL's Custom Licence Requires Direct Review

GitHub classifies the repository licence as Other and links reviewers to `LICENSE.txt`. The README does not reproduce the licence terms. No conclusion about redistribution, attribution, patent rights, warranty, or compatibility with a particular organizational licence policy can be made from the repository classification alone.

This limitation matters more for a C++ library than for a short script because PDAL would be linked into or distributed with another software product. `LICENSE.txt` should be read directly before adoption. The README also includes citation information through `CITATION`, `CITATION.cff`, and a Zenodo DOI, but citation metadata is separate from licence review and should not be treated as a substitute for the licence text.

Editorial conclusion

Adopt PDAL when a C++ project needs a dedicated point cloud abstraction layer and its build, dependency, licence, and format interfaces fit the target system. Do not choose it solely from the repository name or the "GDAL for point cloud data" description. First inspect LICENSE.txt, then verify the build instructions and the appropriate example under `examples/`.

Frequently asked questions

What is PDAL used for?

PDAL describes itself as "GDAL for point cloud data." It is a C++ library intended to abstract point cloud data handling.

How do I install PDAL?

The README does not include installation commands or prerequisites. It directs users to the main website at `https://pdal.org/` and links to the project documentation.

What programming language does PDAL use?

PDAL's primary language is C++. Its repository includes C++ build configuration and source-oriented directories such as `filters/`, `io/`, and `kernels/`.

Official sources

  1. Issues
  2. PDAL/PDAL on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/pdal-pdal.svg)](https://hysenlabs.com/projects/pdal-pdal)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/pdal-pdal.svg)](https://hysenlabs.com/projects/pdal-pdal)

Was this useful?