Two years of development are behind us, and it's quite exciting to see what we've achieved.

This post started off with a simple patch to finish Upgrade Status for Drupal 6. After revisiting my recent list in Challenges for Drupal and reading Lullabot's take, things still felt incomplete. Thus, I took the time to go through a lot of issues on drupal.org, to take a large step back, and to recall the entire awesomeness we added to Drupal 7.

Drupal 7 is much more.

Note that this list may even be incomplete. Pointers, comments, and feedback is highly welcome.

  • AHAH helper
    Allows Drupal modules to implement AHAH/AJAX functionality without touching JavaScript. Entirely covered by the new AJAX framework in D7, which is based on Earl Miles' CTools.
  • Autoload
    Allows Drupal modules to lazy-load any class that has not been loaded yet. A major performance improvement in Drupal 7, and the only part of the Registry™ that was introduced earlier, but later removed from Drupal 7.
  • Auto Menu Title
    AutomaticMenu
    Auto Menu
    When creating new content, Drupal 7 automatically takes over the title of the content as menu link title, while still allowing you to alter it.
  • Admin:hover
    Block edit
    One of the improvements that will have a major impact on Drupal's evolution and success in the future: Edit links on everything. The new Contextual links module in Drupal 7 allows you to manage page elements from the page you are looking at, i.e. you have direct access to "Edit" and "Delete" pages for content, or "Configure" pages for blocks, "List links" for menu blocks, etc. This applies to all elements that are integrating with Contextual module.
  • Admin Role
    More or less requested since like ever, Drupal 7 finally ships with a sane implementation of an administration role. It's based on regular Drupal user roles, and you can configure any user role to be that administration role. Effectively, any new permissions (and only new) are automatically granted to the configured administration role (if any). You are therefore still able to remove permissions from the role.
  • Block Node Visibility
    Ever wanted to display a block on certain node types only? Drupal 7 allows you to do so. Additionally, the block visibility integration has been de-cluttered to some extent, so as to allow other modules to enhance the visibility settings more easily. (Passing the 4th "code freeze" phase was a bit too late to clean this API up properly... ;)
  • 404 Blocks
    404? What's that, you ask? Not the content I expected on your site? Right! Drupal did not provide any useful information or pointers for totally lost users on "404 Not found" pages previously. Drupal 7 now retains the regular block regions.
  • Content Construction Kit (CCK)
    CCK is in Drupal 7. But not really. The reality is that Drupal 7 introduces the paradigm of "fields". Got that? Fields can be attached to almost everything. You can add fields to nodes, users, taxonomy terms, and any other fieldable "entity" that exists. You could potentially add a taxonomy term to private messages (if privatemsg will implement a message as entity). You can attach any field to any entity. And it even allows to get weird: You can add a taxonomy term field to a taxonomy term. Insane? Insane!
  • Checkbox Validate
    Users have to confirm an optionally required checkbox, such as terms of use or any other usage agreements? Broken in Drupal 6 and below. Drupal 7 finally allows you to make a checkbox required.
  • Comment Display
    Comments on a node were rendered in a obscure fashion in previous Drupal versions: Within a node, but not really within it. Somewhere in between, but also not part of the page. So what? Drupal 7 finally renders comments in a way they are customizable for your theme.
  • Site Configuration Permissions
    Who is an administrator, and who's not? Who can change settings, who can manage modules, who can manage themes? Who can set the site offline, and who can access it if it's offline? Previous Drupal versions summarized all of that in the "administer site configuration" permission. Drupal 7 allows you to grant many administrative permissions more granularly.
  • Content Taxonomy
    Field Taxonomy
    Term fields
    Taxidermy
    In previous Drupal versions, Taxonomy terms (or simplified: categories) could be assigned to content only. In Drupal 7, you have a taxonomy field, which can be attached to any entity. Furthermore, a taxonomy term is a proper entity now, coming with solid API hooks.
  • DBTNG
    Transaction
    Drupal 7 implements an entirely revamped support for databases. Database Layer: The Next Generation (DBTNG) allows Drupal to consistently work with any kind of database. Modules are finally able to properly alter almost any database query, and we can roll back all changes from a "transaction", in case something went wrong during the entire operation.
  • Elements
    Element theme hook
    When requesting a particular page, the callback function in charge for that page returned a HTML string in previous Drupal versions. Almost impossible to alter or customize in any way. In Drupal 7, almost any content that can be rendered, is returned as a "renderable array". If you know the array structure of Drupal forms, you may get the idea. This allows us to consider any element on a page as atomic, alterable, and themeable element. Especially the themeable part matters, if you ever wanted to change the output of something, anywhere.
  • File field
    Upload element
    Upload preview
    Upload module has been removed from Drupal core. And replaced with a much more generic file field. Providing previews after uploading, supporting very large file sizes (on good hosting providers), and of course, having all the goodness of any other field in Drupal 7.
  • Filter Default
    User Default Filter
    Sick of selecting the text format for your content all over again? Drupal 7 now allows you weigh text formats, so as to pre-select a certain text format for a certain user role. Text format? Yes, "input format" is a term of the past.
  • Image
    Image API
    Image Cache
    Image Field
    Drupal 7 is the first Drupal release with native image support. You get an image field. And - you guessed it - you can add an image field to any entity. On top of that, you can configure image styles - which allow you present the same image in a different size/scale/fashion in different locations. Additionally, Drupal developers can now use much more advanced functions to process images.
  • Input Format Permissions
    Permissions to use a text format can now be granted on the regular user permissions page, on which all other Drupal permissions are configured. Good for security.
  • jQ
    jQuery Plugin Handler (JQP)
    jQuery plugin manager
    Drupal 7 allows to bundle multiple JavaScript and CSS files into a "library", which can be loaded by modules in one shot. This covers a lot of use-cases for jQuery stuff. It purposively does not cover external libraries (i.e. code that is not hosted nor shipped with a module), but the Drupal community is already shaping a solution in the Libraries API project.
  • jQuery Cookie
    The jQuery Cookie library is part of Drupal 7 core now. It allows Drupal modules to store and retrieve data from browser cookies via JavaScript. For example, when repeatedly posting a comment on a Drupal 6 site, your user information is already filled in. That information is stored in a browser cookie.
  • jQuery UI
    Drupal 7 brings you the awesomeness of jQuery User Interface. Drupal core doesn't really use it, but there's still a major issue almost ready to be committed (since like months), which at least allows contributed Drupal modules to leverage the power of jQuery UI very easily.
  • JS Alter
    Modules and themes are able to properly alter all JavaScript that is added to a page in Drupal 7.
  • Login Security
    What happens after 5 failed login attempts? Nothing. Meet Drupal 7: Built-in brute-force login protection.
  • Menuless Node Type
    Menu Settings per Content Type
    Does it make sense to have Devel's menu as option for the menu link in the content form? Drupal 7 allows you to select the menus that should be available per content-type. Additionally, all administrative menu links are now contained in a separate menu, so all of those annoying links don't get in your way.
  • Node Preview by Content type
    Preview
    Should previewing a content be required? Is it optional? Or is it entirely pointless? Drupal 7 allows you to configure the "Preview" button behavior per content-type.
  • Permissions API
    Previously, Drupal developers had not really a way to grant, revoke, or change the permissions for a user role. Drupal 7 now ships with a solid user roles and permissions API to do just that.
  • Plugin Manager
    Install and update modules and themes from within Drupal? On-site? Drupal 7 allows you to do that, in a secure way.
  • Poor man's cron
    Drupal Queue
    Most probably the #1 problem for novice Drupal users: "cron". Drupal tells you to set it up. "WTF is a cron?" Drupal 7 allows to automatically run cron (and yes, this feature can be disabled easily). Somewhat related, Drupal 7 also provides a queue system now.
  • RDF
    The semantic web is the search engine optimization of the future. Drupal 7 gets ahead of the entire industry by implementing full support for RDFa all over the place. This means that bots, spiders, and crawlers can easily classify and identify the content on your pages, and precisely figure out the topic and relationship of every single page on your site. Most probably, they will even know more about your content than you do.
  • Seven
    Like it or not, Drupal 7 ships with a dedicated administration theme.
  • Simpletest
    A major change for Drupal 7 is the introduction of automated tests for all functionality. Almost every change that went into Drupal 7 had to be covered by tests. In turn, this means that the first stable release of Drupal 7 will be the most stable release of Drupal in its entire history. And in turn, this means that you can expect a very stable Drupal core and much less bugs. Additionally, contributed modules are slowly catching up on adding and writing tests.
  • Archive::Tar
    Mainly here to extract downloaded modules and themes via Plugin Manager, but also usable by all modules: Drupal 7 allows to extract tar archives.
  • Taxonomy Delegate
    Vocabulary Permissions
    You have multiple vocabularies? And certain users should be able to alter/administer certain ones? Drupal 7 allows you grant user permissions to do just that.
  • Token
    Drupal 7 supports simple string replacements via tokens. The heavily changed and advanced version of tokens in Drupal 7 support recursive, lazy-loading replacements. For example, [node:title] is replaced with the title of a content, and [node:author:name] is replaced with the user name of the author of a content.
  • URL alter
    In Drupal 6 and below, modules like Domain Access and others were incompatible with any other of those modules, or required you to add custom code to settings.php. Drupal 7 allows multiple modules to alter both the incoming and all generated URLs without any hacks.
  • User Cancellation
    User Delete
    Privacy of data matters. Professional sites allow you to cancel your account. At any time. But does Drupal? Yes: Drupal 7 enables you to allow your users to cancel their own accounts. In different and even extensible ways. Whether you need to retain all user data due to legal reasons, or whether you need to delete all user data due to legal reasons, or whether you need to do something in between: Drupal 7 supports you.
  • Vertical Tabs
    Forms in Drupal can get very long. Especially when containing fieldsets. But how often do you really change something in those fieldsets? Drupal 7 introduces the new pattern of vertical tabs. Exclusively for entirely optional form elements, i.e. stuff you can happily ignore when submitting a form in Drupal. A major usability improvement that benefits all Drupal users.
  • View unpublished
    It's weird that you cannot view your own content after submitting it. At least in some use-cases, that's desirable. Drupal 7 allows you to configure whether users should be able to view their own unpublished content after submission.

