{"id":13646620,"url":"https://github.com/bbatsov/projectile","last_synced_at":"2025-05-13T17:07:46.138Z","repository":{"id":1594440,"uuid":"2133437","full_name":"bbatsov/projectile","owner":"bbatsov","description":"Project Interaction Library for Emacs","archived":false,"fork":false,"pushed_at":"2025-04-02T07:16:16.000Z","size":7266,"stargazers_count":4073,"open_issues_count":104,"forks_count":580,"subscribers_count":74,"default_branch":"master","last_synced_at":"2025-04-23T23:15:08.580Z","etag":null,"topics":["emacs","emacs-lisp","project-management","projectile"],"latest_commit_sha":null,"homepage":"https://docs.projectile.mx","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"egret-labs/egret-game-library","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbatsov.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"bbatsov","patreon":"bbatsov","ko_fi":"bbatsov","liberapay":"bbatsov","custom":"https://www.paypal.me/bbatsov"}},"created_at":"2011-07-31T19:12:31.000Z","updated_at":"2025-04-21T22:09:28.000Z","dependencies_parsed_at":"2023-11-30T20:33:29.183Z","dependency_job_id":"f13253e6-1d78-42a8-a679-6bc9bccb840c","html_url":"https://github.com/bbatsov/projectile","commit_stats":{"total_commits":1893,"total_committers":402,"mean_commits":4.708955223880597,"dds":0.7263602746962494,"last_synced_commit":"0163b335a18af0f077a474d4dc6b36e22b5e3274"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbatsov%2Fprojectile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbatsov%2Fprojectile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbatsov%2Fprojectile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbatsov%2Fprojectile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbatsov","download_url":"https://codeload.github.com/bbatsov/projectile/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250528899,"owners_count":21445518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emacs","emacs-lisp","project-management","projectile"],"created_at":"2024-08-02T01:03:01.050Z","updated_at":"2025-04-23T23:15:13.829Z","avatar_url":"https://github.com/bbatsov.png","language":"Emacs Lisp","funding_links":["https://github.com/sponsors/bbatsov","https://patreon.com/bbatsov","https://ko-fi.com/bbatsov","https://liberapay.com/bbatsov","https://www.paypal.me/bbatsov","https://www.patreon.com/bbatsov","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=GRQKNBM6P8VRQ"],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"# Projectile\n\n[![Build Status](https://github.com/bbatsov/projectile/workflows/CI/badge.svg)](https://github.com/bbatsov/projectile/actions?query=workflow%3ACI)\n[![MELPA](http://melpa.org/packages/projectile-badge.svg)](http://melpa.org/#/projectile)\n[![MELPA Stable](http://stable.melpa.org/packages/projectile-badge.svg)](http://stable.melpa.org/#/projectile)\n[![NonGNU ELPA](https://elpa.nongnu.org/nongnu/projectile.svg)](https://elpa.nongnu.org/nongnu/projectile.html)\n[![License GPL 3][badge-license]](http://www.gnu.org/licenses/gpl-3.0.txt)\n[![Discord](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/3Cf2Qpyry5)\n\n## Synopsis\n\n**Projectile** is a project interaction library for Emacs.\nIt provides a powerful set of features operating at the project\nlevel, as well as simple heuristics to identify projects.\n\nHere are some of essential Projectile's features:\n\n* jump to a file in project\n* jump to a project buffer\n* jump to a test in project\n* toggle between files with same names but different extensions (e.g. `.h` \u003c-\u003e `.c/.cpp`, `Gemfile` \u003c-\u003e `Gemfile.lock`)\n* toggle between code and its test (e.g. `main.service.js` \u003c-\u003e `main.service.spec.js`)\n* jump to recently visited files in the project\n* switch between projects you have worked on\n* kill (close) all project buffers\n* grep (search) in project\n* replace in project\n* find references in project (using `xref` internally)\n* run shell commands in a project (e.g. `make`, `lein`)\n* support for multiple minibuffer completion/selection libraries (`ido`, `ivy`, `helm`, and the default completion system)\n* automatic project discovery (see `projectile-project-search-path`)\n* integration with the built-in `project.el` library\n\nThere's also a rich ecosystem of third-party [Projectile extensions](https://melpa.org/#/?q=projectile) that add even more features.\n\n---------------\n[![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/bbatsov)\n[![Paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=GRQKNBM6P8VRQ)\n\nI've been developing Projectile for over a decade now (since 2011). While it's a fun\nproject to work on, it still requires a lot of time and energy to\nmaintain.\n\nYou can support my work on Projectile via\n [PayPal](https://www.paypal.me/bbatsov),\n [Patreon](https://www.patreon.com/bbatsov) and\n [GitHub Sponsors](https://github.com/sponsors/bbatsov).\n\n## Projectile in Action\n\nHere's a glimpse of Projectile in action (using `ivy`):\n\n![Projectile Demo](doc/modules/ROOT/assets/images/projectile-demo.gif)\n\nIn this short demo you can see:\n\n* finding files in a project\n* switching between implementation and test\n* switching between projects\n\n## Quickstart\n\nThe instructions that follow are meant to get you from zero to a running Projectile setup\nin a minute.  Visit the\n[online documentation](https://docs.projectile.mx) for (way) more\ndetails.\n\n### Installation\n\n`package.el` is the built-in package manager in Emacs.\n\nProjectile is available on all major `package.el` community\nmaintained repos - [NonGNU ELPA](https://elpa.nongnu.org),\n[MELPA Stable](http://stable.melpa.org)\nand [MELPA](http://melpa.org).\n\nYou can install Projectile with the following command:\n\n\u003ckbd\u003eM-x\u003c/kbd\u003e `package-install` \u003ckbd\u003e[RET]\u003c/kbd\u003e `projectile` \u003ckbd\u003e[RET]\u003c/kbd\u003e\n\nAlternatively, users of Debian 9 or later or Ubuntu 16.04 or later may\nsimply `apt-get install elpa-projectile`.\n\nFinally add this to your Emacs config:\n\n```elisp\n(projectile-mode +1)\n;; Recommended keymap prefix on macOS\n(define-key projectile-mode-map (kbd \"s-p\") 'projectile-command-map)\n;; Recommended keymap prefix on Windows/Linux\n(define-key projectile-mode-map (kbd \"C-c p\") 'projectile-command-map)\n```\n\nThose keymap prefixes are just a suggestion. Feel free to put there whatever works best for you.\n\n### Basic Usage\n\nEnable `projectile-mode`, open a file in one of your projects and type a command such as \u003ckbd\u003eC-c p f\u003c/kbd\u003e.\n\nSee the [online documentation](https://docs.projectile.mx/projectile/usage.html) for more details.\n\nTo get the most of Projectile you also need to enable (and potentially install)\nsome minibuffer completion framework (e.g. `ido`, `ivy` or `vertico`). See\n[this\nsection](https://docs.projectile.mx/projectile/configuration.html#completion-options)\nof the documentation for more details.\n\n\u003e [!CAUTION]\n\u003e\n\u003e Historically `projectile-completion-system` defaulted to `ido`, but this was\n\u003e changed in version 2.3. You may need to enable `ido-mode` in your Emacs\n\u003e configuration if updating from an older version of Projectile.\n\n## Design Goals\n\nIn this section you'll find some notes on Projectile's design goals, that\nhave been upheld since the earliest days of the project.\n\n### Portability\n\nProjectile provide a nice set of features operating on a project level without\nintroducing external dependencies (when feasible). For instance -\nfinding project files has a portable implementation written in pure\nEmacs Lisp without the use of GNU `find` (but for performance's sake an\nindexing mechanism backed by external commands exists as well).\n\n### Simplicity\n\nThis library provides easy project management and navigation. The concept of a\nproject is pretty basic - just a folder containing some special file (e.g. a VCS\nmarker or a project descriptor file like `pom.xml` or `Gemfile`). Projectile\nwill auto-detect pretty much every popular project type out of the box\nand you can easily extend it with additional project types.\n\n### Easy to Use\n\nThe configuration defaults are pretty reasonable and most users\nwill probably never feel a strong need to change them.\n\nAll commands are easily discoverable and are unlikely to surprise you\nwith their behavior.\n\n### Practicality\n\nProjectile tries to be practical - portability is great, but if some\nexternal tools could speed up some task substantially and the tools\nare available, Projectile will leverage them.\n\n### Flexibility\n\nIn the classic spirit of Emacs almost every aspect of Projectile's behavior is\nconfigurable.\n\n## Caveats\n\n* Some operations like search (grep) depend (presently) on external\n  utilities such as `find` or `fd` (version 8.3.0+).\n  * for older `fd` version add `(setq projectile-generic-command \"fd . -0 --type f --color=never\")` to your init-file\n* Commands depending on external utilities might misbehave on the `fish` shell.\n* Using Projectile over TRAMP might be slow in certain cases.\n* Some commands might misbehave on complex project setups (e.g. a git project with submodules).\n* Projectile was mostly tested on Unix OS-es (e.g. GNU/Linux and macOS), so some functionality might not work well on Windows.\n* In Git repositories, deleted files are still shown in `projectile-find-file`\n  until their deletions are staged, due to a limitation of `git ls-files`. If\n  you install [fd](https://github.com/sharkdp/fd) then it is automatically used\n  instead, and does not have this problem. (You can inhibit the use of `fd` by\n  setting `projectile-git-use-fd` to `nil`.)\n\n## Known issues\n\nCheck out the project's\n[issue list](https://github.com/bbatsov/projectile/issues?sort=created\u0026direction=desc\u0026state=open)\na list of unresolved issues. By the way - feel free to fix any of them\nand send me a pull request. :-)\n\n## Contributors\n\nHere's a [list](https://github.com/bbatsov/projectile/contributors) of all the people who have contributed to the\ndevelopment of Projectile (a.k.a. Projectile's Hall of Fame).\n\nJoining this esteemed group of people is only a commit away!\n\n## Changelog\n\nA fairly extensive changelog is available [here](CHANGELOG.md).\n\n[badge-license]: https://img.shields.io/badge/license-GPL_3-green.svg\n\n## License\n\nCopyright © 2011-2025 Bozhidar Batsov and\n[contributors](https://github.com/bbatsov/projectile/contributors).\n\nDistributed under the GNU General Public License, version 3\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbatsov%2Fprojectile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbatsov%2Fprojectile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbatsov%2Fprojectile/lists"}