JVN is a modular cross-platform Visual Novel engine written in Java.
JVN is designed to be lightweight and predictable under load.
- There is modular separation of runtime, scripting, renderer backends, and editor tooling.
- Hot paths are data-oriented where possible (compact buffers, reduced allocation churn, pooled native buffers for batch workflows).
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).
- JDK 21 (toolchain auto-download is enabled, but local JDK 21 is still recommended)
- 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.- For team version-control workflows in editor:
gitandgit lfsinstalled/configured
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.
Useful JVN commands:
./jvnw launcher
./jvnw editor
./jvnw runtime
./jvnw build
./jvnw test
./jvnw check
./jvnw cleanUse ./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 test
./jvnw check
./jvnw clean
./jvnw distOptional direct Gradle tasks for focused work:
./gradlew :core:compileJava :scripting:compileJava :fx:compileJava :runtime:compileJava :editor:compileJava
./gradlew :core:test :scripting:test :swing:testEntrypoint: 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
- Timeline graph + DSL editor (
config/timeline/story.timeline). - 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
| |-- timeline/story.timeline
| |-- 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.
core: engine/runtime primitives, VN runtime, menus, save system, 2D/physics.scripting: JES tokenizer/parser/AST/loader/runtime scene.fx: JavaFX launcher, VN renderer, menu rendering, FX audio backend.swing: Swing launcher/backend.runtime: CLI app (JvnApp), runtime interop bridge, scene wiring.editor: JavaFX authoring environment.audio: bundled Simp3-compatible audio integration layer.testkit: shared testing dependencies/helpers.
Full documentation index: docs/INDEX.md
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— 22 timeline actions: move, rotate, scale, fade, camera, audio, combatdocs/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/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 timeline DSL: move, rotate, scale, fade, pivot, camera, audio, wait, parallel, easing valuesdocs/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, quick access, 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 browser
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.
