projectile 
- Description
- Manage and navigate projects in Emacs easily
- Latest
- projectile-2.10.0.20260701.159.tar (.sig), 2026-Jul-01, 470 KiB
- Maintainer
- Bozhidar Batsov <bozhidar@batsov.dev>
- Website
- https://github.com/bbatsov/projectile
- Browse ELPA's repository
- CGit or Gitweb
- All Dependencies
- compat (.tar)
- Badge
To install this package from Emacs, use package-install or list-packages.
Full description
Projectile is a project interaction library for Emacs. It provides a powerful set of features operating at the project level, as well as simple heuristics to identify projects. See the README and https://docs.projectile.mx for more details.
Old versions
| projectile-2.10.0.20260630.157.tar.lz | 2026-Jun-30 | 88.0 KiB |
| projectile-2.10.0.20260630.155.tar.lz | 2026-Jun-30 | 87.3 KiB |
| projectile-2.10.0.20260629.152.tar.lz | 2026-Jun-29 | 86.0 KiB |
| projectile-2.10.0.20260619.126.tar.lz | 2026-Jun-19 | 80.3 KiB |
| projectile-2.10.0.20260429.111805.tar.lz | 2026-May-19 | 75.9 KiB |
| projectile-2.10.0snapshot0.20260429.111805.tar.lz | 2026-Apr-29 | 75.9 KiB |
| projectile-2.10.0snapshot0.20260228.85137.tar.lz | 2026-Feb-28 | 65.4 KiB |
| projectile-2.9.1.0.20260214.223545.tar.lz | 2026-Feb-15 | 63.8 KiB |
| projectile-2.8.0.0.20240210.170605.tar.lz | 2024-Feb-10 | 60.2 KiB |
| projectile-2.5.0.0.20210819.81714.tar.lz | 2021-Aug-19 | 63.2 KiB |
News
Changelog
master (unreleased)
Changes
projectile-find-referencesnow honours Projectile's ignore configuration (.projectileand the globally-ignored files/directories) and is scoped via the project's file set, likeprojectile-grep/-ag/-ripgrep. It previously went through the semantic-symref API, which searched the whole tree and ignored that configuration. It also now defaults the prompt from the active region (not just the symbol at point) and no longer carries a dead pre-27 display fallback. The search remains a backend-agnostic textual one; for semantic references use the built-inxref-find-references(which is also scoped to the Projectile project).- Remove the built-in tags support:
projectile-find-tag,projectile-regenerate-tags,projectile-visit-project-tags-table, and theprojectile-tags-command/projectile-tags-backendoptions (along with the ggtags/etags-select special casing). ctags/etags navigation has been largely superseded byxrefand LSP (eglotis built in since Emacs 29). Usexref-find-definitionsdirectly, orprojectile-find-referencesfor project-wide references.projectile-tags-file-nameis kept, since it's still used to exclude a generated tags file from indexing. - Remove
projectile-browse-dirty-projectsandprojectile-vcs-dirty-state. The implementation spun upvc-dirand busy-waited (sleep-for) up to 30 seconds per project across every known project, scraping status strings - slow, blocking, and niche. Use Magit,vc-dir, or a dedicated tool to find projects with uncommitted changes. - Remove the idle timer (
projectile-enable-idle-timer,projectile-idle-timer-seconds,projectile-idle-timer-hook). It existed mainly to re-runprojectile-regenerate-tagson an idle timer, which makes little sense in an LSP/xref world, and it was off by default. Use a plainrun-with-idle-timerif you really want this behavior. - Remove
projectile-commander(anddef-projectile-commander-method), the single-key command dispatcher. It's superseded byprojectile-dispatch, thetransientmenu added in this cycle. The kbd:[s-p m] binding and theC-u s-p pproject-switch prefix now invokeprojectile-dispatchinstead (the prefix falls back toprojectile-switch-project-actionwhentransientisn't installed). - A cold
projectile-find-file(and any command that lists project files) no longer freezes Emacs while the project is indexed under thealien/hybridmethods. The indexing command runs asynchronously and is awaited in a way that keeps Emacs responsive to redisplay andC-g(which aborts the indexing), instead of blocking until it finishes. The resulting file list is identical; only the responsiveness during indexing differs. Controlled by the newprojectile-async-indexing(default on); it has no effect undernativeindexing, in batch mode, or while a keyboard macro runs, all of which index synchronously as before. - Speed up native indexing further:
projectile-index-directorynow reads each directory withdirectory-files-and-attributes, so an entry's type comes from the listing call instead of afile-directory-pstat per file. That stat was a separate filesystem round-trip each, which dominated the walk on large and remote (TRAMP) trees - it's now one round-trip per directory instead of one per file. Symlinks pointing at directories are still followed, matching the previous behaviour. Roughly 40% faster on a local 12k-file tree; the win is far larger over TRAMP. - Speed up native indexing's post-walk step:
projectile-dir-files-nativestrips the project-root prefix with a singlesubstringper file instead offile-relative-name, which paid for anexpand-file-name/abbreviate-file-nameper file.projectile-project-filesalso skips re-relativising the listing when the only directory walked is the project root itself (the common single-directory case). Together that removes roughly two seconds of overhead per 90k files indexed. - #1872: Clarify in the
projectile-register-project-typedocstring and the manual that a list ofmarker-filesmust all be present for a type to match (logical AND), and that a predicate function should be used to match when any one of several files is present. ... ...