# pdtm installs and updates ProjectDiscovery's tools in one place

> pdtm is a Go tool manager for the ProjectDiscovery open source projects, with a small flag-based command line covering install, update, remove and PATH management, and a default binary directory added to your shell PATH. It downloads released binaries rather than building from source, which is both its convenience and its main limitation.

**projectdiscovery/pdtm** — ProjectDiscovery's Open Source Tool Manager

- Repository: https://github.com/projectdiscovery/pdtm
- Website: https://projectdiscovery.io
- Stars: 1,170 · Forks: 96
- Language: Go
- License: MIT
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/projectdiscovery-pdtm

## The flag layout is the documentation

The command line is a single binary with grouped flags, and the grouping is the fastest way to understand the tool. The config group has `-config` for a YAML configuration file, defaulting to `$HOME/.config/pdtm/config.yaml`, and `-bp` or `-binary-path` for a custom download location, defaulting to `$HOME/.pdtm/go/bin`. The install group has `-i` for one or more project names as a comma separated list, `-ia` for all projects, `-ip` to append the path to the PATH environment variables, and `-igp` to append GOBIN or GOPATH to PATH. The update group adds `-u` for named projects, `-ua` for all of them, `-up` to update pdtm itself, and `-duc` to disable the automatic update check. The remove group mirrors install with `-r`, `-ra` and `-rp`, and the debug group holds `-sp` to print the current binary path and exit, `-version`, `-v`, `-nc` to disable the ANSI colouring, and `-dc` to suppress the release changelog in the output.

## Installing pdtm itself has two routes and a version floor

The tool requires go1.24.3 to install successfully, and the documented way is to install the latest version with go install:

```sh
go install -v github.com/projectdiscovery/pdtm/cmd/pdtm@latest
```

The alternative is to download a binary from the GitHub releases page. Two notes accompany the install. The first is a real constraint on what the manager can do: projects are installed by downloading the released project binary, which means that projects can only be installed on the platforms for which binaries have been published. The second is that the path `$HOME/.pdtm/go/bin` is added to the PATH variable by default, so a fresh install works without any further configuration as long as your shell reads the change. The Go module in the repository actually declares go 1.25.0, which is newer than the stated floor for installation, so building from source needs a newer toolchain than installing a prebuilt binary.

## What install-all actually does

The example run shows the shape of the tool, with an ASCII banner and a line per installed project:

```console
$ pdtm -install-all
                ____
     ____  ____/ / /_____ ___
    / __ \/ __  / __/ __ __  \
   / /_/ / /_/ / /_/ / / / / /
  / .___/\__,_/\__/_/ /_/ /_/
 /_/                          v0.0.1

      projectdiscovery.io

[INF] Installed httpx v1.1.1
[INF] Installed nuclei v2.6.3
[INF] Installed naabu v2.6.3
[INF] Installed dnsx v2.6.3
```

The version numbers are printed as each project lands, which matters more than it looks, because a security toolchain where httpx is two major versions behind nuclei produces confusing results and there is no other place where you would notice. The manager does not solve that for you, but it does make the state of the installation visible in one command, and the update group exists to fix it in one more.

## The todo list says what is not there yet

The roadmap section is short and both items are about building from source. The first is support for go setup plus project install from source, and the second is support for installing from source as a fallback option. Both point at the same limitation the install notes describe, and the consequence is clear: if a project has not published a binary for your platform, or you need a specific commit rather than a release, pdtm cannot get it for you. You would go back to the go toolchain and the project's own build instructions. That is a reasonable division of labour for a tool whose job is convenience, but it does mean the manager is not a replacement for understanding how each tool is built.

## The build produces a static binary with a gcompat caveat

The Makefile is short and the static linking rule is conditional. The default linker flags strip the symbol table and debug information, and on any platform other than macOS the build adds `-extldflags "-static"`, so the release binaries are statically linked everywhere except Darwin. The Dockerfile raises the one subtlety: the image is Alpine based, and a comment explains that gcompat is needed because purego, which does dynamic loading with dlopen, makes the amd64 and arm64 binaries dynamically linked against the glibc loader even with CGO disabled, so the Alpine image installs bind-tools, ca-certificates and gcompat. The image copies the platform binary and sets the entrypoint to pdtm, with the standard Opencontainers labels for the author, description, licence, title and URL.

## The project structure and the release line

The repository is a conventional Go layout with a `cmd/` directory for the entry point, `internal/` and `pkg/` for the code, an `examples/` directory holding a single `main.go`, plus a `Makefile`, a `Dockerfile` and a `.goreleaser.yaml`. The release history shows a young tool: v0.1.5 from 2026-08-16, v0.1.4 from 2026-08-14 and v0.1.3 from 2025-05-26. Two of those releases landed two days apart in August 2026, so the tool is being iterated on quickly, and the version numbers below one point mean the interface may still move. The licence is MIT, and the README carries a privacy notice file in the repository root alongside the rest.

## Conclusion

Adopt pdtm if you run several ProjectDiscovery tools and want one place that installs, updates and removes them, since it handles the binary directory and the PATH entry for you and keeps versions consistent across a machine. Do not adopt it if you need a tool built from source or a version that was never released as a binary, because the manager downloads published releases only. Verify first that binaries exist for your platform, that the default install directory under your home directory is writable, and that your shell profile picks up the PATH change the tool appends, since that is the part most likely to need a manual fix.

## FAQ

### How do I install pdtm?

With `go install -v github.com/projectdiscovery/pdtm/cmd/pdtm@latest`, which requires go1.24.3, or by downloading a binary from the GitHub releases page. The path `$HOME/.pdtm/go/bin` is added to PATH by default.

### Which platforms can pdtm install tools for?

Only the platforms for which binaries have been published, because projects are installed by downloading the released project binary rather than being built from source. Support for installing from source is listed in the project's todo.

### How do I update the tools pdtm manages?

Use `-u` with one or more project names as a comma separated list, or `-ua` to update all of them. `-up` updates pdtm itself, and `-duc` disables the automatic pdtm update check.

### Where does pdtm put the binaries it installs?

In `$HOME/.pdtm/go/bin` by default, which can be changed with the `-bp` or `-binary-path` flag. The `-ip` flag appends the path to your PATH environment variables and `-rp` removes it again.

### What licence is pdtm released under?

The MIT licence, with the licence file in the repository root. The most recent release is v0.1.5 from 2026-08-16, and the last push to the main branch was on 2026-10-08.

## Sources

- [License: MIT](https://github.com/projectdiscovery/pdtm/blob/main/LICENSE)
- [projectdiscovery/pdtm on GitHub](https://github.com/projectdiscovery/pdtm)
- [Project website](https://projectdiscovery.io)
- [README](https://github.com/projectdiscovery/pdtm/blob/main/README.md)
- [Releases](https://github.com/projectdiscovery/pdtm/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/projectdiscovery-pdtm
