Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,35 @@ javalinThreeVersion: 3.13.13
javalinFourVersion: 4.6.7
javalinFiveVersion: 5.6.4
javalinSixVersion: 6.7.0
javalinversion: 6.7.0
javalinversion: 7.0.0
slf4jversion: 2.0.17
repourl: https://github.com/javalin/website
description: Javalin - A lightweight Java and Kotlin web framework. Create REST APIs in Java or Kotlin easily.
url: "https://javalin.io"
baseurl: "" # the subpath of your site, e.g. /blog

defaults:
- scope:
path: "_posts/news/pre-3.0"
values:
noindex: true
sitemap: false
- scope:
path: "_posts/news/pre-4.0"
values:
noindex: true
sitemap: false
- scope:
path: "_posts/news/pre-5.0"
values:
noindex: true
sitemap: false
- scope:
path: "_posts/news/pre-6.0"
values:
noindex: true
sitemap: false

# Build settings
markdown: kramdown
sass:
Expand Down
91 changes: 91 additions & 0 deletions _includes/jsonld.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
{% if page.splash %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Javalin",
"description": "A simple, lightweight web framework for Java and Kotlin. Built on top of Jetty, runs on Java 17+.",
"url": "https://javalin.io",
"applicationCategory": "Framework",
"programmingLanguage": ["Java", "Kotlin"],
"operatingSystem": "JVM",
"license": "https://www.apache.org/licenses/LICENSE-2.0",
"sameAs": "https://github.com/javalin/javalin",
"author": {
"@type": "Organization",
"name": "Javalin",
"url": "https://javalin.io"
}
}
</script>
{% elsif page.title %}
{% capture page_description %}{% if page.description %}{{ page.description }}{% elsif page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}{% endcapture %}
{% capture canonical_url %}{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}{% endcapture %}
{% if page.layout == 'blogpost' or page.layout == 'news' or page.layout == 'tutorial' %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": {{ page.title | jsonify }},
"description": {{ page_description | strip | jsonify }},
"url": {{ canonical_url | jsonify }},
"image": "https://javalin.io/img/javalin.png",
"inLanguage": "en",
{% if page.date %}"datePublished": "{{ page.date | date_to_xmlschema }}",{% endif %}
{% if page.author %}"author": {
"@type": "Person",
"name": {{ page.author | jsonify }}
},{% else %}"author": {
"@type": "Organization",
"name": "Javalin",
"url": "https://javalin.io"
},{% endif %}
"publisher": {
"@type": "Organization",
"name": "Javalin",
"url": "https://javalin.io",
"logo": {
"@type": "ImageObject",
"url": "https://javalin.io/img/logo.svg"
}
}
}
</script>
{% else %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"name": {{ page.title | append: " - Javalin" | jsonify }},
"description": {{ page_description | strip | jsonify }},
"url": {{ canonical_url | jsonify }},
"image": "https://javalin.io/img/javalin.png",
"inLanguage": "en",
"about": {
"@type": "SoftwareApplication",
"name": "Javalin",
"applicationCategory": "Framework",
"programmingLanguage": ["Java", "Kotlin"],
"url": "https://javalin.io",
"sameAs": "https://github.com/javalin/javalin"
},
"author": {
"@type": "Organization",
"name": "Javalin",
"url": "https://javalin.io"
},
"publisher": {
"@type": "Organization",
"name": "Javalin",
"url": "https://javalin.io",
"logo": {
"@type": "ImageObject",
"url": "https://javalin.io/img/logo.svg"
}
}
}
</script>
{% endif %}
{% endif %}


2 changes: 1 addition & 1 deletion _includes/landing.css
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ header.top-nav-header nav ul.top-nav li a:hover {
}

.bluepart.blackpart .multitab-code {
max-width: 590px;
max-width: 640px;
}

