You can contribute, and here’s how

September 22nd, 2008

Are you interested in contributing to one of my open-source projects, but don’t know where to start? It is actually my fault, and this blog post will try to serve as an entry point to the interested developers who want to contribute to the success, diversity and adoption of Swing for high performing, modern and customizable user interfaces.

I have a few projects on, but the main two are Substance look-and-feel and Flamingo component suite. And as much as i try to keep up with all the features expected from modern UI libraries, my time is limited. And this is where you can help. And you don’t have to be technical. Below you will find a list of self-contained tasks, some of them technical and others not. I’ve tried to isolate each task so that it can be worked on in a separate flow without disrupting the main development, or requiring deep understanding of the whole library (although that is an advantage, obviously). If you are interested in one or more of these, feel free to contact me on the mailing lists or forums of the projects, or drop an e-mail to kirillcool [at] yahoo [dot] com.

Bug reports

If you see a bug, please do not assume that i know about it. Let me know as soon as possible so that i can fix it before the next release. Since my resources are limited, i can not backport bug fixes to earlier releases (Substance 4.3 is the only exception since it is the last release to run on Java 5). If you test your applications on development drops of Flamingo and Substance, your chances of having a bug fixed in that release are significantly higher.

To report a bug, you can use the issue tracker (preferred), project forums, project mailing lists (although that will most probably annoy other subscribers) or my personal e-mail. Note that sometimes i would ask you to continue the dialog in the public mailing lists if i feel that it is informative enough for the wider participation. Also, try to attach a test case that as simple and short (<100 lines) as possible.


I try to keep the documentation up-to-date with the latest releases and development drops, but something always slips past me. If you see something out of sync, let me know. If you are a first-time or a novice user and have a hard time understanding what the specific project allows you to do, let me know. If you are a power user and find that the documentation is not deep enough, let me know as well. And if you are an English major, proof-reading the existing documentation and fixing even the smallest syntactical and grammatical errors is great!

I always try to structure the documentation in an accessible and visually friendly way. You can see my latest attempt at this right here. If you are a web designer or just have a natural talent for arranging information presentation targeting different user levels, i will be more than happy to hear your input. And if you can design a cool logo, that’s fine with me as well!


The main emphasis of version 4.0 is going to be on closing the gaps in the Ribbon component. As such, i will not be able to do many other things that i would like to see in Flamingo. Here is a list of self-contained tasks that can span a few days if you have them:

  • Right-to-left (RTL) support for all components.
  • High-DPI support for all components.
  • CVS-based breadcrumb bar adapter.
  • SVN-based breadcrumb bar adapter with fully open-sourced implementation (the current one uses SVNKit).
  • Apache VFS-based breadcrumb bar adapter.
  • XML DOM-based breadcrumb bar adapter.
  • ICNS-based resizable icons.
  • Pageable command button panel.

For the examples of existing breadcrumb bar adapters see the org.jvnet.flamingo.bcb.core package. For the examples of resizable icons see the org.jvnet.flamingo.common.icon package.


  • Profile the performance. While release 5.0 is much faster than its predecessors, there’s always room for improvement. Some gains may result in the code becoming uglier, and that is a factor as well. The performance areas include the startup phase as well.
  • Analyze the performance on D3D-accelerated pipeline. The code should not result in performance regressions on the software pipeline.
  • Write custom skins to test the current skinning layer APIs.
  • Take over the development of the Substance plugin for JIDE components. I have intended to do this myself, but i just don’t have the time. Right now it supports two components (button and split button), so the plumbing is in place.
  • Take over the development of the Substance module for NetBeans. Can be used to analyze the performance problems and test a very large Swing application with custom components, renderers and more.
  • Create a Substance module for IDEA. You can win some money in the process as well if you do it in the next few weeks (go to JetBrains’ site for more details).
  • Write translations to additional languages. It’s about 25 entries that have already been translated to 29 languages. If you see a missing language, you’re more than welcome to send me the translated strings.

I only have two things to ask for the code contributions: it should be clean and it must be contributed under BSD license. I will not ask you to assign the copyrights to me, and you will continue to have the full rights to your original code. And nobody wants to get stuck in unmaintainable code :)

So, if you are interested in contributing to Flamingo and Substance in particular, and to the Swing community in general, let your voice be heard and your contribution be seen. I’ve just posted the first drops of Laf-Widget 4.1dev (code-named Juniper), Flamingo 4.0dev (code-named Fainnear), Substance 5.1dev (code-named Panama) and Substance plugins for Flamingo and SwingX.