projectile 
- Description
- Manage and navigate projects in Emacs easily
- Latest
- projectile-3.4.0.tar (.sig), 2026-Aug-10, 1020 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.3.0.tar.lz | 2026-Jul-27 | 178 KiB |
| projectile-3.2.1.tar.lz | 2026-Jul-13 | 148 KiB |
| projectile-3.2.0.tar.lz | 2026-Jul-12 | 148 KiB |
| projectile-3.1.0.tar.lz | 2026-Jul-04 | 120 KiB |
| 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.4.0 (2026-08-10)
New features
- #2148: Add
projectile-switch-sibling-project(s-p n), which offers only the projects related to the one you're in, rather than every project on the machine.- Relatedness comes from
projectile-project-groupsif you've configured it, then from the owner of the upstream remote, then from the leading word of the directory name - seeprojectile-sibling-project-functions. - The remote's owner is what relates projects whose names have nothing in common; an inferred group covering more than
projectile-sibling-max-group-shareof your projects is dropped, since "we're all under the same account" relates nothing.
- Relatedness comes from
- #2151:
projectile-switch-worktreealso offers Jujutsu workspaces, and a jj repository is now identified through its git backing store, so a workspace and the colocated git checkout agree on being the same thing and jj projects get siblings like any other. - #2147: Add
projectile-switch-worktree(s-p W), which offers the other checkouts of the current project's repository, each annotated with whatever tells it apart - the branch for git and Mercurial, the workspace name for Jujutsu.- Git worktrees and separate clones of the same upstream both count as checkouts, since they're the same workflow with and without the plumbing;
projectile-worktree-functionsis where other ways of finding them plug in.
- Git worktrees and separate clones of the same upstream both count as checkouts, since they're the same workflow with and without the plumbing;
- #2138: Better support for OCaml, Erlang and F#.
projectile-run-test-at-pointlearnserlang-ts-mode(EUnit's_test/_test_functions, run asrebar3 eunit --test=module:name) andfsharp-ts-mode(bindings attributed[<Fact>],[<Theory>],[<Test>],[<TestCase>]or[<Property>], run throughdotnet test --filter).- The
ocaml-duneandrebarproject types gained their run, install, package and source/test directory attributes, and a newerlang-mktype covers the other common Erlang build tool. - OCaml deliberately gets no test-at-point rule: its tests are ordinary values registered with Alcotest or OUnit rather than anything the syntax marks out, so there is nothing to recognize.
- #2137: Ship
:file-kindstables for Phoenix, Laravel and Next.js, soprojectile-find-file-of-kind(s-p j) andprojectile-toggle-related-file(s-p J) work in those out of the box - Rails and Django were the only frameworks covered before.- Phoenix keys a resource's modules on the name they share (
user_controller.ex,user_html.ex,user_live.ex), Laravel on the model's class name, Next.js on the app router's directory. - Adds a
nextjsproject type (next.config.jsand friends) to hang the last of those on.
- Phoenix keys a resource's modules on the name they share (
- #2136:
projectile-run-test-at-pointnow knows Ruby (RSpec and Minitest), Rust, Elixir and Java, on top of the Python, Go and JS/TS rules it shipped with.- Ruby is written the same way whichever framework you use, so the project type picks the runner; Java's picks between Maven and Gradle, and takes the class name from the file.
- ExUnit can't select a test by name from the command line, so Elixir tests are addressed as
FILE:LINE.
- #2135: Add
projectile-ignored-project-patterns, the regexp-matching sibling ofprojectile-ignored-projects(exact paths) andprojectile-ignored-project-function(a predicate), so keeping whole areas of a machine out of the known projects doesn't need a lambda. - #2134: Add
projectile-find-changed-file(s-p C), which completes over the files git reports as staged, unstaged or untracked - or, with a prefix argument, over everything that differs from a revision you pick. ... ...