.bluepart .multitab-code {
Expand Down
4 changes: 2 additions & 2 deletions _includes/landing/section-4-server-and-api.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
config.http.asyncTimeout = 10_000L;
config.staticFiles.add("/public");
config.staticFiles.enableWebjars();
config.router.apiBuilder(() -> {
config.routes.apiBuilder(() -> {
path("/users", () -> {
get(UserController::getAll);
post(UserController::create);
Expand All @@ -35,7 +35,7 @@
config.http.asyncTimeout = 10_000L
config.staticFiles.add("/public")
config.staticFiles.enableWebjars()
config.router.apiBuilder {
config.routes.apiBuilder {
path("/users") {
get(UserController::getAll)
post(UserController::create)
Expand Down
16 changes: 8 additions & 8 deletions _includes/landing/section-5-community.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<div class="stat-icon">
<i class="fa-solid fa-download"></i>
</div>
<div class="stat-number">1M+</div>
<div class="stat-number">2M+</div>
<div class="stat-label">Monthly downloads</div>
</a>
<a href="https://github.com/javalin/javalin/network/dependents" target="_blank" class="stat-card">
Expand All @@ -19,28 +19,28 @@
<div class="stat-icon">
<i class="fa-solid fa-star"></i>
</div>
<div class="stat-number">8.1k</div>
<div class="stat-number">8.2k</div>
<div class="stat-label">GitHub Stars</div>
</a>
<a href="https://github.com/javalin/javalin/commits/master" target="_blank" class="stat-card">
<div class="stat-icon">
<i class="fa-solid fa-code-commit"></i>
</div>
<div class="stat-number">2,396</div>
<div class="stat-number">2,466</div>
<div class="stat-label">Commits</div>
</a>
<a href="https://github.com/javalin/javalin/pulls?q=is%3Apr" target="_blank" class="stat-card">
<div class="stat-icon">
<i class="fa-solid fa-code-pull-request"></i>
</div>
<div class="stat-number">1,141</div>
<div class="stat-number">1,163</div>
<div class="stat-label">Pull Requests</div>
</a>
<a href="https://github.com/javalin/javalin/graphs/contributors" target="_blank" class="stat-card">
<div class="stat-icon">
<i class="fa-solid fa-users"></i>
</div>
<div class="stat-number">199</div>
<div class="stat-number">202</div>
<div class="stat-label">Contributors</div>
</a>
<a href="https://discord.gg/sgak4e5NKv" target="_blank" class="stat-card">
Expand All @@ -54,14 +54,14 @@
<div class="stat-icon">
<i class="fa-solid fa-code-fork"></i>
</div>
<div class="stat-number">632</div>
<div class="stat-number">638</div>
<div class="stat-label">Forks</div>
</a>
<a href="https://github.com/javalin/javalin/releases" target="_blank" class="stat-card">
<div class="stat-icon">
<i class="fa-solid fa-tag"></i>
</div>
<div class="stat-number">153</div>
<div class="stat-number">154</div>
<div class="stat-label">Releases</div>
</a>
<a href="https://github.com/javalin/javalin/issues" target="_blank" class="stat-card">
Expand All @@ -72,5 +72,5 @@
<div class="stat-label">Open Issues</div>
</a>
</div>
<p class="community-stats-date">As of November 2025</p>
<p class="community-stats-date">As of February 2026</p>
</div>
12 changes: 6 additions & 6 deletions _includes/macros/gettingStarted.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
import io.javalin.Javalin;

void main() {
var app = Javalin.create(/*config*/)
.get("/", ctx -> ctx.result("Hello World"))
.start(7070);
var app = Javalin.create(config -> {
config.routes.get("/", ctx -> ctx.result("Hello World"));
}).start(7070);
}
{% endcapture %}

{% capture kotlin %}
import io.javalin.Javalin

fun main() {
val app = Javalin.create(/*config*/)
.get("/") { ctx -> ctx.result("Hello World") }
.start(7070)
val app = Javalin.create { config ->
config.routes.get("/") { ctx -> ctx.result("Hello World") }
}.start(7070)
}
{% endcapture %}
{% include macros/docsSnippet.html java=java kotlin=kotlin %}
19 changes: 19 additions & 0 deletions _includes/macros/gettingStarted6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{% capture java %}
import io.javalin.Javalin;

public static void main(String[] args) {
var app = Javalin.create().start(7070);
app.get("/", ctx -> ctx.result("Hello World"));
}
{% endcapture %}

{% capture kotlin %}
import io.javalin.Javalin

fun main() {
val app = Javalin.create().start(7070)
app.get("/") { ctx -> ctx.result("Hello World") }
}
{% endcapture %}
{% include macros/docsSnippet.html java=java kotlin=kotlin %}

21 changes: 0 additions & 21 deletions _includes/macros/gettingStarted7.md

This file was deleted.

55 changes: 30 additions & 25 deletions _includes/notificationBanner.html
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
<script>
// const notificationId = "javalin-6-released";
// const hasBeenDismissed = localStorage.getItem(notificationId + "-dismissed") === "true";
// const pageLoadCount = parseInt(localStorage.getItem(notificationId + "-count") || 0);
// localStorage.setItem(notificationId + "-count", (pageLoadCount + 1).toString());
// if (!hasBeenDismissed && pageLoadCount >= 0) {
// document.write(`
// <div id="notification-banner">
// <h1>Javalin 6 is out!</h1>
// Javalin 6 stable is finally here!
// Read more in the <a href="/news/javalin-6.0.0-stable.html">release post</a>.
// </div>
// `);
// if (pageLoadCount >= 0) {
// document.querySelector("#notification-banner").insertAdjacentHTML("beforeend", `<span class="close">×</span>`);
// document.querySelector("#notification-banner .close").addEventListener("click", () => {
// document.querySelector("#notification-banner").style.display = "none";
// localStorage.setItem(notificationId + "-dismissed", "true");
// });
// }
// }
const notificationId = "javalin-7-released";
const hasBeenDismissed = localStorage.getItem(notificationId + "-dismissed") === "true";
const pageLoadCount = parseInt(localStorage.getItem(notificationId + "-count") || 0);
localStorage.setItem(notificationId + "-count", (pageLoadCount + 1).toString());
const path = window.location.pathname;
const isDocsOrTutorials = path.startsWith("/documentation") || path.startsWith("/tutorials");
if (!hasBeenDismissed && pageLoadCount >= 0 && isDocsOrTutorials) {
document.write(`
<div id="notification-banner">
<h1>Javalin 7 is out! 🚀</h1>
Javalin 7 stable is finally here!
Read more in the <a href="/news/javalin-7.0.0-stable.html">release post</a>.
</div>
`);
if (pageLoadCount >= 0) {
document.querySelector("#notification-banner").insertAdjacentHTML("beforeend", `<span class="close"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></span>`);
document.querySelector("#notification-banner .close").addEventListener("click", () => {
document.querySelector("#notification-banner").style.display = "none";
localStorage.setItem(notificationId + "-dismissed", "true");
});
}
}
</script>
<style>
#notification-banner {
Expand All @@ -28,7 +30,7 @@
right: 32px;
width: 360px;
z-index: 9999999;
background: #ffff64;
background: #9fff82;
color: black;
font-size: 18px;
padding: 24px;
Expand All @@ -50,24 +52,23 @@
}

#notification-banner .close {
background: white;
background: black;
color: white;
position: absolute;
right: -3px;
top: -3px;
height: 32px;
width: 32px;
line-height: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
cursor: pointer;
border: 3px solid black;
transition: background 0.2s ease;
}

#notification-banner .close:hover {
background: #f0f0f0;
background: #333;
}

@media (max-width: 480px) {
Expand All @@ -94,4 +95,8 @@
transform: translateX(0);
}
}

body.dark-mode #notification-banner h1 {
color: black;
}
</style>
Loading