• kiwidoc

Introduction

In a few words, kiwidoc can be described as javadoc on steroids. The main goal is to help software developers quickly find the information about java libraries in a single location:
  • proximity search and typeahead allow you to quickly locate what you are looking for.
  • IDE-style display shows you the relevant information in a familiar format.
  • immediate access to additional information such as library dependencies, manifest, OSGi headers, etc.
  • the private view can provide even more details if you need to dig deeper (in order to, for example extend a library or better understand its internals).

Features

Dynamically linked javadoc
When looking at standard javadoc, classes are linked together within the library. It is also possible, using javadoc, to create links to classes in other libraries, but it requires you to have the source code for those libraries during the javadoc generation phase. kiwidoc automatically links all the libraries it knows about. And, it's even dynamic: if a dependent library gets added to kiwidoc later, the link will automatically be created. As of 1.4.0, the javadoc is pre-rendered which improves the site speed drastically while still preserving the dynamicity when new libraries get added.
Searchable
kiwidoc is completely searchable. You can search javadoc content as well as manifest headers.
Proximity searching
When running a search, the current viewed resource (whether it is a class, a package, etc.) is always treated as the starting point for the search. The search is then expanded outward from that point. This provides very intuitive results that favor items 'closer' to the current resource. For example, if you are currently looking at the class java.util.HashMap (java/j2se/1.5) and you run a search for map, kiwidoc will automatically show you the class java.util.Map (java/j2se/1.5) as the first result, then the following results will be 'close' to this one (for example, other java.util.Map in other versions of the jdk, then it will expand to other libraries).
Typeahead searching
The search box features a typeahead feature on class names, package names and library names for fast access. The typeahead results are sorted using the proximity searching algorithm described previously. This feature makes the site extremely easy to navigate.
Camel case searching
The typeahead searching feature allows you to use only the uppercases in a class name. For example, if you are looking for the class BufferedInputStream, simply enter BIS.
Dynamically generated javadoc
In a similar fashion to the dynamically linked feature, the content of the javadoc is generated dynamically, covering {@inheritdoc} tag and inherited parameter documentation.
Public View vs Private view
kiwidoc allows you to switch between 'public' view and 'private' view at any point in time. 'public' view shows you the public API, while 'private' view shows you additional non-public information (private methods, non exported packages, etc.). Check out the class StringBuilder for a good example of the changes (pay close attention to the inheritance section!).
Display dependencies
When looking at a library you can see its dependencies (direct, transitive and optional being called out separately). Most of the information is coming from the maven repositories, but internally kiwidoc can handle dependencies as long as they are provided.
Manifest view
You can view the manifest of all the libraries indexed (provided there is one). The manifest view is OSGi aware and displays the long headers in a very readable fashion.
OSGi aware
kiwidoc is aware of OSGi and will tell you whether a library is an OSGi bundle or not. Since kiwidoc automatically indexes the manifests, it is easy to find all the bundles by simply searching for Bundle-SymbolicName.
Facetted search
Facetted search automatically categorizes search results, allowing you to narrow your search to just one category.
Easy third party access
All links are following a REST style pattern making it easy for third parties to access kiwidoc information.
Scalable architecture
Scalable architecture means that kiwidoc can be expanded to include a virtually limitless number of libraries.
Bytecode parsing
Even if the source code for a library is not available, kiwidoc can generate basic reference information directly from the bytecode (including, in most cases, parameter names).
IDE Style display
Information is displayed in a familiar way. Icons inspired by those used in Eclipse will also help you feel right at home with kiwidoc.
Not advertising heavy
kiwidoc is a functional reference tool, not a thinly-disguised advertising billboard. You won't see kiwidoc littered with ads like so many other sites.

History

I started the kiwidoc project in early 2009. My blog has more information about the history of the project itself.

kiwidoc as a service went live in August 2009. After 2.5 years of service, I have decided (check out the blog post) to stop the service and instead release it as an open source project. You can find the project now on github.

Credits

Design
Yan Pujante
Architecture
Yan Pujante
Implementation
Yan Pujante
Web Dev
Yan Pujante
Testing
Yan Pujante
Logos and icons
Markus Tuberville
Content editing
Markus Tuberville

Thanks

Special thanks go to Markus Tuberville for the really cool logos and icons (both for pongasoft and kiwidoc): they really make the site look good.

Thanks go to Jean-Luc Vaillant for some ideas and advice as well as allowing me the luxury to work part-time in order to fulfill my dream.

Software

groovy and java
java has essentially been used for the backend. groovy for the frontend (through Grails) and testing.
commons-vfs
This library has been used to abstract the location of the files generated during the kiwidoc processing. It makes it easy to write tests with no file access at all.
jackson
The internal storage format is json and this library has been used to read and write json serialized objects.
asm
For parsing the bytecode.
javadoc
For parsing the source code.
junit
For testing.
bnd
For parsing OSGi headers.
lucene
For the text search engine.
jericho-html
For parsing html.
Grails
For the frontend.
css
For the final rendering.
tagsoup
For filtering improperly formatted javadoc.
gradle
For the build.
maven
To fetch and process the source code and dependencies during the kiwidoc processing.