What. A. List. Apart.

UPDATE (2010-04-17 19:36)

  • Canonical URL
    Shortlink
    If you know some basics about search engine optimization, then you have probably heard of duplicate content. Due to the way URL aliases work in Drupal, many sites are exposing the same content under different URLs - on the system path and on the URL alias(es). Drupal 7 helps you to avoid duplicate content penalties by letting search engines know about the canonical URL of a content.
  • Date Timezone
    In Drupal 6 and below, Drupal implemented a custom timezone handling. Starting with Drupal 7, Drupal relies on PHP5's built-in timezone handling, which provides you many more timezones, and most importantly, support for daylight saving time (DST).
  • Documentation
    Almost the entire API and hook documentation has been moved into dedicated .api.php files in Drupal core. Drupal developers can access that information locally, and the file contents are used 1:1 for Drupal's online API documentation.
  • Edit term
    Taxonomy Intro
    Ever wanted to edit a taxonomy term when looking at its page? Drupal 7 now provides you a tab. Additionally, the taxonomy term description has a text format assigned now, allowing you to use a client-side editor for it.
  • File API
    Storage API
    Drupal 7 ships with an entirely overhauled API for handling and processing of files. Drupal 7 also introduces stream wrappers from PHP5, allowing you to store and access files in many different ways and locations, even remotely. Drupal 7 is the first Drupal release with a proper separation between public and private filesystem, and you can use both at the same time.
  • jQuery Form Update
    Wysiwyg API CCK Integration
    TinyMCE AHAH Integration
    TinyMCE Drag and Drop Integration
    As a result of the community's joined effort on the Wysiwyg module, Drupal 7 contains many improvements that will allow a better integration of client-side editors. Lessons learned: Module duplication sucks. Only if Drupal developers and users are joining forces, we can improve the overall situation. (And no, Drupal 7 does not ship with an editor. And having the experience as one of the Wysiwyg module maintainers, I'm highly opposed to ever do that.)
  • Secure Password Hashes (phpass)
    Starting with Drupal 7, all passwords of users that are stored in Drupal's database are additionally "salted", so as to make it harder to reverse-engineer the user's unencrypted, original, plain-text password.
  • Simple CDN
    Absolute src
    Parallel
    The new File API and handling of page requisites (JavaScript, CSS) in Drupal 7 allows Drupal modules to alter the URLs of files. This allows the Drupal community to work on a dedicated CDN integration solution to boost page loading performance.

