Raysforge Back

Basically it's this page !
The License is
The programming language is
The Project is
The Source code is
The Subversion checkout URL is

Raysforge is a minimal software forge serving Subversion repositories very much inspired by Google code and SCM-Manager.

I wrote it because I dreamed of having my own software forge since i discovered sourceforge.
And now you can have your own too !
Be it internally in your company or publicly on the internet like me.

I am trying to mimic Google codes simplicity and SCM-Managers ease of use.

Raysforge does not need apache or subversion installed.
Just Java 1.6, Tomcat 7 and MongoDB.


Export as ROOT.war into Tomcat/webapps.
( I will write better installation instructions soon. Until then check this out. )


A very important feature for me was to enable private projects. ( e.g. closed source )
Pure Java.
Very few lines of code.
Public, protected and private projects.
Public, protected and private project code. ( See below )
The code is meant to be extended and customized.
Theme-able incl. Themeroller.
Screen shot gallery.
Project member manager.

Used Technology:

Raysforge uses Java Server Faces ( JSF2 ) as its underlying framework.

JSF2 alone is okay but its real power comes from using 3rd party faces libraries like:
PrimeFaces or RichFaces or ICEFaces.

So this project uses the Milestone 2 of the amazing PrimeFaces 3.0.
( Because of the new p:selectOneMenu and p:galleria tags )

As for data storage after some struggle with EclipseLink and boredom with Hibernate
I decided to use the powerful and schema-less MongoDB.
Additional to the very easy to use MongoDB Java Driver I use Morphia.
To make this clear, this project depends on no SQL DB. Everything,
even the screen shots are stored in MongoDB (GridFS).

To ease some general Java pain I use Project Lombok which turned out
to work great with Eclipse, ManagedBeans and Morphia entities.

For password security I use salted hashes based on the PBKDF2 standard
with over 2000 hash rounds.

Logging is done with my trusty log4J.

Of course the amazing Apache Commons where used wherever I could.

This is all nice and fun, but nothing special, tell us how you got Subversion hosted using only Tomcat !

Ok, fair enough. I have been searching everywhere for a way to host Subversion repositories with Java. Nothing was to be found and still it's hard to find the solution.
Finally this stackoverflow question showed me the way:
SVN via Tomcat and WebDAV as SCM-Manager uses a very obscure project called

svnkit-dav is a pure Java implementation of the subversion WebDAV server component
( mod_dav_svn ) for Apache. ( Thanks guys, you rock ! )

So you basically add this line to your web.xml:
SVNParentPath /data/repos

If you now create some repositories at that location, for example with this:
SVNRepositoryFactory.createLocalRepository(new File(svnParentPath, project.folderName), true, false);
You can use any Subversion client to use the repository like this:

Great, but how did you add repository protection ?

Well, this is where the strength of the Java EE platform comes in, you basically
create a servlet filter. And that's exactly what I did. The servlet filter supports
public, protected and private project code.

Public project code lets anyone checkout the code.

Protected project code means you need to be logged in to Raysforge to be able to checkout the code.

Private project code means the owner needs to add you to the project to be able to checkout the code.

To be able to write to any project you always need to be added to the project as a member.

It really works great and I believe this project really shows the true power of Java
as I have created a great deal of functionality with very few lines of code.
( Read as, the true power of Java are the kick ass amount of amazing libraries ! )

Raysforge is tested to run on Windows and CentOS, Apache Tomcat 7 and Oracle JRE and OpenJDK JRE.

PS: I choose the default theme to be le-frog but you can change that in the menu top left.
( The categories on the left menu don't do anything as of now. )