Starting Point: My List of Default ExpressionEngine Extensions, Modules and Plugins
I start each ExpressionEngine site with a much larger bank of add-ons than most (if not all) of the blog posts you have read along this topic. My point of view is that it doesn’t hurt to have them in place in the file system of a website, and if I need them, it’s much quicker to just enable them and get back to work.
I used to keep a fresh ExpressionEngine website install on my machine, with all my favorite add-ons in place in the correct system folders, ready to FTP up to a new dev site. But each time EllisLab updated the ExpressionEngine build, I’d have to build the fresh install all over again.
These days, I keep a folder called ee_files on my system, and in that folder I have these subfolders:
- english
- extensions
- icons
- js
- modules
- plugins
- themes
Discussing the icons and js folders is outside the scope of this article, suffice to say that I use a common set of icons on most sites and drop that folder into the /images/ folder, and the js folder houses jquery plugins that I commonly use.
The english folder holds the english language localization files for all of the ExpressionEngine add-ons that offer them, so there isn’t much to tell about that. This leaves us with extensions, plugins and modules. Below, I’ll list each that I install by default and why.
Extensions
Accessible Captcha - This simple extension transforms the standard ExpressionEngine captcha into a more accessible version in that screen readers and low vision users can process it more easily. As of this writing, this type of captcha is also a little harder to crack than the default one, as the type of Q&A it involves is typically something a bot can’t process. The extension allows you to enter up to 8 questions and answers for use in the captcha. A good example that I typically use is “The colors of the American Flag are red, white and ?”.
Advanced Captcha - I leave this in my default install for times when the client doesn’t want the above Q&A type captcha. This makes the default ExpressionEngine captcha a little more spam proof by adding in more numbers and letters.
Akismet - Akismet is one of the longest running spam prevention tools, and I think it still works pretty well. This will check comments left in your ExpressionEngine install against the Akismet spam algorithms and automatically hold any suspected spam comments in quarantine for approval.
Cloner - This extension comes in handy when you need to fill in a lot of demo entries in a development site. Simply install Cloner and you’ll see a new column in the Edit entries list. Click the ‘clone’ link for the appropriate entry and it gets cloned and you are taken right to the edit screen for the new version. A quick way to make dozens of dummy entries to test with.
Comment Spam Prevention - Like Akismet above, this extension helps to quell comment spam on an ExpressionEngine site.
DC Required Category - Forces the user to select at least one category for every new entry in a given weblog. Very useful!
DC URL Field - A nice little tool that creates a URL text field. It will validate the field as a URL on submission. Also links an icon next to the field to the URL for easy link checking.
Disable News Feed - In the never ending quest to simplify the CP, this extension automatically hides the EllisLab newsfeed on the CP homepage from any user who has CP access.
Edit Tab Ajax - A true must-have. Uses ajax to quickly reload the list of entries on the Edit tab whenever the filters at the top of the page are changed. Really speeds up your time finding entries in the CP.
Entry Notifications - Solspace made a gem with this one. Allows granular customization of email notifications sent out when entries are added or updated in any given weblog. I don’t need it often but its really useful when required.
EZ Category Checkboxes - Turns the category list into one with checkboxes to select each category rather than a multi-select list. Much more user friendly.
Edit Menu - Adds a javascript drop down menu to the Edit tab allowing you to enter the Edit screen already filtered into a specific weblog.
Fieldframe - Brandon Kelly’s killer custom field wrapper. Includes quite a few default field types like radio group, checkbox group and checkbox, and allows people like us to make new fields really easily.
File - Mark Huot’s File extension is probably Titanic of ExpressionEngine- some people love it, some hate it. Me? I love it most of the time. I build a lot of sites with stand alone entry forms and it is still the best choice for file uploads in that situation.
Hidden Weblogs - Allows you to hide certain weblogs from the Edit menu. This can help keep some users from seeing specific weblogs in the CP.
LG Add Sitename - Clients always like to see their name in lights.
LG Htaccess Generator - Automates the process of removing index.php from your URLs. Also allows you to insert other custom htaccess rules.
Low Seg2Cat - Loops through the segments of the current URI, matches them against existing categories, and registers the matching categories as global variables, which you can use in your templates. On a site where you need this, you can’t get by without it.
MD Character Count - Allows you to limit textarea fields in the CP to a specific number of characters. Provides a counter next to the appropriate textarea as well.
MD Dulee Noted - Place informational text and images into a non-editable field within your weblog entry/edit form. Allows you to add any CSS formatting to the field and really works well to divide up long forms into sections.
MD Live Search - Places an ajax search box in the upper right corner of the CP that searches entries.
MD Simple Relation - As opposed to Playa (below), this is the most simple entry relationship tool out there. Just places the entry_id of the related entry into the database, skipping the relationship lookup table.
Playa - The mother of relationship extensions. I think this one is certified to marry you.
Publish Improve - Another extension that allows you to simplify the CP for your clients. Includes quite a few options.
SAEF Enctype - Used in combination with MH File or another SAEF file upload extension, this changes the form attributes to multipart so that file uploads can occur. Don’t forget to make it smarter using Masuga’s modification.
Simplify Edit Table - Another way to simplify the CP. If your site doesn’t use comments, this will hide a few columns on the Edit tab.
SL Freshview Subscribe - If you are a Campaign Monitor fan, this ingenious extension allows you to subscribe new members to a CM subscriber list when they sign up on your ExpressionEngine site.
Plugins
Form Helper - Solspace’s brilliant (and free) Form Helper is your best friend if you are working on a site with stand alone entry forms. It allows you to grab information from existing entries in the database for use in SAEF edit forms, as well as other handy functions.
ImgSizer - Possibly the best add-on around. Resizes and caches images on the fly throughout your site. Once an image is cached, that version is used in the future when the page is loaded, cutting down on load times. The beauty is, your client can upload images as large as they want in the CP, and they always look perfect on the front end thanks to ImgSizer.
LG Replace - I used Reeposition for quite a while, until I ran into a situation where it wouldn’t move the data for me. Luckily LG Replace does exactly the same thing, but a little bit better. This allow you to grab data from the database and store it in one or more variables, and then place it anywhere you want farther down the page (after you have closed out your weblog tag). Extremely useful!
MD Detect Page Type - Analyzes the URL structure to decide if the page is a category list, a non-category list, or a single entry page. Then, show specific content based on what type of page it is.
Pops - I bet most of you have never seen this one. Its a beaut! If you create stand alone entry forms, this allows you to easily grab data from your custom fields and display it in your forms. Some of the functionality overlaps with Form Helper, but Pops is simple and quick to use.
Title - Another hidden gem! Place this on a single entry page and specify which weblog you want, and this plugin grabs the title of the entry with a minimum of overhead.
Modules
Deeploy Helper - Places most of the configuration options for your ExpressionEngine install on a single page where you can easily and quickly edit them without clicking around.
Freeform - A versatile form collection tool that allows you to take forms on your site above and beyond what ExpressionEngine provides in its default system forms.
Fresh Variables - A nice tool where you can store snippets of content for use on your site. These variables are parsed early so they can be used on weblog tags and other functions of your templates.
Reeorder - Allows you to specify a field (and hide it from CP users) that holds the entry ordering data for any given weblog. Then, just enter the Reeorder screen and move entries up and down to create a custom order for them. In your templates, you can now sort the entries by your custom field.
Sitemap - A great tool for automatically generating an XML sitemap of your website whenever entries are added to the system. Also allows you to add static pages to the sitemap.
User - If you need to allow members of a site to add or edit profile information, email addresses, passwords, etc, this is the only way to go. It makes child’s play of allowing members to edit their own information on the front end.
Had Enough?
I’ll reiterate that having all these add-ons in place on a site doesn’t add any overhead to the site’s processing. If you leave them disabled, they don’t hurt the site performance in any way. So there is no reason, if you use an add-on relatively frequently, not to have its files in place on every site you start. It really does save time.
Since Devot:ee launched, I’ve uncovered a few more add-ons that I haven’t placed into my fresh files pile yet, so I’ll probably revisit this post in a little while and add a few more to it.
Until then, I hope you find something new here that helps you get your job done faster and better. I tell everyone who will listen that ExpressionEngine has the most solid and knowledgeable community of developers in the industry, and there is some fine peace of mind knowing that when I turn to these add-ons to extend ExpressionEngine, that they will work well, and that the people behind them will be there to help out if necessary. So, thanks EE community… they can’t stop the bum rush!