Comments

Thanks for the effort of put together all this information ,sun. It's amazing how many improvements have been made for D7.

PS. Review that duplicated sentence in "user delete"

Thanks Daniel, Drupal 7's number of new features is stunning :)
I think that with all this feature in core, the next version of Drupal is going to be something beyond our expectations.

Daniel,

Your blog posts don't show their creation date - a lot of the blocks do, and the main teaser listing, but individual post pages don't.

>Taxonomy Delegate
> Vocabulary Permissions
> ... And certain users should be able to alter/administer certain ones?

It seems I've missed this feature -- where do you define this in D7?

Drupal 7, I am looking forward to meeting you now.

When will Views module be upgraded to D7?

AHAH helper
Allows Drupal modules to implement AHAH/AJAX functionality without touching JavaScript. Entirely covered by the new AJAX framework in D7, which is based on Earl Miles' CTools.

D6 itself already allowed you to write 0 JS. What this module adds, is the ability to no longer write menu callbacks for every AHAH callback. And more, but that's the most important part from a D7 perspective. I doubt this feature is in D7?

Elements
When requesting a particular page, the callback function in charge for that page returned a HTML string in previous Drupal versions. Almost impossible to alter or customize in any way. In Drupal 7, almost any content that can be rendered, is returned as a "renderable array". If you know
the array structure of Drupal forms, you may get the idea. This allows us to consider any element on a page as atomic, alterable, and themeable element. Especially the themeable part matters, if you ever wanted to change the output of something, anywhere.

