projectile 
- Description
- Manage and navigate projects in Emacs easily
- Latest
- projectile-3.1.0.tar (.sig), 2026-Jul-04, 610 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-3.0.0.tar.lz | 2026-Jul-01 | 93.5 KiB |
| projectile-2.9.1.tar.lz | 2025-Feb-13 | 61.7 KiB |
| projectile-2.9.0.tar.lz | 2025-Feb-12 | 61.5 KiB |
| projectile-2.8.0.tar.lz | 2024-Mar-31 | 59.6 KiB |
| projectile-2.7.0.tar.lz | 2022-Nov-22 | 58.2 KiB |
| projectile-2.6.0.tar.lz | 2022-Oct-25 | 56.6 KiB |
| projectile-2.5.0.tar.lz | 2021-Aug-11 | 63.0 KiB |
News
Changelog
master (unreleased)
3.1.0 (2026-07-04)
New features
- Add declarative "file kinds", letting a project type describe categories of files (e.g. Rails models, controllers and views) via the new
:file-kindskeyword ofprojectile-register-project-type.projectile-find-file-of-kind(j) prompts for a kind and completes over just the project files of that kind.projectile-toggle-related-file(J) generalizesprojectile-toggle-between-implementation-and-test: it jumps to related files of other kinds, jumping straight when there's one, prompting when there are several, and cycling through them on repeated presses.- The
rails-test,rails-rspecanddjangoproject types ship with ready-made:file-kindstables. Related files are keyed by their namespaced path, so a top-levelUsersControllerrelates to the top-levelUsermodel rather than anAdmin::User.
projectile-find-fileandprojectile-find-file-dwimnow rank the files you work with first, ordering completion candidates by how often and how recently you've visited them (with decay).- The ranking is applied through completion metadata, so it works with any completion UI and under every indexing method, including
alien(whichprojectile-sort-ordernever reached). - Controlled by
projectile-enable-frecency(default on); the per-project history is persisted inprojectile-frecency-fileand capped byprojectile-frecency-max-files.
- The ranking is applied through completion metadata, so it works with any completion UI and under every indexing method, including
- #1992, #1587, #1553, #1794: Add named project tasks - shell commands (or functions returning them) that you can run by name.
projectile-tasksmaps task names to commands and can be set globally, per project type via the new:taskskeyword ofprojectile-register-project-type, or per project via.dir-locals.el.projectile-run-task(c x) picks a task with completion and runs it like the lifecycle commands, in a per-task compilation buffer; a prefix argument lets you edit the command first (e.g. to pass ad-hoc arguments).projectile-repeat-last-task(c X) re-runs the project's last task.
- #978: Add
projectile-project-changed-functions, run whenever the current project changes - including implicitly via visiting a file or directory of another project - with the new and previous project root as arguments. - #1442:
projectile-sort-ordercan now be set to a function that receives the list of project files and returns them in the desired order. - #1984: The VCS markers are now customizable via
projectile-vcs-markers, whose order breaks ties between markers in the same directory - so colocatedjj+gitrepositories can be detected asjjby moving.jjfirst. - #1890: Recognize osc (openSUSE Build Service) checkouts:
.oscis now a VCS marker, a top-down-recurring root marker, and globally ignored; file listing uses the generic indexing command. - #1694: Add
projectile-invalidate-cache-all, which invalidates the caches of all known projects at once (handy when commands likeprojectile-find-file-in-known-projectsserve stale results). - #1075: Add experimental opt-in automatic cache updates via filesystem notifications, so files created, deleted or renamed outside Emacs update the cache without a manual
projectile-invalidate-cache.- Enable it with
projectile-auto-update-cache-with-watches; only local, cached projects are watched. - Each project uses one
file-notifywatch per directory, bounded byprojectile-watch-directory-limit. ... ...
- Enable it with