# Changelog

<!-- Entries are one line per item and section headings repeat for every release,
     so the line-length and duplicate-heading rules don't fit this file. -->
<!-- markdownlint-disable MD013 MD024 -->

## master (unreleased)

### New features

- [#2131](https://github.com/bbatsov/projectile/pull/2131): The `projectile-doctor` and `projectile-dashboard` buffers are no longer plain text: section headers, field labels, the project's identity and the doctor's findings are faced by meaning, with the findings colored by severity and sorted so anything wanting action comes first.
  - All the new faces only inherit from standard ones, so themes style them without knowing about Projectile and a terminal without colors degrades to what you got before.
  - `projectile-report-copy` (`w` in either buffer) copies the buffer as plain text, without the faces and buttons - a doctor report usually ends up in an issue.
- [#2130](https://github.com/bbatsov/projectile/pull/2130): `projectile-run-task` now also discovers rake tasks, read out of the project's `Rakefile` and its `.rake` files (in `rakelib`, `tasks` and `lib/tasks`) rather than by running `rake -T`, which would load the whole application. Tasks are qualified with their `namespace` (`rake:db:migrate`) and run through `bundle exec` when the project has a `Gemfile`.

## 3.3.0 (2026-07-27)

### New features

- [#1867](https://github.com/bbatsov/projectile/issues/1867): Add `projectile-per-command-compilation-buffer`, so compiling, testing and running a project no longer overwrite each other's output (`*compilation*<test>`).
- [#2121](https://github.com/bbatsov/projectile/pull/2121): Recognize the subprojects of a monorepo: `projectile-find-file-in-subproject` (`s-p c m f`) scopes file completion to one part of the repository, `projectile-project-subprojects` lists them, and the subproject lifecycle commands now work in any project rather than only where the module's manifest matches the project's own type (`projectile-subproject-markers`).
- [#2120](https://github.com/bbatsov/projectile/pull/2120): `projectile-run-task` now also offers the tasks a project's own tooling defines - npm scripts, Deno tasks, Composer scripts, just recipes, go-task tasks and Make targets - named after the tool that defines them (`npm:build`) and switched off with `projectile-discover-tasks`.
- [#2119](https://github.com/bbatsov/projectile/pull/2119): Add 34 project types that used to come out as generic projects: `node` (a `package.json` with no lock file), `bun`, `deno`, `nx`, `turborepo`, `python-uv`, `python-pdm`, `php-composer`, `php-laravel`, `xcode`, `flutter`, `terraform`, `pulumi`, `helm`, `ansible`, `docker-compose`, `just`, `mise`, `buck2`, `pants`, `gleam`, `babashka`, `scala-cli`, `dub`, `fpm`, `alire`, `foundry`, `godot`, `platformio`, `hugo`, `jekyll`, `zola`, `mkdocs` and `quarto`.
- [#2119](https://github.com/bbatsov/projectile/pull/2119): A project type marker can now be an `(:any "file1" "file2")` clause, so a build file with several spellings no longer needs a predicate function.
- [#2115](https://github.com/bbatsov/projectile/pull/2115): Add `projectile-replace-undo` (`s-p u`), which reverts the last replace applied from the reviewable replace buffer, leaving alone any file whose replaced text has changed since.
- [#2114](https://github.com/bbatsov/projectile/pull/2114): Add project-scoped bookmarks - `projectile-bookmark-set` (`s-p B s`), `projectile-bookmark-jump` (`s-p B j`) and `projectile-bookmark-delete` (`s-p B d`) - which are plain Emacs bookmarks with the completion scoped to the current project (see `projectile-bookmark-scope`).
- [#2113](https://github.com/bbatsov/projectile/pull/2113): Add `projectile-todos` (`s-p s t`), which collects the project's `TODO`/`FIXME`-style annotations (`projectile-todo-keywords`) into the reviewable search buffer.
- [#2112](https://github.com/bbatsov/projectile/pull/2112): Add `projectile-dashboard` (`s-p P`), a buffer summarising the current project - name, root, type, file count, branch and working tree status, most-visited files, tasks and lifecycle commands, each of them a button - which also works as a `projectile-switch-project-action`.
...
...