Elements is not about advanced rendering stuff, but about new form elements. It includes the tableselect and imagebutton form elements, of which only the latter made it into D7, the patch for tableselect still hasn't been committed, unfortunately:
http://drupal.org/node/242962#comment-2553116

So I'm afraid D7 is a bit less awesome than you thought :)

The new AJAX framework in Drupal 7 provides a common default menu callback on the path "system/ajax", which invokes the callback assigned via #ajax. At least in forms, that is. The Examples module contains plenty of AJAX examples.

Not sure what you see on that #tableselect issue, but I see a big fat bold follow-up containing:

I gave this one last read through and then committed it.

;)

1. Wow, very, very good reading, I can't wait for Drupal 7 to be released!

2. A question:

Drupal 7 does not ship with an editor. And having the experience as one of the Wysiwyg module maintainers, I'm highly opposed to ever do that.

Could you elaborate on your reasons? Notice I don't like WYSIWYG editors and am perfectly content with BUEditor, so this is not a hidden request, just genuine curiosity.

3. Any chance Bypass Forced Preview make it to core? Sounds like basic for me.

Thanks for this great post!

Notice I don't like WYSIWYG editors and am perfectly content with BUEditor, so this is not a hidden request, just genuine curiosity.

Exactly for that reason, Drupal core should not ship with a client-side editor.

Note that Wysiwyg module integrates any kind of client-side editor, i.e. not just "WYSIWYG" editors, but also "pseudo-editors" like markItUp or BUeditor.

While the architecture of Wysiwyg module is still evolving (and will see a major revamp soon), the only valid thing to do would be to move Wysiwyg module into core. However, even that would be pretty much undoable, since it merely integrates external libraries, and all of those external libraries are changing too fast, compared to Drupal core's releases.

Drupal core already gained experience with external libraries by including jQuery in Drupal core. But unlike jQuery, any "default" client-side editor would only be used by a fraction of Drupal users.

Therefore, I'll personally veto and won't fix any attempt to move any editor into Drupal core. At least prior to Drupal 9 or 10.

And by that time, Drupal will most probably have much better support for Drupal distributions and installation profiles, so instead of moving Wysiwyg module into Drupal core, it's much more likely to get the module and the client-side editor(s) of your choice automatically downloaded during installation of Drupal.

You could potentially add a taxonomy term to private messages (if privatemsg will implement a message as entity)

It will!

There is already a working patch available for testing http://drupal.org/node/443784#comment-2831988. Still a bit rough though, testing/reviews are very welcome!

Berdir
Privatemsg maintainer

There is already a working version of views for drupal7.

