Java + nouvelle
A new, elegant way to build Java applications.
The name also carries the energy of "javelin": fast, sharp, and direct. That makes Javelle feel Java-first, modern, and precise without losing the elegance implied by -velle.
v1.0 · JVM 21 · Status Nominal
The new Java experience
Java, beautifully reactive. Javelle brings Vue-like speed, Javelle-style application modes, server-rendered templates, routing, state, forms, i18n, native plugins, UI assets, and testing into one coherent JVM workflow.
The name
Javelle is a coined brand name built from Java and nouvelle, the French word for new. The ending gives it a light, elegant, framework-like sound.
Java + nouvelle
A new, elegant way to build Java applications.
The name also carries the energy of "javelin": fast, sharp, and direct. That makes Javelle feel Java-first, modern, and precise without losing the elegance implied by -velle.
The idea
Javelle is designed around a practical goal: keep page structure, routing, modules, UI assets, and server-rendered behavior close to Java code while preserving the ergonomics developers expect from modern frontend tooling.
Pages and components use annotations such as @Component, @State, and @Template. Larger markup lives in matching .html files, keeping Java code focused.
The CLI creates apps, pages, layouts, boot files, stores, services, modules, modes, UI styles, icon packs, fonts, and build manifests with predictable project paths.
The current implementation focuses on MVC rendering, template parsing, routing, reactive state, forms, i18n, stores, plugins, testing, DevTools events, Studio inspection, and static dev-server delivery.
Developer quick start
Use the demo script for a complete generated app, or use the CLI commands directly when creating a new project.
mvn install
./scripts/dev-demo.sh --clean --port 3000
Build and install the local modules so generated apps can resolve Javelle dependencies.
The script scaffolds pages, modules, modes, UI assets, icons, fonts, and history routing.
The dev server serves resources, exposes config endpoints, and supports history fallback.
./bin/javelle create my-app --package app
cd my-app
../bin/javelle doctor
../bin/javelle mode add all
../bin/javelle ui add
../bin/javelle ui preset material
../bin/javelle mode routing web history --fallback
../bin/javelle build --mode web
../bin/javelle test
../bin/javelle dev --mode web --port 3000
../bin/javelle generate page Dashboard
../bin/javelle generate component UserCard
../bin/javelle generate store Auth
../bin/javelle generate service User
../bin/javelle generate boot Auth
../bin/javelle generate layout Main
../bin/javelle generate module billing
../bin/javelle module enable billing
Developer documentation
The page is organized like a developer handbook: start with concepts, then move into commands, templates, runtime modules, UI, and validation.
How to create, build, run, and inspect a Javelle application.
Commands for generators, modes, modules, themes, icons, and fonts.
Vue-style syntax on the JVM with route matching and not-found pages.
170 test files across 30 modules, plus
javelle test and javelle doctor for
one-shot validation and environment checks.
Javelle Studio
Studio is the inspection layer for reactive events, effects, computed values, component activity, route changes, plugins, permissions, logs, performance marks, and redacted debug reports. It ships through the CLI and the VS Code extension.
./scripts/devtools-studio.sh --port 8097
JavelleDevTools.enable(DevToolsConfig.builder()
.appName("MyApp")
.environment("development")
.build());
JavelleDevTools.serveWebSocket(8098, "local");
./scripts/export-devtools-report.sh --output debug-report.zip
Runtime hooks emit events like signal.updated, effect.finished, plugin.failed, and performance.mark.
Studio runs on localhost, production instrumentation stays off unless explicitly enabled, and debug reports mask tokens, cookies, passwords, keys, and sessions.
The extension adds commands to open Studio, inspect the active component, show the dependency graph, and export a debug report from the command palette.
Architecture
Javelle separates core annotations, runtime rendering, UI assets, app structure, target modes, and testing into focused Maven modules.
Annotations and runtime contracts: components, templates, boot files, modules, state, props, and lifecycle hooks.
Template renderer, MVC page rendering, router, forms, stores, i18n, plugins, native bridge, SpringFabric AXIS dispatch, and test harness.
Component registry, CSS utilities, Material preset, themes, icons, fonts, accessibility, motion, and SCSS source mapping.
Web, PWA, mobile, desktop, and SSR descriptors with shipping native hosts: Android WebView, iOS WKWebView (Xcode project), and Electron desktop shell.
Generated Java classes point to files like
HomePage.html, so designers and Java developers
can work against clear file boundaries.
Switch modes with
javelle mode routing web history --fallback,
hash, or anchor. Generated apps
publish anchor-routing discovery files.
javelle plugin add gps writes a plugin manifest
while Java facades such as Gps,
Device, and Clipboard call a typed
WebView-to-native bridge.
javelle mvc demo --spring-fabric installs an
intent-first AXIS handler demo where MVC renders the page
and browser calls dispatch through a typed SpringFabric
envelope.
Created apps include /styles/app.css and
styles/app.scss, declared in
javelle.config.json
for a future Sass build pipeline.
javelle test runs Maven, JVL linting, jsdom
runtime tests, and an optional smoke build.
javelle doctor validates JDK, Node, Maven,
Android SDK, Xcode, and project config before you ship.
Target modes
Modes are explicit descriptors under src/main/javelle/modes. The CLI creates target-specific support files without overwriting existing work.
Native plugin catalog
Javelle generates Android permission manifests and iOS Info.plist entries directly from your enabled plugins. Enable a plugin and the right permissions appear. Disable it and they are removed. No manual manifest editing required.
Photo and video capture via the device camera API with preview and crop support.
javelle plugin add camera
Device location with high-accuracy, balanced, and passive power modes.
javelle plugin add gps
Read and write text to the system clipboard using secure platform APIs.
javelle plugin add clipboard
Device info: model, OS version, screen size, orientation, and battery level.
javelle plugin add device
Monitor connectivity state, network type, and connection quality changes.
javelle plugin add network
Small encrypted key-value storage in the app sandbox.
javelle plugin add secure-storage
Schedule local reminders and app notifications with channels and actions.
javelle plugin add local-notifications
Fingerprint and face authentication through the system biometric API.
javelle plugin add biometrics
Read and write NFC tags and peer-to-peer data exchange on supported devices.
javelle plugin add nfc
Capture photos, video, and audio from device inputs. Pair with the media plugin for playback.
javelle plugin add media-capture
Read, write, and manage files in sandboxed device storage with typed paths.
javelle plugin add filesystem
Send text messages via the device messaging API. Only include when required.
javelle plugin add sms
Javelle Lightweight Standard v1
A strict set of defaults to keep Javelle apps fast, small, and secure across every delivery target — web, PWA, mobile, and desktop. These are the recommended rules, not optional suggestions.
Images
Fonts
Icons
Plugins
Security
usesCleartextTraffic=false by default on
Android
Build
The current repository focuses on the project system, Java runtime surface, and developer workflow.
javelle plugin commands.
The next stage turns the foundation into a fuller browser and packaging workflow.
Runtime contract
Real <input>,
<select>, and
<textarea> elements wired
to the Javelle runtime contract via
data-jv-action — no build
step, no framework required.
data-jv-action="notify-form"
Reads name="level",
name="message", and
name="position" from the closest
<form> and fires a toast notification.
HTML5 validation runs first.
data-jv-action="dark-toggle"
Toggles .body--dark on
<body> and .j-dark on
<html>. Dark theme styles are scoped
under those ancestor selectors.
data-jv-drawer-toggle="#main-drawer"
Opens or closes the off-canvas
.j-drawer element by toggling
.j-drawer--open and syncing
aria-hidden.
data-jv-action="copy"
Copies the value of
data-jv-copy to the clipboard. Used on every
"Copy" button in the Quick Start section above.
Build with it
The fastest path is to run the demo script, inspect the generated project, then use the CLI to add pages, modules, routing mode, UI assets, fonts, icons, SCSS-backed app styles, and Studio visibility.