projectile 
- Description
- Manage and navigate projects in Emacs easily
- Latest
- projectile-2.10.0snapshot0.20260429.111805.tar (.sig), 2026-Apr-29, 420 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.0snapshot0.20260429.70940.tar.lz | 2026-Apr-29 | 75.9 KiB |
| projectile-2.10.0snapshot0.20260427.75828.tar.lz | 2026-Apr-27 | 72.6 KiB |
| projectile-2.10.0snapshot0.20260426.113426.tar.lz | 2026-Apr-26 | 72.0 KiB |
| projectile-2.10.0snapshot0.20260310.85858.tar.lz | 2026-Mar-10 | 66.2 KiB |
| projectile-2.10.0snapshot0.20260304.194310.tar.lz | 2026-Mar-04 | 65.7 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.9.1.0.20260213.80255.tar.lz | 2026-Feb-13 | 62.6 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-get-immediate-sub-projectsskips thegit submodule foreachshell-out for git projects with no.gitmodulesfile anywhere up the parent chain. Hot path for monorepos that index the project root often.projectile-discover-projects-in-directorynow usesdirectory-files-no-dot-files-regexpto skip.and..at the C level instead of doing the post-filter in Elisp - matches the indexing walker.- Document the anchored vs
*-prefixed semantics ofprojectile-globally-ignored-directories, thefindfallback's lack of common directory exclusions whenfdisn't available, and howfd/git ls-fileshandle deleted-but-unstaged files differently. - Speed up native indexing on large trees:
projectile-index-directorynow hashes the ignored-files / ignored-directories / globally-ignored-directory-names lists once per indexing call (the per-filemember' scans were O(N*M)), expands dirconfig glob patterns once per directory level instead of once per (file, pattern) pair, and accumulates results into a shared cell so we no longer pay for anapply append' at each recursion level. projectile-remove-ignored(hybrid post-processing) now hashes the ignored-files basenames and pre-splits ignored-dirs into prefix-match and any-segment groups, so the per-file inner loops drop from O(M)seq-somewalks to O(1) hash lookups (or O(segments) for*-prefixed entries).- Hybrid indexing now batches the external command into a single invocation when the project's
.projectiledeclares multiple+keep entries, instead of shelling out once per kept subdirectory. The kept paths are passed to the indexing tool (e.g.git ls-files,fd,find) as positional pathspecs and submodule files outside those subdirectories are filtered out. Resolves the long-standing TODO inprojectile-project-files. projectile-files-via-ext-commandnow accepts an optionalpathspecsargument; entries are shell-quoted before being appended to the command.projectile-dir-files-aliensimilarly accepts an optionalsubdirsargument that threads through.- Document the
hybridindexing method in the manual and add a feature matrix showing which Projectile knobs (dirconfig, global ignores/unignores, sort order, default caching) apply undernative/hybrid/alien. projectile-dir-files-aliennow accepts an optionalvcsargument so the dispatcher can thread through the already-resolved VCS instead of recomputing it. Existing single-argument callers are unaffected.projectile-index-directory(native indexing) now relies ondirectory-files-no-dot-files-regexpto filter out.and..at the C level instead of walking past them in Elisp.projectile-project-root-cachenow keys entries on cons cells ((FUNC . DIR)for per-function results,('none . DIR)for the overall failure marker) instead of formatted strings. This is internal state, but third-party code that reaches into the cache directly will need to update.projectile-parse-dirconfig-file' now returns aprojectile-dirconfig' struct (withkeep',ignore',ensure', andprefixless-ignore' slots) instead of a positional 3-tuple. External callers should use the accessors (projectile-dirconfig-keep' etc.) rather thancar'/cadr'/caddr'.- Soft-deprecate prefix-less ignore entries in
.projectile'. Lines without a+'/-'/!' prefix are still treated as ignore patterns for backward compatibility, but a one-time warning is now shown for each project that uses them. Set `projectile-warn-on-prefixless-dirconfig-lines' to nil to silence.
New features
- #1936: Add
projectile-discard-root-cachecommand to clearprojectile-project-root-cachewithout touching other Projectile caches. Useful after creating or removing a project marker, since the existingprojectile-invalidate-cacheeither also drops the file list cache or prompts for a project depending on context. ... ...