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?
Maven, Spring, and thousands of battle-tested libraries. Use the tools Java developers already know and trust.
Build your UI with React, Vue, Svelte, or anything that runs in a browser. Full TypeScript support included.
Uses the system WebView instead of bundling Chromium. Small downloads, low memory footprint.
CLI scaffolding, hot reload, cross-platform bundling, code signing, and auto-updates — all out of the box.
Build with the tools you know
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- npm
- npx
- curl
# 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
# No install needed
npx @krema-build/krema init my-app --template react
# Start development
cd my-app && npx @krema-build/krema dev
# Install via script
curl -fsSL https://raw.githubusercontent.com/krema-build/krema/master/packages/install.sh | bash
# Create a new project
krema init my-app --template react
# Start development
cd my-app && krema dev
Simple IPC, powerful results
@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));
}
// 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);
});