A parallel universal-ctags wrapper that accelerates tag generation for git repositories by up to 5x.
ptags is a command-line tool that wraps universal-ctags to generate code tags exclusively for git-tracked files, using parallel processing to significantly speed up tag generation. It solves the problem of slow tag creation in large repositories by distributing the work across multiple threads.
Developers working with large git repositories who use ctags for code navigation and want faster tag generation, particularly those managing monorepos or codebases with thousands of files.
ptags offers up to 5x faster tag generation than standard universal-ctags by leveraging parallel processing, while maintaining git-aware filtering and compatibility with existing ctags workflows.
A parallel universal-ctags wrapper for git repository
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Uses multiple threads to run ctags in parallel, achieving up to 5x faster tag generation on large codebases, as benchmarked with repositories like Linux and Chromium in the README.
Automatically respects .gitignore rules and tracks only git-managed files by default, with options to include untracked or ignored files, ensuring focused and relevant tags.
Supports TOML configuration files for customizing thread counts, binary paths, and ctags options, allowing personalized workflows as shown in the sample config generation.
Works with both Universal Ctags and Exuberant Ctags, and offers installation via cargo, binaries, and package managers like AUR, making it accessible across systems.
Relies on pre-installed ctags and git binaries; if these are missing or outdated, ptags fails or underperforms, adding setup complexity and potential version conflicts.
Primarily designed for git workflows, so including non-tracked or submodule files requires explicit flags, which can be cumbersome for mixed or non-standard environments.
Lacks incremental updates or caching; it regenerates tags from scratch each run, which can be inefficient for frequent updates in large repositories compared to more integrated tools.