PyNNDescent is a Python library for fast approximate nearest neighbor search, implementing the NN-descent algorithm. The core pipeline builds a k-nearest neighbor graph via random projection tree initialization followed by iterative graph refinement, with all hot loops JIT-compiled using Numba with explicit types and fastmath. The public API follows scikit-learn conventions: NNDescent constructor for training, .query() for approximate nearest neighbor queries, .neighbor_graph for extracting the training-set graph, and .update() for incremental insertion. It supports dense and sparse data, multiple distance metrics, and parallel execution via Numba's prange. The library is a dependency of UMAP and OpenTSNE, which consume the training-set neighbor graph for manifold learning and density-based clustering.