Build Status Coverage Status Issue Stats Google Group Join the chat at https://gitter.im/jooby-project/jooby Maven Central Dependency Status ASF2 Twitter @joobyproject

∞ do more, more easily

Jooby a scalable, fast and modular micro web framework for Java.

  • Scalable. Stateless application development.

  • Fast!. Thanks to the most popular NIO web servers.

  • Modular. Make it full-stack via the extensive module eco-system.

  • Simple, effective and easy to learn. Ideal for small but also large scale applications.

  • Ready for modern web, with the awesome and powerful asset module

hello world!

Java:

import org.jooby.Jooby;

public class App extends Jooby {

  {
    get("/", () -> "Hey Jooby!");
  }

  public static void main(final String[] args) {
    run(App::new, args);
  }
}

JavaScript:


var app = jooby();

app.get('/', function () 'Hey Jooby!');

killer features

  • Multi-language. Write your application in Java or JavaScript
  • Scripting programming model. Like express.js, Sinatra, etc.. but also
  • MVC programming model. Like Spring controllers or Jersey resources
  • Multi-server. Including Netty, Jetty and Undertow
  • HTTPS
  • HTTP/2
  • Server-Sent Events
  • Web-Socket
  • Dependency Injection
  • Hot reload for development

requirements

quickstart

Just paste this into a terminal (make sure Java 8 and Maven 3.x are installed):

mvn archetype:generate -B -DgroupId=com.mycompany -DartifactId=my-app -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=jooby-archetype -DarchetypeGroupId=org.jooby -DarchetypeVersion=1.0.0.CR8

You might want to edit/change:

  • -DgroupId: A Java package’s name

  • -DartifactId: A project’s name in lower case and without spaces

  • -Dversion: A project’s version, like 1.0-SNAPSHOT or 1.0.0-SNAPSHOT

Let’s try it!:

mvn archetype:generate -B -DgroupId=com.mycompany -DartifactId=my-app -Dversion=1.0-SNAPSHOT -DarchetypeArtifactId=jooby-archetype -DarchetypeGroupId=org.jooby -DarchetypeVersion=1.0.0.CR8
cd my-app
mvn jooby:run

You should see something similar to this at the end of the output:

INFO  [2015-03-19 21:34:00,365] Hotswap available on: [my-app/public, my-app/conf, my-app/target/classes]
INFO  [2015-03-19 21:34:00,368]   includes: [**/*.class,**/*.conf,**/*.properties]
INFO  [2015-03-19 21:34:00,369]   excludes: []
INFO  [2015-03-19 21:34:00,937] [[email protected]]: App server started in 502ms

GET /             [*/*]     [*/*]    (anonymous)

listening on:
  http://0.0.0.0:8080/

Jooby! is up and running!!!

getting started

exploring the newly created project

A new directory was created: my-app. Now, let’s see how it looks like:

.
├── public
|   └── (empty)
├── conf
|   ├── application.conf
|   └── logback.xml
└── src
    ├── main
    |   └── java
    |       └── com
    |           └── mycompany
    |               └── App.java
    └── test
        └── java
            └── com
                └── mycompany
                    └── AppTest.java

The public folder contains static files like *.html, *.js, *.css, …, *.png files.

The conf folder contains *.conf.

The src/main/java folder contains *.java (of course) files.

The src/test/java folder contains unit and integration tests.

NOTE: The public and conf folders are part of the classpath.

App.java


import org.jooby.Jooby;

public class App extends Jooby { // 1

  {
    // 2
    get("/", () -> "Hello World!");
  }

  public static void main(final String[] args) {
    run(App::new, args); // 3. start the application.
  }

}

Steps involved are:

1) extends Jooby

2) define some routes

3) call the run method

running

Just open a console and type:

mvn jooby:run

The maven plugin will compile the code (if necessary) and startup the application.

Of course, you can generate the IDE metadata from Maven and/or import as a Maven project in your favorite IDE. Then all you have to do is run the: App.java class. After all, this is plain Java application with a main method.

where to go now?

versioning

Jooby uses semantic versioning for releases.

API is considered unstable while release version is: 0.x.x and it might changes and/or broke without previous notification.

This might sounds terrible but isn’t. Any change on the API will be reported by the Java Compiler and it wont take you a long time to fix it.

Finally, API changes can be filtered and displayed it at any time

want to contribute?

  • Fork the project on Github.
  • Wondering what to work on? See task/bug list and pick up something you would like to work on.
  • Write unit tests.
  • Create an issue or fix one from issues.
  • If you know the answer to a question posted to our group - don’t hesitate to write a reply.
  • Share your ideas or ask questions on the jooby group - don’t hesitate to write a reply - that helps us improve javadocs/FAQ.
  • If you miss a particular feature - browse or ask on the group - don’t hesitate to write a reply, show us some sample code and describe the problem.
  • Write a blog post about how you use or extend jooby.
  • Please suggest changes to javadoc/exception messages when you find something unclear.
  • If you have problems with documentation, find it non intuitive or hard to follow - let us know about it, we’ll try to make it better according to your suggestions. Any constructive critique is greatly appreciated. Don’t forget that this is an open source project developed and documented in spare time.

useful links

related projects

author

Edgar Espina

license

Apache License 2

Related Repositories

jooby

jooby

Scalable, fast and modular micro web framework for Java ...

jooby-pac4j-demo

jooby-pac4j-demo

Jooby webapp demo to test the jooby-pac4j security module ...

greeting

greeting

Learn how to build a simple restful web service with Jooby ...

todo-backend

todo-backend

Jooby application for http://www.todobackend.com ...

ceylon-examples-jooby

ceylon-examples-jooby

Examples of the use of Jooby web framework with Ceylon ...


Top Contributors

jknack authchir georgekankava spinscale leleuj ben-manes dajester2013 gitter-badger vbauer

Releases

-   v1.0.0.CR8 zip tar
-   v1.0.0.CR7 zip tar
-   v1.0.0.CR6 zip tar
-   v1.0.0.CR5 zip tar
-   v1.0.0.CR4 zip tar
-   v1.0.0.CR3 zip tar
-   v1.0.0.CR2 zip tar
-   v1.0.0.CR1 zip tar
-   v0.16.0 zip tar
-   v0.15.1 zip tar
-   v0.15.0 zip tar
-   v0.14.0 zip tar
-   v0.11.2 zip tar
-   v0.11.1 zip tar
-   v0.11.0 zip tar
-   v0.10.0 zip tar
-   v0.9.2 zip tar
-   v0.9.1 zip tar
-   v0.9.0 zip tar
-   v0.8.2 zip tar
-   v0.8.1 zip tar
-   v0.8.0 zip tar
-   v0.7.0 zip tar
-   v0.6.4 zip tar
-   v0.6.3 zip tar
-   v0.6.2 zip tar
-   v0.6.1 zip tar
-   v0.6.0 zip tar
-   v0.5.3 zip tar
-   v0.5.1 zip tar