Try it out, and try to find bugs / provides patches.

I've been looking for this type of list for a while. This makes the epic awesomeness of D7 even greater.

I have a suggestion to add to the list:
Taxidermy

Taxidermy

Didn't know of that one - added now, thanks!

Here's another module that could go on the list:
Drupal Queue

Yay, thanks! Added that, too :)

very nice information about Drupal 7, now you placed each point are very useful to Drupal developer... thanks for sharing..

Taxonomy Introduction is another module that will be deprecated by Drupal 7 - you can just use a text field to achieve the same thing.

Thanks! Added Taxonomy Intro to the list.

However, to defend my nitpicker status: The built-in "Description" field of a taxonomy term itself can be used as formatted introduction text. It is also no longer output for taxonomy term links.

hey

check these ones:

Simple Menu Settings
Node Menu Parent

Simple Menu Settings adds a checkbox to enable menu for a content and it is automatically populated. Similar to Auto Menu Title, AutomaticMenu, Auto Menu

Node Menu Parent adds the feature present in D7 Core - select a parent menu entry for a menu added by a content

if i'm not mistaken, Content Display Order feature has also been implemented on Drupal 7 as of at least alpha6.

it provides the CCK field reordering.

has no relation with Display Suite (or other modules like ctools/Panels, Composite Layout, etc), but overlaps with it at a minimum level (only reordering, no support for columns or custom code.

Fantastic finding! :)

Since the original, giant patch was already committed to Upgrade Status, it would be awesome to create an drupal.org issue with all further findings for http://drupal.org/project/upgrade_status

Thanks!

http://drupal.org/project/moduleinfo feature is mostly in D7 core ;)

http://drupal.org/project/comment_upload
http://drupal.org/project/content_taxonomy
http://drupal.org/project/tracker2
http://drupal.org/project/taxonomy_image - it looks like it might get a D7 version for any missing features, but the image field attached to terms gets you the basics.

Also, not a module, but all (I think) performance patches in Drupal 6 Pressflow are in Drupal 7 (although Pressflow will continue in D7 to add new things as they come up).

if i'm not mistaken, functionality is also present in D7 core.

what is does is ask for current password, when editing a user profile.

btw, i patched it to work with phpass module ;)
http://drupal.org/node/598692#comment-3613386

i meant password_change_confirm

along with that, there's password. it upgrades drupal 6 user password hashes with the method from password.inc from D7.

so that module deprecates the older method from phpass

3 more additions, to deal with Teasers as a separate field (mix of CCK / computed field):
deck - works well, maintained
cck_teaser_field - looks abandoned
cck_teaser - looks abandoned

OpenID client AX module was also entirely integrated into Drupal core.

tracker2 is in D7 (and pressflow 6) accordingly to this wiki post
https://wiki.fourkitchens.com/display/PF/Comparison+-+Pressflow+versus+D...

wow. as much as i enjoy developing in drupal, the wysiwyg schizophrenia is an absolute nightmare for first time devs and content managers alike.

you've got to benchmark it against the other option: wordpress. yes, i had to bring it up. but, to be honest, the user isn't loyal - they will use the simplest tool for the job. they just want a bunch of buttons which they can press to add, remove and insert media and the rest is taken care of.

developers don't want to faff around installing and configuring a handful of other modules with ungainly interfaces (i'm looking at imce here) and complicated dependencies. i'd expect a lot more of this to have been included by default in d7 so that users could just start uploading and inserting off the bat. this is what the first time blogger and site owner wants to do.

i was hoping that d7 would be usable and simple for a first time user. i still see it as a "deployed only by a developer" cms.

http://drupal.org/project/already_in allows sensible pages to be provided when logged-in users try to visit user/login, user/register, or user/password— and Drupal 7 already does sensible things for each page rather than Drupal 6's unpleasant access denied. Nice!

This is making it too:

http://drupal.org/project/css_gzip

It's still fun to bump into modules whose functionality made it into core :)

http://drupal.org/project/modalframe

exactly. See

http://drupal.org/node/1068346#comment-4438750

what a counterintuitive default: to have click on dozens of buttons, and then to have to do this repeatedly to try out the look and feel of different editors.

This is a useful page - it helped me to work through the upgrade process to Drupal 7...