Skip to main content

Krema

A thin layer of Krema on top of your Java

$ npm install -g @krema-build/krema
$ krema init my-app --template react

Modern desktop apps. Cross platform.
Java backend. Web frontend.

Lightweight

50-80MB bundle size. Uses system WebViews instead of bundling Chromium. Lower memory footprint than Electron.

Java Backend

Write backend logic in Java with access to the entire Java ecosystem. Maven, Spring, and thousands of libraries at your fingertips.

Web Frontend

Build your UI with any web framework: React, Vue, Svelte, or vanilla HTML/CSS/JS. Full TypeScript support included.

Cross-Platform

Build once, run on macOS, Windows, and Linux. Native look and feel on each platform with system WebViews.

Native APIs

File dialogs, clipboard, notifications, system tray, global shortcuts, and more. All accessible from your frontend.

Easy Distribution

Built-in bundling, code signing, notarization, and auto-updates. Ship to all platforms with a single command.

Why Krema?

Java Backend Ecosystem

Maven, Spring, and thousands of battle-tested libraries. Use the tools Java developers already know and trust.

Any Web Framework

Build your UI with React, Vue, Svelte, or anything that runs in a browser. Full TypeScript support included.

Lightweight by Design

Uses the system WebView instead of bundling Chromium. Small downloads, low memory footprint.

Ready to Ship

CLI scaffolding, hot reload, cross-platform bundling, code signing, and auto-updates — all out of the box.

Build with the tools you know

Frontend
React
Vue
Svelte
Angular
TypeScript
Backend
Java
mvnMaven
GraalVM
Spring

Get started in seconds

Krema CLI scaffolds your project with everything you need: frontend framework, Java backend, and build configuration.

Choose from templates for React, Vue, Svelte, or vanilla JavaScript. Hot reload works out of the box for rapid development.

Read the Quick Start Guide
Terminal
# Install globally
npm install -g @krema-build/krema

# Create a new project
krema init my-app --template react

# Start development
cd my-app && krema dev

Simple IPC, powerful results

App.java
@KremaCommand
public String greet(String name) {
return "Hello, " + name + "!";
}

@KremaCommand
@RequiresPermission(Permission.FS_READ)
public String readFile(String path) throws IOException {
return Files.readString(Path.of(path));
}
app.js
// Call backend commands
const greeting = await window.krema.invoke('greet', {
name: 'World'
});

// Listen for backend events
window.krema.on('file-changed', (data) => {
console.log('File changed:', data.path);
});