Problem/Motivation
The new CLI entry point introduced in Drupal core in #3453474 uses drupal as the command name (i.e. vendor/bin/drupal).
While this clear and aligns with the project name, it does not reflect how modern CLIs are typically used in practice. There are concerns about overloading our project name leading to ambiguity, searchability issues, conflicts, and long-term maintainability of the developer experience.
Drupal also has existing CLI history (drush, vendor/bin/drupal, and now-defunct Drupal Console), which shapes expectations around speed, ergonomics, and muscle memory.
Given the importance of this decision and its long-term impact, it is worth discussing whether drupal is the best choice, or if an alternative name like dr should be selected. The goal is to reach consensus before the CLI becomes widely adopted.
Short, official 2-character CLIs are rare but highly effective: they project confidence and a large & stable ecosystem, they become the primary interface, they require no aliasing, and are consistently reinforced across documentation and usage.
Steps to reproduce
N/A
Proposed resolution
Adopt dr as the official CLI command. Work is completed in #3453474: CLI entry point in Drupal Core.
dris a natural evolution fromdrush, Drupal console, andvendor/bin/drupal, preserving familiarity while simplifying the interface, providing a clearer migration story.- It aligns with modern CLI conventions: short, fast, and consistent. (Like Wordpress'
wp, Angular'sng, GitHub'sgh). - It avoids reliance on local aliases, creating a shared and predictable developer experience across docs, scripts, and tooling.
- There is no meaningful namespace collision with existing CLI tools or common system binaries.
- A shorter command reduces cognitive overhead and fits better in constrained contexts (docs, terminals, IDE sidebars, AI-assisted workflows). It leaves room for verbose, namespaced sub-commands and their shorthand aliases all the same.
- Standardizing on
drlocks in a position of project maturity and confidence, and ensures consistency across documentation, scripts, and tooling, avoiding fragmentation from user-defined aliases.
Example real-world usage:
dr cr
dr up
dr deploy
Alternatives considered
drupal(current default)
Clear and explicit, but longer than necessary. Likely to be aliased in practice, leading to fragmented usage across teams.- Canonical + alias approach (
drupal + dr)
Provides a migration path, but splits the interface and reduces consistency across documentation and tooling, not to mention the project name overloading and searchability issues mentioned in the Problem/Motivation section above. - A few others in comments below that have yet to gain traction.
Remaining tasks
- (Follow-ups) Standardize usage in documentation and examples
- (Follow-ups) Ensure compatibility/migration path from existing tooling (e.g. Drush)
User interface changes
N/A
Introduced terminology
CLI command name (e.g. drupal or alternative)
API changes
None
Data model changes
None
Release notes snippet
To do.
Comments
Comment #2
xmacinfoEven though I prefer
drupal, here are two suggestions:1. dmin (contraction of Drupal admin) |
dmin cr1. din (contraction of Drupal admin) |
din crComment #3
amateescu commentedHow about
drush? It has a nice ring to it :)dropwould also be a nice touch.Comment #4
mradcliffeThank you for creating the follow-up.
I reparented this under the meta: #3582246: [meta] CLI in Core community initiative for tracking.
For those who search for drush commands, applying recipes, and quickstart today, what are the common search terms that are used? Is this something that we can get from the drupal.org infrastructure team?
Comment #5
phenaproximaI wasn’t gonna say anything, but I am in favor of…Drush.
That’s been the Drupal shell for 20 years. We know it and love it and it’s everywhere. Is there a reason it can’t just be our old beloved Drush?
Comment #6
xmacinfoI think
drushwill live side by side widhdrupaluntil everything in Drush as been ported over.The current focus is to migrate the most popular Drush commands.
Comment #7
mradcliffeHistorical naming from 2911319: comment #158 concluding about #174 or so (with various other topics being discussed).
Summary: we all fell in line with alexpott’s suggestion and preference to use
drupalbecausedrupal.shhad been around for ages so there was precedent for keeping the name the same. Note the name clash with console no longer applies for Drupal 11+.Comment #8
rymoI propose `drup`. An obvious shortening of drupal, yet there's no existing d.org project. Memorable, easy to type and pronounce. I think this will make it easier for folks to discover, learn, and communicate in shorthand (avoid "which drupal are you talking about?" confusion).
If you need it to have a backronym, there's "Drupal runtime utility program" ...or "Drush replacement utility program" if you're nostalgic.
Bonus: "drup" in Dutch appears to be a colloquial short form of "druppel" (I think it's "drip" vs "drop"?)
Comment #9
mondrake'drux'
Besides being loosely recalling 'drupal executable', it's also resonating with Asterix and Obelix, who were Gauls like Drupal's originators (if I understand correctly) 😊.
OK, don't take this too seriously...
Comment #10
jwilson3If we are starting fresh, I’d argue for making
drthe official command for Drupal-CLI and designing everything around it. It’s short, lightweight, easy to type with one hand, and feels like a natural evolution from Drush and Drupal Console. Tools like WP-CLI (wp) and GitHub CLI (gh) show how much consistency and adoption you get when the short form is the actual interface, not just an alias. It becomes muscle memory quickly, and the whole ecosystem aligns around it, including docs, scripts, code examples.Drupal has more history to account for, but IMO
dris the cleanest long-term path. It’s close enough to Drush to feel familiar, while simple enough to signal a reset. There’s no meaningful namespace collision, and it matches how devs already work: short, fast commands without relying on local aliases. A shorter command reduces cognitive overhead and fits better across docs, scripts, and constrained spaces like IDE terminals and AI-sidebar chats. If the goal is a first-class, modern CLI, committing todraligns the interface with how it will actually be used.When looking farther afield, there actually aren’t that many true 2-character CLIs. That’s what makes them powerful: highly intentional to become the primary interface (not just a wrapper), signals confidence and maturity, unique namespace backed by strong ecosystems, no alias needed, Docs reinforce the short form, results in high adoption.
WP-CLI => wp
Angular CLI => ng
GitHub CLI => gh
Azure CLI => az
Golang => go
Most tools land in:
3–6 chars (npm, sass, ddev, cargo, lando, drush, docker, drupal, gcloud, upsun)
or long names + unofficial aliases (terminus, terraform, platform, kubectl, ansible-playbook)
or worse: php bin/console (symfony), php artisan (laravel)
By choosing
drwe have a singular opportunity to use a unique key sequence and namespace to our advantage and build for typing speed, brevity, clarity, and through strong muscle memory gain a faster adoption rate (and perhaps even increased enthusiasm and contribution rate).Comment #11
xmacinfo@jwilson3 Very good suggestion. I even prefer
drnow. It is short, easy to remember and it makes sense.Feel free to update the issue summary.
Comment #12
jwilson3Awesome. Glad the idea landed well. I took a few liberties updating the IS liberally to advocate clearly for
dr. Hopefully I havent overstepped or offended anyone's other idea.Comment #13
mradcliffeIn order to implement the change there are a few options with various drawbacks:
core/scripts/drupaltocore/scripts/drwithout deprecation because it’s internal and deal with the fallout of mainly core developers, but also recipe developers now who are using the existing commands.Comment #14
jwilson3I'm unsure of the specifics around what is currently in progress. Is the vendored thing a copy of the original file, a symlink, a thin wrapper, or something else? Could the file itself be
core/scripts/drupal-clifor extreme code- and maintenance-clarity and then what gets vendored and therefore documented and used widely isvendor/bin/dr?Comment #15
mradcliffe@jwilson3, the file that is bin’d is a thin wrapper or proxy with file I/O helpers that is written into the directory provided via
bin-dir(default:vendor/bin). There is no mechanism to rename or alias bin'd files, and that feature won’t be implemented in composer itself. The file name is always the same.Comment #16
longwave#13 can
core/scripts/drupaljust call out todr(or if that's not possible, just be an exact copy of it) but issue a deprecation notice up front? Then we can remove it in a future major.Comment #17
mradcliffe@longwave Good point. It does not need to be an exact copy like I thought. I think the following would work.
Comment #18
xmacinfoComment #19
rymoRenamed to dr incorporating #17
Comment #20
dwwSlightly confused. This issue is to bikeshed the name that will be implemented in #3453474: CLI entry point in Drupal Core? Seems like we agreed on
drat this point. Can this issue be closed?Comment #21
xmacinfoOf course! Thank you to everyone who made suggestions.
Comment #23
dwwSaved credit for everyone who participated.
Comment #24
mradcliffeI think that this is still Needs review to give more time for people to review
drand the argument in favor of dr.It is not difficult to switch the name of the command in the merge request for #3453474: CLI entry point in Drupal Core if it needs to be done.
Comment #25
nicxvan commenteddrandpalare both strong contenders.dr is nice because it's two letters, I really like the idea of having a pal to help me though. I think it lends itself to anthropomorphizing which could help with marketing it as a tool.
Three letters isn't that much worse than two. The other thing to test is repeated typing since it will be frequently typed out, they both seem about equal from that perspective.
I lean towards
palComment #26
rymoTab completion noise perspective: before `pal`, the stock install already lands 7 binaries in vendor/bin that start with `p` including one that starts with `pa`. Zero competitors for `d`.
Comment #27
xmacinfoMarketing-wize "dr" can be seen as doctor as well as Drupal.
Sometimes I use Drush as a doctor to hunt down issues.
Comment #28
andypost+1 to
drComment #29
ressaThank you for your run through of strong arguments @jwilson3, which I agree with:
dris a great choice.Comment #30
penyaskitoMinor argument against
dr: issue search in d.org is restricted to at least 3 chars. Mitigated by (hopefully) having a "Component" in issues to filter with.Comment #31
dwwI don't feel super strongly. I don't love
drupalfor this, but could be convinced. I would probably end up aliasing that one.dris not just shorter, but way easier to type (1-hand, 2 keys right next to each other, both on the same side of the keyboard).palneeds both hands, all the way across the keyboard between each key. So I lean towardsdr, but I won't die on this hill.palwould be okay.D.o issue search is going away in O(months). Drupal core issues might be on GitLab before we even hit Phase 2 of this initiative, perhaps even before Phase 1. So I don't think that's a good reason to avoid
dr.Comment #32
smustgrave commentedSo what's needed for this ticket? Documented anywhere.
Comment #33
xmacinfoI think we can close this issue now.
Documentation can be created independently; a whole documentation section will probably be needed.
Not sure if the change record linked to this issue needs an update.
Comment #34
xmacinfoIf we want some targeted feedback…
…we will need to add specific issue tags. We should also know who will officially maintain “dr”.
Comment #35
dwwRe: #34: Good point about formally identifying co-maintainers. See #3590536: Add a MAINTAINERS.txt entry for Drupal CLI
I'm not sure we need all the formal core governance sign-offs for this. Seems from the initiative Slack meetings that everyone involved is okay with
dr. Tempted to move this back to RTBC, but we can leave it NR for now.Comment #36
mradcliffeAdding [policy, no patch]. I think we just fixed this before without RTBC since the changes were already made.
The existing CLI commands do not have a separate topic or area in maintainers.txt, but I think each command falls under their respective maintainers (recipes, cron (no maintainer)).
Comment #37
smustgrave commentedSo can we mark this fixed?
Comment #38
smustgrave commentedGoing to put into RTBC if there’s anything from a governance stand point else this just can be marked fixed I think and release the credit to those
Comment #39
chi commentedThis might be late. But how about
commandername? This is more semantic thendr.Comment #40
kingdutchJust want to voice my support for
drbased on #10 after I previously argued in other places againstpalbefore this issue was opened.It's short, I can easily type it with one hand: dr dr dr dr dr dr dr dr dr dr dr dr dr dr dr dr dr and I think all the two letter examples given are memorable and look great in examples, which want to focus on what's different (the command executed) over what's the same between examples (the name of the CLI):
So lets make
dras ubiquitous as commands likegh.Comment #41
chi commentedWorth noting:
ngis something like an alias for the Angular brand. They usengeverywhere, from prefixes in HTML attributes to conference names. The same applies towpandgh.As for
go, it just happens that the language name consists of the two letters "Go". Unlike these,dris not an alias for the Drupal brand.Btw, if we want to stick to two letters, we also consider the
dpname.Comment #42
gábor hojtsyAs a product manager I think
dris fine.Comment #43
catchdrseems fine to me too, looking forward to typingdr crlet's go ahead and mark this fixed to unblock adding it.