Summer of Code Project Ideas
Important: See the Dojo Summer of Code homepage for lots of other useful information, including FAQs, what should be in your application, the coding test, and where to get help.
Charting Improvements
dojox.charting is already pretty impressive, lets make it the #1 Javascript charting engine!
- Time series support
- Multi-axis support
- Better integration with dojo.data
- New chart types (bubble, radar, boxplots, etc)
- Annotations to data points
- Improve Adobe AIR support
- ...
Readability Module
Be able to assess input text based on how well it can be read by normal people - particularly useful for content management systems. There are a number of different ways of measuring readability of text.
- Implement a number of the algorithms.
- Figure out how to integrate them with Dojo's i18n language support.
- Have some ways of visualising the scores.
- Integrate it with dijit.Editor, dijit.Textarea, and normal textarea nodes.
- ...
Markup Previews
There are a number of widely used markup languages available today, and it would be great to provide client-side previews. Then people can easily check they've got it right without round-tripping to the server.
- Markdown, Textile, Trac-markup, others - there are heaps!
- A plugin-based way to just load a single one
- A widget-based way to preview them, ideally side-by-side editing
- Some way of integrating markup help ("How do i do a list?")
- Integrating with dijit.Textarea and normal textarea nodes
- ...
Build Tool Improvements
Dojo already has a widely used and very powerful build and packaging system.
- Examples for conditional compilation
- Being able to set build constants (eg. version numbers)
- Examples and support for CSS building
- Stripping out logging messages (eg.
console.debug()) - Improve x-domain support, making
requireIf()and other clever stuff work. - Integrating js-lint style analysis
- Stats on analysing how much space/bandwidth is being saved
- ...
Automated Test tools
Power-up the DOH framework! Cross-OS and cross-browser, so we can provide better QA without requiring an army of people. And making it work better for widget testing! These are some pretty hard and challenging tasks.
- Use a framework like Windmill or Selenium-RC.
- Having some way of kicking off tests, monitoring, and reporting the results
- Use the DOH client-side test code
- Integrating this into Dojo's nightly builds and other infrastructure
- Making it easy for someone to run a similar system for their own Dojo applications on their own network
- Improving DOH's support for widget testing so we can create automated widget tests (this might be a whole project by itself)
- ...
Real OpenGL 3D in the browser
There is now support (to be released in FF3+1) that supports 3D GPU code in the browser. Basically, write some code in a tag directly in the HTML page, and your code is passed straight into the GPU for executing. Opera and Webkit are following closely behind. How could we integrate this into Dojo GFX? What client-side tools or support can build into Dojo to make 3D development easy in the browser. You'll need to be very comfortable with OpenGL and 3D development.
Improved Developer Tools
Development tools and debugging tools for Javascript aren't the best, which makes it hard for Dojo users. These will be quite complex projects.
- Firebug supports extensions, could we use that to...
- have better Dijit support in the browser?
- visualise which nodes have events connected?
- decode XHR, iframe, JSONP responses so its easy to know whats happening?
- view & search API information (method parameters & descriptions), expanding on Neil's dojox.help demo?
- We have a Firebug-Lite for use in Safari, IE, and Opera. Can we make it better? Having some ways to explore variables, or fire up the browser's DOM inspector would be really handy.
- Profiling javascript code is tricky. Can we make some tools that allow developers to profile part/all of their code in a simple way
Rails/Django/Smarty/JS? helpers
Rails has helpers to make AJAX easier for Prototype built-in. How can we make similar tags/helpers for Dojo users? Can we do it for other platforms like Django or Smarty? You'll need to have worked with server-side frameworks and understand what the developers and designers there are looking for.
Update: For Rails, this is underway already at d-rails (IRC #d-rails on Freenode)... there is an alpha due out in a week or so, and Bob is looking for more help. This is an early stage project that will grow and change quickly, so you'll need to be on your toes. As a starting point, you could think about how to enable dijit widgets in a nice rails-friendly way.
Javascript interface to the Flare Visualization Toolkit
Flare is an open source toolkit written in ActionScript3 for doing advanced visualizations. It'd be great to expose this functionality to Dojo applications in a consistent way and clean way.
- Dijit widgets for each of the various packages
- Integration with dojo event handling
- Integration with dojo.data stores
- There may be some work kicked off pre-SoC on some of this, but there will be plenty left
Improving Internationalization
Internationalization, or i18n, is the process of making an application flexible to work in different languages and respect different conventions and customs. Dojo has one of the only Javascript i18n frameworks in dojo.i18n, but it could be a lot better.
- Support for GNU gettext .PO files across dojo.i18n, including parsing source and templates to pick up strings. This will allow translators to use common tools for their work.
- Adding support for i18n into dojox.dtl - a Javascript implementation of the Django Template Language. See also Django's i18n docs.
- Rewriting in Javascript and improving the Java JS2XLF tool that converts our translation files to & from the standard XLIFF format to make translation processing easier.
- Figure out how to add locale-specific code into the i18n framework (see the readability project above), without freaking out non-technical translators.
- ...
Mini-projects (a la jQuery) with dojo.behavior
There are lots of lists of small, popular bits of code written for jQuery. It would be nice to see:
- dojo.behavior used to do "behavior-based design".
- A lot of small behaviors to do various tasks (see above links to see some examples).
- Each supported by a tutorial and demo
- Hopefully aid the community in being able to do the same sort of tasks using this style.
Accessibility (a11y)
Dojo has a mature accessibility framework and we want all the core Dijit widgets ally-enabled, and as many from dojox as possible.
- Calendar popup
- CSS improvements for keyboard focus and high contrast modes
- Grid - this will require a lot of effort and plenty of experimentation as to how enable the enormous feature set of the grid.
- Improving test harnesses for a11y - DOH? Windmill? Selenium? something else?
- Update an open source wiki to use Dojo! This would enable the wiki to be accessible and give Dojo some additional exposure!
Still haven't seen something that pushes your buttons?
Have a look through the dojox components - most have big possibilities for expansion or improvement. Each dojox component has a README file, and many have a todo list written up in there which could serve as a starting point to a SoC project.
Otherwise, feel free to add a comment with your own ideas!
- Printer-friendly version
- Login or register to post comments
- Subscribe post

The most useful (to me)
The most useful (to me) improvement in dojo would be for the Build Tools to have an option to create a single (or few) .js file(s) for deployment with a stable application. Today, unless I'm missing something, the choices include:
1. Do a custom build and deploy 20MB of dojo files.
2. Do #1 and manually, through trial and error, and many hours, finally determine the minimum set of files that can be deployed and have the application still operate correctly.
3. (Future, hopefully) Deploy 1-5 files, that include all the dojo that is needed for your application, all files shrinksafe'd, de-commented, etc.
It would seem #3 could be done programmatically, probably much more accurately, than hours spent in educated guesses and trial and error.
I realize there are some variations in what will be needed depending on browser-type, etc., so just include whatever choices dojo would make in those cases.
If the #3 dojo distribution could be reduced even to 5 MB, that would be a great improvement over the current distribution.
I've read a few posts that say 1) just include your custom build and maybe a few css files, or 2) go through and delete files you find you won't need (but this is an unsupported distribution). 1) doesn't seem to be correct from my attempts. 2) I tried, but it took hours, and I finally gave up as more and more files were needed to display/operate properly.
Frank Fortson
My wish list More Widgets -
My wish list
More Widgets
- Tagging widget. Shows tags like GMail labels with a small cross button. Uses a InlineEditBox style addition/deletion of tags. Use a store to provide auto-complete for auto-existing tags
- Remotely loading tooltip. I have something here which should be in Dojo trunk (after polishing) http://nileshbansal.blogspot.com/2007/09/enhanced-ajaxified-tooltips-usi...
- And many more. Widgets are very helpful re-usable pieces, that one can quickly mix together to build full application. I am sure there are many common tasks we dont have dijit widgets for. I like Toaster and Rating from dojox for example.
More Documentation
The documentation has improved a lot over time, but it still needs work.
- Write more info in the book
- Add more examples. Link from the book's widget page to its test page on http://archive.dojotoolkit.org/nightly/dojotoolkit/ which has a tons of very useful examples
- Link pages from the book to the API at redesign.dojotoolkit.org
- Work on the Demo section. I remember, Dojo site had a very good demo page in old 0.3.0 days, where 10-15 widgets were displayed.
Partial server-side execution
Creation of most dijit widgets changes the DOM by adding some more HTML to the page. Tooltop for example, creates a dummy node for a master tooltip, which is hidden initially. This basic parsing of dijit widgets can be done on server side, instead of client side. This will reduce the client's page load time. When a page with a lot of Dojo loads, the page looks like a mess for half a second before it loads, as the DOM is totally changed. Server side execution will remove that.
More Integration with DWR
- Now that its part of the same foundation :)
Documentation
Hey Nilesh, thanks for writing. It's a good list.
Unfortunately Google will only fund coding, not documentation. We might be able to get the development of demos funded but we'll have to see.
And just to add to the list
And just to add to the list of the widgets wish-list:
- Dojo charting can add something for drawing graphs. A user basically throws in a network structure, with a list of nodes and edges, and Dojo uses some sort of visualization and layout support. I am not sure how easy is it to do so in Javascript (for Java see http://www.graphviz.org/ or http://www.prefuse.org/)
- By tagging widget in parent post, I was referring something similar to http://ajaxian.com/archives/facebook-style-input-box
- Something like HighlightJS (http://vikjavev.no/highslide/) would be a great addition. May be the dijit.Dialog can go Lightbox style.
- This is really far-fetched but, widgets like http://simile.mit.edu/timeline/ or http://simile.mit.edu/timeplot/
- GWT-EX has some good demos. For example, the ImageChooser at http://gwt-ext.com/demo/#imageChooser
- A glider (http://www.dynamicdrive.com/dynamicindex17/featuredcontentglider.htm). I think, Dojox has something similar.
Wish List
- better examples: I know you are already working on this but maybe this could be used to accelerate the examples. The ones provided by Ext-JS are pretty cool including something like the Showcase app mentioned above (ImageChooser), specifically drag and drop of tree nodes or a portal demo like Google.com/ig or even a file upload example.
- add to the base plug-ins for the rich text Editor widget along the lines of Ext-JS and TinyMCE e.g. insert image, insert table, spell checker
- Customisable handles for resizing 8 ways of a rectangular container
- Support drawing connectors (lines) between containers using drag and drop and have the connector snap to an anchor point. Then when the containers are moved (using drag and drop) the connectors follow.
- rubber band selection of multiple objects to then move using drag and drop as a group.
- Shuffle widget: 2 lists/trees with the <<, <, >, >> and Up, Down buttons to select one or more items from a list and resequence them (also support drag and drop).
dojox.offline integration with iPhone Safari JavaScript Database
How about dojo.offline support for the Safari JavaScript Database (http://developer.apple.com/webapps/docs_iphone/documentation/iPhone/Conc...), giving developers offline access on the iPhone and Safari browser, without Google Gears.