JVN is a young, modular cross-platform Visual Novel engine and 2D animation toolkit written in Java.
Documentation entrypoints:
- Public Documentation Website
- Documentation Index
- JVN Engine Hub
- JVN Editor Docs
- JVN Build And Release Docs
The public website is the recommended reading surface for the latest organized docs. The Markdown
files in docs/ remain the source of truth in this repository and are mirrored into the website.
JVN Language Tools is available on the Visual Studio Marketplace for VNS, JES, Story Map, and JVN config syntax highlighting and snippets:
Install JVN Language Tools for VS Code
JVN is designed to be lightweight and predictable under load.
- Runtime, scripting, renderer backends, and editor tooling are clearly separated and extensible.
Typical memory footprint for the core runtime together with the full editor is around 70-130 MB RAM in normal desktop usage (project/content dependent).
JVN is in heavy continuous development. Engine APIs, editor tooling, generated project structure, and scripting/file-format behavior may change between updates.
- JDK 21 installed locally on your machine. If multiple JDKs are installed, point
JAVA_HOMEat JDK 21 before building or running JVN. - No global Gradle install required. Use
./jvnwas the default JVN command wrapper. ./gradlewremains available as the optional low-level Gradle entrypoint for uncommon/manual tasks.gitis required when cloning from source and optional afterward for pulling updates from the repository or using hub/editor update workflows.- For team version-control and large-asset workflows in editor:
git lfsinstalled/configured.
For local source builds, use Eclipse Temurin 21 LTS. It is the recommended JDK for JVN because it is a free, cross-platform OpenJDK distribution with long-term Java 21 support. Install the JDK package, then make sure JAVA_HOME points at that JDK before running ./jvnw, ./jvn, or ./gradlew.
On Bazzite, ./jvn and ./jvnw can automatically enter a Distrobox container with Java 21+ and javac, so the hub/editor can use the JDK installed there. Override the container with JVN_DISTROBOX_CONTAINER=<name>, force detection on another distro with JVN_DISTROBOX=1, or disable this handoff with JVN_DISTROBOX=0.
JVN does not currently publish official prebuilt binaries for the engine. Until the first major release, use a source checkout and launch JVN with ./jvnw or through the Engine Hub (./jvn / jvn.bat).
This is intentional for the current development phase:
- JVN is still moving quickly, including editor workflows, project templates, scripting behavior, and build/release tasks.
- Running from source keeps the Gradle wrapper, module classpath, generated resources, and Java toolchain in sync with the checkout you are actually testing.
- The Engine Hub can update, build, run, and install shortcuts for that same checkout, which avoids stale launcher binaries pointing at a different engine revision.
- Official binaries require stable packaging, signing/notarization, update channels, and platform QA. Those are planned for the first major release rather than the current preview builds.
Prebuilt binaries are planned to be included starting with the first major JVN release, currently expected by the end of 2026. Until then, the supported path is source-first: clone the repository, use ./jvnw for commands, and use the Engine Hub for the desktop workflow.
Clone the repository:
git clone https://github.com/S1mplector/Java-Vector-NexusBuild everything:
./jvnw buildThe build command also runs tests for applicable modules, so a failing build may be a test failure rather than a compile failure.
Launch the Engine Hub:
# macOS / Linux
./jvn:: Windows
jvn.batThe hub is the recommended desktop entry point for day-to-day work. It can run the editor, launcher, builds, tests, repository updates, and shortcut installation without keeping a terminal output panel in the hub window.
Install native OS shortcuts from the hub with Build Shortcuts, or run the installer for your platform:
# macOS
./install-macos-launcher.sh
# Linux
./install-linux-launcher.sh# Windows PowerShell
.\install-windows-launcher.ps1Installed shortcuts are user-local and launch without opening a terminal or command prompt. See JVN Engine Hub for install paths, logs, and troubleshooting.
Useful JVN commands:
./jvnw launcher
./jvnw editor
./jvnw runtime
./jvnw compile
./jvnw quick
./jvnw build
./jvnw ci
./jvnw test
./jvnw check
./jvnw clean
./jvnw build-info
./jvnw doctor
./jvnw jar
./jvnw dist -PjvnGameProject=/path/to/game
./jvnw dist-all -PjvnGameProject=/path/to/game
./jvnw dist-runtime -PjvnGameProject=/path/to/game
./jvnw dist-runtime-all -PjvnGameProject=/path/to/game
./jvnw dist-preflight -PjvnGameProject=/path/to/game
./jvnw dist-clean
./jvnw runtime-cache
./jvnw runtime-cache-clear
./jvnw native -PjvnGameProject=/path/to/game
./jvnw release-native -PjvnGameProject=/path/to/game
./gradlew validateJvnGameDependencies -PjvnGameProject=/path/to/game -PjvnShowInfo=trueUse ./jvnw for normal development. It prints concise wrapper status by default. Drop to ./gradlew or ./jvnw --raw ... only when you need direct Gradle task control or full Gradle logs.
The default Java build no longer requires any native toolchain.
Run editor:
./jvnw editorRun runtime:
./jvnw runtimeDefault wrapper commands:
./jvnw build
./jvnw ci
./jvnw test
./jvnw check
./jvnw clean
./jvnw compile
./jvnw quick
./jvnw build-info
./jvnw doctor
./jvnw jar
./jvnw dist -PjvnGameProject=/path/to/game
./jvnw dist-all -PjvnGameProject=/path/to/game
./jvnw dist-runtime -PjvnGameProject=/path/to/game
./jvnw dist-runtime-all -PjvnGameProject=/path/to/game
./jvnw dist-preflight -PjvnGameProject=/path/to/game
./jvnw dist-clean
./jvnw runtime-cache
./jvnw runtime-cache-clear
./jvnw native -PjvnGameProject=/path/to/game
./jvnw release-native -PjvnGameProject=/path/to/game
./gradlew validateJvnGameDependencies -PjvnGameProject=/path/to/game -PjvnShowInfo=trueOptional direct Gradle tasks for focused work:
./gradlew compileAll
./gradlew quickCheck
./gradlew printJvnBuildEnvironment
./gradlew ci
./gradlew :core:compileJava :scripting:compileJava :fx:compileJava :runtime:compileJava :editor:compileJava
./gradlew :core:test :scripting:test :swing:testGradle build cache is enabled by default. ./jvnw compile, ./jvnw quick, ./jvnw build, ./jvnw ci, ./jvnw test, ./jvnw check, ./jvnw clean, and ./jvnw jar also opt into configuration cache automatically on macOS/Linux.
Game archives are written to build/distributions/games/ by default. Set jvnBuildDir=<dir> in gradle.properties or pass -PjvnBuildDir=<dir> to relocate workspace build outputs; relative paths resolve from the workspace root. Use -PjvnBuildOutputDir=<dir> when you only want to redirect packaged game artifacts.
Use:
./jvnw dist -PjvnGameProject=/path/to/gamefor a current-host portable zip./jvnw dist-all -PjvnGameProject=/path/to/gamefor cross-target portable zips./jvnw dist-runtime -PjvnGameProject=/path/to/gamefor a self-contained desktop bundle for the current target./jvnw dist-runtime-all -PjvnGameProject=/path/to/gamefor self-contained desktop bundles across all supported desktop targets./jvnw dist-preflight -PjvnGameProject=/path/to/gameto validate a package plan and write JSON/Markdown reports without packaging./jvnw dist-cleanto delete packaged game artifacts./jvnw runtime-cacheto inspect cached prebuilt desktop runtimes./jvnw runtime-cache-clearto clear cached prebuilt desktop runtimes./jvnw native -PjvnGameProject=/path/to/gamefor a current-host native package./gradlew validateJvnGameDependencies -PjvnGameProject=/path/to/game -PjvnShowInfo=truefor a release-oriented scan of missing assets, broken references, unused media, and packaging blockers.github/workflows/native-builds.ymlfor cross-host native installers and app bundles on matching GitHub runners
The editor also exposes this through Build & Publish... for the currently open game project. The Ship Build action builds the selected package plan and writes release-manifest.json/Markdown under build/reports/jvn-game-release/. Scan Dependencies renders an in-view report for missing media/scripts/config, bad menu/stage/timeline references, unused media, and packaging blockers, with copy/open actions per finding. Packaging validates type=vn and type=jes game manifests, rejects the engine workspace, writes BUILD-METADATA.txt sidecars/contents, and supports release profiles for signing, notarization, and publish commands.
Entrypoint: modules/runtime/src/main/java/com/jvn/runtime/JvnApp.java
Basic run:
./jvnw runtimeCommon examples:
# Run a specific VNS script with FX renderer
./jvnw runtime --args='--script scripts/story/prologue.vns --ui fx'
# Run with Swing renderer
./jvnw runtime --args='--script scripts/story/prologue.vns --ui swing'
# Load JES directly
./jvnw runtime --args='--jes game/minigames/brickbreaker.jes'
# Overlay filesystem assets onto classpath assets
./jvnw runtime --args='--assets /absolute/path/to/project --script story/prologue.vns'Supported runtime CLI flags:
--title <text>--width <px>--height <px>--script <name>optional override for startup VNS script--locale <code>default:en--ui <fx|swing>default:fx--jes <path[,path2...]>--audio <fx|simp3|auto>default:auto--assets <dir>
Notes:
- Script loading uses
AssetCatalogscript paths (typically relative togame/scripts/on classpath). - If
--scriptis omitted, runtime resolves entry script in this order:jvn.project->entryVns- system property
jvn.entryVns - first discovered
.vnsunderscripts/(withprologue/start/mainpreference)
- Set project startup script in
jvn.project:entryVns=scripts/story/prologue.vns
Run:
./jvnw editorEditor currently features:
- Startup Welcome dashboard with recent projects + environment health checks.
- Project explorer with root-level run button (runs VN projects through runtime).
- VNS/JES code editors with lint and parser diagnostics.
- VNS quick-fix context actions (undefined labels, missing assets, unreachable blocks).
- Built-in Version Control panel (Git + Git LFS): init repo, status, commit, pull-rebase, push.
- Visual config editors:
config/ui/dialogue.layoutconfig/menu/menus/*.menuconfig/menu/layouts/*.layout
- Story Map graph + DSL editor (
config/story/story.storymap). - In-editor Help Center (
F1).
JVN ships with an embedded Simp3-compatible backend by default in audio.
No extra Maven install step or -PuseSimp3 flag is required.
Runtime audio selection:
./jvnw runtime --args='--audio auto'
./jvnw runtime --args='--audio simp3'
./jvnw runtime --args='--audio fx'auto prefers Simp3 and falls back to FX if needed.
If a machine hits Gradle journal lock errors like:
Failed to ping owner of lock for journal cache (.../journal-1)
use this sequence:
./gradlew --stop
rm -f ~/.gradle/caches/journal-1/*.lock
./gradlew build --no-daemon --no-watch-fsProject defaults already include:
org.gradle.vfs.watch=falseingradle.properties
Editor-run tasks also isolate Gradle state in .jvn-gradle-user-home to avoid global lock contention.
New projects created from the editor wizard are scaffolded in this shape:
<project>/
|-- config/
| |-- settings/vn.settings
| |-- story/story.storymap
| |-- ui/dialogue.layout
| `-- menu/
| |-- theme/menu.theme
| |-- registry/menu.registry
| |-- menus/*.menu
| |-- layouts/*.layout
| |-- styles/*.style
| `-- assets/
|-- scripts/
| |-- story/prologue.vns
| |-- common/
| `-- system/
|-- assets/
| |-- backgrounds/
| |-- characters/
| |-- portraits/
| |-- cg/
| |-- ui/
| |-- fonts/
| `-- audio/{bgm,sfx,voices}
|-- save/
|-- .gitignore (if Git init enabled)
|-- .gitattributes (if Git LFS defaults enabled)
|-- README.md
`-- jvn.project
JVN ships first-party Git/Git-LFS project tooling:
- Wizard integration:
- initialize Git repository
- add managed
.gitignoredefaults - add managed
.gitattributesLFS defaults - optional initial commit
- Editor integration:
Version Controlmenu + addable side panel- refresh status, initialize repo, commit all, pull (rebase+autostash), push
- changed-file list with quick open support
Default LFS tracking patterns include common VN binary assets (png/jpg/webp/gif, audio/video formats, and fonts).
Only prerequisites are git and git lfs on PATH.
Engine modules live under modules/, while Gradle project names stay stable (:core, :editor, :runtime, etc.).
modules/core: engine/runtime primitives, VN runtime, menus, save system, 2D/physics.modules/scripting: JES tokenizer/parser/AST/loader/runtime scene.modules/fx: JavaFX launcher, VN renderer, menu rendering, FX audio backend.modules/swing: Swing launcher/backend.modules/runtime: CLI app (JvnApp), runtime interop bridge, scene wiring.modules/editor: JavaFX authoring environment.modules/audio: bundled Simp3-compatible audio integration layer.modules/testkit: shared testing dependencies/helpers.
Public documentation website: https://javavectornexus.com
Repository documentation index: docs/INDEX.md
Use the website for browsing and search. Use the repository Markdown when editing docs alongside engine changes.
docs/guides/getting-started.md— first-time setup, build, and rundocs/guides/cookbook.md— practical recipes and end-to-end examples
docs/architecture/core/overview.mddocs/architecture/core/system-architecture.mddocs/architecture/core/2d-engine.mddocs/architecture/quality/performance.md
docs/scripting/vns/overview/vns-scripting.md— overview and quick referencedocs/scripting/vns/language/vns-directives.md— @scenario, @character, @background, @charimg, @charlayer, @charpreset, @label, @var, @define, @includedocs/scripting/vns/language/vns-dialogue.md— dialogue forms, text effects, typewriterdocs/scripting/vns/language/vns-choices.md— choices, branching patternsdocs/scripting/vns/language/vns-commands.md— complete command catalogdocs/scripting/vns/presentation/vns-audio.md— BGM, SFX, voice, crossfadedocs/scripting/vns/presentation/vns-characters.md— character system, layered sprites, motiondocs/scripting/vns/presentation/vns-layered-charpresets.md— practical guide: @charlayer + @charpreset pipeline, asset organization, cross-character refs, editor toolingdocs/scripting/vns/language/vns-variables.md— variables, conditions, if/elif/elsedocs/scripting/vns/presentation/vns-transitions.md— transitions, shake, flash, UI controldocs/scripting/vns/flow/vns-flow-control.md— labels, jumps, call/return, script switchingdocs/scripting/vns/integration/vns-interop.md— JES/Java integration, inline timelinesdocs/scripting/vns/language/vns-text-formatting.md— ICU plurals, select, number formattingdocs/scripting/vns/runtime/vns-scene-lifecycle.md— VnScene node loop, VnState, node types, preflight, character visualsdocs/scripting/vns/runtime/vns-save-system.md— named slots, autosave, quick save/load, schema migration, thumbnailsdocs/scripting/vns/runtime/vns-rollback-history.md— rollback stack, forward/backward, dialogue backlogdocs/scripting/vns/runtime/vns-settings-modes.md— text speed, volumes, skip, auto-play, UI hidden, key bindingsdocs/scripting/vns/runtime/vns-localization.md— locale-aware script loading, UI strings, multi-language structuredocs/scripting/vns/internals/vns-parsing.md— parser internalsdocs/scripting/vns/integration/java-jes-cross-development.md— hybrid architecturedocs/scripting/vns/integration/vns-jes-architecture.md— scene stack coordination, interop routing, timeline runners, bridge lifecycledocs/scripting/vns/guides/vns-tutorial.md— step-by-step full VN tutorial with choices, variables, audio, and JES integrationdocs/scripting/vns/guides/vns-best-practices.md— naming conventions, structure patterns, pitfalls, and performance tipsdocs/scripting/vns/guides/vns-debugging.md— parse/runtime diagnostics and troubleshooting workflowsdocs/scripting/vns/guides/vns-project-organization.md— directory conventions, include strategy, and scaling patterns
docs/scripting/jes/overview/jes-scripting.md— overview, quick start, quick referencedocs/scripting/jes/scene/jes-scenes-entities.md— scene structure, entity declarations, lifecycle, mergingdocs/scripting/jes/scene/components.md— all 12 component types with propertiesdocs/scripting/jes/timeline/jes-timeline.md— JES timeline actions, Puppeteer aliases, event cues, custom properties, easing/interpdocs/scripting/jes/systems/jes-input.md— keyboard mappings, continuous movement, custom handlersdocs/scripting/jes/systems/jes-camera.md— position, zoom, shake, follow, dead zones, parallaxdocs/scripting/jes/systems/jes-physics.md— rigid bodies, sensors, triggers, restitution, raycastingdocs/scripting/jes/systems/jes-tilemaps.md— tilesets, collision/trigger layers, pathfindingdocs/scripting/jes/gameplay/jes-ai.md— chase, patrol, guard, flee, line-of-sight, A* pathfindingdocs/scripting/jes/gameplay/jes-rpg.md— Stats, Inventory, Equipment, Items, damage/healdocs/scripting/jes/gameplay/jes-ui-widgets.md— Button2D, Slider2D, HUD patternsdocs/scripting/jes/integration/jes-bridge.md— VNS↔JES bridge, call handlers, Java hooksdocs/scripting/jes/internals/jes-parsing.md— tokenizer, parser, AST, validation
docs/scripting/timeline/overview/timeline-scripting.md— overview, quick start, key conceptsdocs/scripting/timeline/story/timeline-story-arcs.md— arc/link DSL, clusters, validation, story patternsdocs/scripting/timeline/animation/timeline-animation.md— TimelineData, keyframes, audio cues, TimelineRunner, registry
docs/runtime/core/runtime.mddocs/runtime/core/interop.mddocs/runtime/systems/save-system.md
docs/scripting/ui/menus/menu-profiles.md— overview, registry, loader discovery, action typesdocs/scripting/ui/menus/menu-screens.md— .menu files, items, actions, bounds, slot previewsdocs/scripting/ui/layout/structure/menu-layouts.md— .layout files, list positioning, built-in layoutsdocs/scripting/ui/menus/menu-styles.md— .style files, colors, fonts, button skins, backgroundsdocs/scripting/ui/layout/structure/menu-button-layouts.md— per-button positional layouts, Bounds Studiodocs/scripting/ui/layout/components/dialogue-layout.md— textbox geometry, name box, choices, action buttons
docs/editor/core/editor.md— layout, editing modes, keyboard shortcutsdocs/editor/core/settings.md— editor and launcher preferences, run defaults, handoff, sidebar defaultsdocs/editor/puppeteer/puppeteer.md— Puppeteer overview, architecture, data pipeline, JES/VNS relationshipdocs/editor/puppeteer/puppeteer-editor-guide.md— complete usage guide: UI panels, keyframes, 12 presets, 26 easing types, audio cues, camera, groups, layersdocs/editor/puppeteer/puppeteer-jes-dsl.md— exported JES DSL, parser compatibility, event cues, properties, easing/interpdocs/editor/sidebars/overview/sidebar-utilities.md— landing page for the editor sidebar panelsdocs/editor/sidebars/left/sidebar-project-explorer.md— file tree, create/rename/delete, run projectdocs/editor/sidebars/left/sidebar-story-timeline.md— multi-arc story graph, arcs, links, clusters, validationdocs/editor/sidebars/right/sidebar-inspector.md— entity property editing for Sprite2D, Label2D, Panel2D, physics, particlesdocs/editor/sidebars/right/sidebar-puppeteer-launcher.md— live VNS scene snapshot, 12 command patterns, one-click launchdocs/editor/sidebars/right/sidebar-vns-diagnostics.md— live error/warning list, click-to-jumpdocs/editor/sidebars/right/sidebar-label-flow-map.md— visual label-to-label directed graphdocs/editor/sidebars/right/sidebar-asset-browser.md— asset discovery, preview, drag-and-drop, type filterdocs/editor/sidebars/right/sidebar-layout-launcher.md— status dashboard and launch for layout/style/screen editorsdocs/editor/sidebars/right/sidebar-menu-flow-editor.md— visual menu-to-menu navigation wiring, wire modedocs/editor/sidebars/right/sidebar-layered-image-visualizer.md— layered sprite exploration, 6 export formats, presetsdocs/editor/sidebars/right/sidebar-image-attributes-tool.md— attribute-based character image assembly, profilesdocs/editor/sidebars/right/sidebar-image-tint-tool.md— scene lighting, grading, tint, and reactive character lightsdocs/editor/sidebars/right/sidebar-version-control.md— Git panel: init, commit, push, pull, branch, stash, remote setupdocs/editor/sidebars/right/sidebar-help-center.md— in-app Markdown documentation browser, guide tree, F1 shortcutdocs/editor/core/action-editor-design.md— architecture and component breakdowndocs/editor/puppeteer/puppeteer-audit.md— hardening audit and expansion roadmapdocs/editor/core/help-center.md— in-app documentation browserdocs/editor/core/help-center-guide-tree.md— Help sidebar guide tree taxonomy, topic folders, and heading-aware search
docs/project-setup/onboarding/new-project-wizard.mddocs/project-setup/content/title-screen.mddocs/project-setup/content/text-effects.mddocs/project-setup/collaboration/version-control.md
This repository is licensed under the MIT License. See LICENSE.md.