22 Comments
posted on May 27, 2009 at 2:12pm by Eric Barstad:
Sweet list, and I like the way you organize your add-ons. I’ve been trying to keep a default install but have run into the same problems you describe (keeping everything up-to-date, etc.). I think I’ll give your way a try.
Also, what about nGen Works’ add-ons? File Field (for Field Frame), Publish Tweaks, and Structure are in my default list.
posted on May 27, 2009 at 2:21pm by Marcus Neto:
It is always interesting to sneak a peek at how others do their work. I never would have thought to just put them all in the folder with EE on my local machine but something like that can save 30 minutes of sifting through when you go to install a new site. Thanks for the peek. I also learned about something I needed LG Replace.
posted on May 27, 2009 at 2:38pm by Lea:
I have my own EE folder, but I’m not as organized as you to install that much by default. Though, in many ways I think it might be better to just have a text list of your default add-ons instead of just file folders, as these guys update pretty often and I find the most silly issues can be solved when you have the latest of all the files, which means local downloads are kind of only good for a short amount of time.
posted on May 27, 2009 at 2:57pm by Sean:
This is a great idea and one that I’m going to incorporate for myself. additonally You’ve listed a few add-ons that I wasn’t aware of.
Great post.
posted on May 27, 2009 at 3:23pm by Erwin Heiser:
Cool, a few here I didn’t know about or never used before. I do something similar to your approach (pimped out EE-install on a local machine) but fully agree, keeping everything up to date can be a full-time job
Great post!
posted on May 28, 2009 at 1:36am by Ian:
Thanks for the list. Some useful ones in there that I’ve not used before.
Out of interest have you come across anything which allows you to remove the requirement for the Title Field and simply use a date instead? This would be hugely useful.
posted on May 28, 2009 at 2:07am by Martin Luff:
Thanks for sharing that. I always find it interesting to browse around lists like that.
Just one point - a number of these items seem to be commercial offerings where you need to pay per installation. If you automatically load them onto all new sites then how do you make sure you licence them as they’re enabled?
posted on May 28, 2009 at 8:48am by Chad Crowell:
@eric: I actually haven’t had occasion to use any of the nGen add-ons yet, but I know they are highly recommended.
@lea: I keep a lot more add-ons than this on my hard drive, but these are the ones I always place into a fresh EE install. Between the forums, twitter and other channels, I am typically pretty up to date with add-on updates, so this typically isn’t an issue. But, once in a while it does bite me.
@ian: That is an interesting request. I bet you could coerce Brandon Kelly into figuring that one out.
@martin: I certainly pay for all commercial add-ons that I use in a site. Uploading the files for convenience is not the same as activating them and using them within a site. How do I make sure? I’m smarter than a 5th grader
posted on May 28, 2009 at 1:41pm by Martin Luff:
Sorry, I wasn’t trying to suggest otherwise
I should have given a few more details. We have a single project where we could eventually have 200+ EE installations - some (but not all) of which qualify under the free core licence. We’d need a pretty good system in place (possibly software-based and automated) to track paid modules on each of those installs if we were to roll out all those additions across the board (but it would be attractive in many respects to have that sort of arrangement). I simply wondered if you’d come up with a particular way of working or system for tracking all those add-ons across a large number of installations.
Thanks again for putting that all together.
posted on May 28, 2009 at 1:44pm by Chad Crowell:
@martin: No, I don’t have any situations with any need for tracking. My company is usually working on less than about 3-4 EE projects at a time so tracking isn’t much of an issue here. I hope you can figure something out- sounds like a bear of a project!
posted on May 28, 2009 at 4:17pm by Ben Carlson:
Thanks for offering up this kind of approach, going to give it a shot on my EE installs from here on out.
posted on May 28, 2009 at 5:29pm by Sean:
One that I would definitely add to this list is trunchtml by utilitEEs
posted on May 29, 2009 at 1:07am by Ian:
@Chad I quizzed Brandon as to whether he knew of a way to remove the requirement for the title field in posting from a SAEF via a plugin or other method but unfortunately he couldn’t come up with anything.
It looks like more of a hack or workaround may be required although I’m slightly surprised that no-one else has come up against a similar issue in the past and solved it with a plugin of some description. It seems like such a simple requirement.
posted on May 29, 2009 at 5:12am by Jim:
If you’ve got a client who needs a wysiwyg editor, let me recommend epEditor from Electric Putty. It’s fast and light, is easily configurable via the module cp, and works a treat with nGen’s Structure module.
posted on May 29, 2009 at 9:34am by Chad Crowell:
@ian - is there anything wrong with just making the title a hidden input and assigning it a value like the date or something?
posted on May 29, 2009 at 10:37am by Ian:
@Chad - I’ve played with using the Default Entry Title to automatically assign a title and hide the field from the SAEF. This creates something like:
default_entry_title_1
default_entry_title_2
default_entry_title_3
default_entry_title_4
etc…
This is fine but it hits a snag when you reach 50 entries when you get the following error:
An entry already exists with this URL title. URL titles must be unique.
So you then manually have to go in, change the default entry title and start it all over again. This particular install will have over 32 weblogs with high numbers of entries so doing that manually for each one and only after an error isn’t a practical option.
An auto entry of the date may work though but because each entry title needs to be unique it may need the hours and minutes included too in the case that more than one entry is posted per day. Would you propose using some PHP to insert it into the hidden field? And would this be done in the SAEF or the Default Entry Title field of the blog?
posted on May 29, 2009 at 10:54am by Chad Crowell:
I’ve never used default entry titles.
In your SAEF, if you could do something like:
<input type="hidden" name="title" value="Some Textual Indicator {current_time format='%D, %F %d, %Y - %g:%i:%s'}" />I’d also recommend placing use_live_url=“no” in the EE form call. This will save a ton of JS code from being inserted into the page by EE. It will just build the url_title when the entry is created.
posted on May 29, 2009 at 11:17am by Ian:
Yeah default entry titles are a good option but unfortunately the limitation I mentioned isn’t listed in any of the documentation so you only know its a problem when you stumble across it.
Of course. It’s possible to insert it simply by using the {current_time} tag. Even simpler than the PHP method. I think that method may be just what I need. Easy to implement across all blogs and doesn’t have the limitations the default entry title does.
I’ll give it a shot. Thanks! And apologies for semi-hijacking this post and turning it into a technical support discussion.
posted on May 29, 2009 at 11:26am by Chad Crowell:
No worries Ian, we’re all here to learn. Good luck!
posted on July 28, 2009 at 2:13pm by Dave:
Thanks so much for this list, it’s immensely useful, and the descriptions are fantastic
posted on July 31, 2009 at 3:30am by cheap travel deals:
Thanks for the coding…it really did sort my problem.
posted on December 12, 2009 at 4:17am by Leevi Graham:
Thanks for including a couple of LG addons! For those reading you can find my full list of ExpressionEngine extensions, modules & plugins here.
Leave a Comment