Web3D Consortium · NetBeans Platform · Java + XSLT + XML · v4.0.40 (Nov 2025) · Apache NetBeans 28 · OpenJDK 25
A full-featured, open-source 3D scene authoring environment built on the Apache NetBeans platform. The X3dSourceFilePalette module provides the drag-and-drop node insertion palette — the author's primary composition interface. The broader system wraps X3D validation, multi-format conversion, and live preview into a single IDE.
CreateX3dSceneAccessInterfaceJava.xslt — the source for 500+ concrete classes is never hand-edited.The X3DUOM XML is the single source of truth. Every node's field names, types, access modes, default values, tooltips, and parent-child constraints all flow from it. Changes to the X3D spec → edit the schema → re-run XSLT → regenerate all code.
A 2024 JDK change restricts JAXP entity expansion by default — the large X3D XML DOCTYPE definition exceeds the limit. Required config patch: add -J-Djdk.xml.entityExpansionLimit=5000 to netbeans.conf. This is a known active issue and a good example of where the active maintenance focus has been recently.
The heart of X3D-Edit's conversion power. A large set of XSLT stylesheets bundled in the plugin, invoked via SAXON (default) or native Java XSLT. Each stylesheet transforms a source .x3d into a different target representation. This is the "transpiler" layer of the X3D ecosystem.
Format conversion stylesheets
EXI binary encoding
X3D supports EXI (Efficient XML Interchange) — a W3C standard for binary XML encoding that dramatically reduces file size and parse time. Two EXI engines supported:
Files can be loaded via CommandLine -fromEXI or X3D.loadFromFileEXI(). The X3D JSON encoding uses gzip internally; EXI is the more aggressive binary option targeting bandwidth-constrained delivery (IoT, web streaming).
A Plain Old Java Object (POJO) implementation of the full X3D scene graph. 500+ concrete classes, autogenerated from X3DUOM. Implements both org.web3d.x3d.jsail (concrete) and org.web3d.x3d.sai (abstract ISO binding interfaces).
X3D object (root) capabilities
toFileStylesheetConversion(filename, stylesheet, params) internally. SAXON is invoked as a Java library, not a command-line process. Outputs can be round-trip verified: .x3d → .java → compile → run → new .x3d → diff against original. The round-trip test suite does exactly this on thousands of example scenes nightly in CI.findNodeByDEF() walks the scene graph recursively to locate a node by its DEF attribute — useful for programmatic scene modification. isValid() returns boolean after running all checks.set*() returns X3DObject (or the concrete subclass). This allows the generated Java output from X3dToJava.xslt to be compact and readable. It's also key to making X3DJSAIL usable as a scene construction library without verbose intermediate variable assignment.ConfigurationProperties
Static singleton controlling all X3DJSAIL runtime behavior. Key settings:
X3D has a rich type system — all 40+ field types are implemented as Java objects in org.web3d.x3d.jsail.fields:
Each field object includes regex-based validation, isNMTOKEN() name checks, and interoperability naming convention checks. FieldObjectTests.java has hundreds of tests covering every method of every field type.
The palette organizes all X3D nodes by X3D profile component. Each node has a custom customizer panel (a Swing JPanel specific to that node) with field editors, tooltips from X3D Tooltips, and a "Check" QA button.
Core / scene graph nodes
Geometry 3D
Geometry 2D
Appearance / Materials
Animation / Interpolation
Sensors
Advanced / Specialized profiles
A distinctive capability not found in most X3D tools. X3D-Edit can embed W3C XML Digital Signature (ds:) and XML Encryption (xenc:) namespaces directly into X3D scenes. The preferences panel configures keystore paths, passwords, and certificate aliases.
Use cases: scene provenance authentication (prove a scene came from a trusted source), IP protection of X3D content for enterprise deployments, signed X3D assets in supply chains. The tool validates signatures on import and embeds them on export.
ds: and xenc: namespaces are declared — under investigation.When the Trace checkbox is enabled on any node, X3D-Edit inserts a Script node immediately after it that intercepts and logs all events through that ROUTE connection. Output goes to the browser console with timestamps and event values. Useful for debugging complex animation and sensor networks.
This is implemented as XSLT — the Trace option adds the Script node template inline in the XML. Sensors, interpolators, and ROUTE destinations all support it.
X3D-Edit can auto-insert visualization helper geometry into scenes during authoring. Configure via X3D-Edit Visualization Preferences. Examples include: axis indicators for coordinate frames, bounding box helpers, skeleton visualization for H-Anim Humanoid, sensor zone indicators for proximity/visibility sensors.
Parameters for geometry reduction/distillation targeted at CAD data coming in from engineering tools (via COLLADA or direct CAD export). The CDF preferences let you control level-of-detail reduction, polygon budget limits, and simplification threshold. Feeds into the CADGeometry profile nodes (CADAssembly, CADFace, CADLayer, CADPart).
Full support for the H-Anim 2.0 Humanoid Animation specification. Nodes include: Humanoid, Joint, Segment, Site, and the newer HAnimMotion node (X3D v4 addition) for motion capture data. X3D-Edit provides customizer panels for each, with skeleton preview in the Xj3D viewer.
HAnimMotion is notable — it represents a channel-based motion capture encoding directly in the scene graph, without requiring external BVH files. This is new in v4.
X3D has a full profile for military and training simulation via IEEE 1278 DIS (Distributed Interactive Simulation) PDUs (Protocol Data Units). Nodes: EspduTransform, SignalPdu, ReceiverPdu, TransmitterPdu, DISEntityManager, DISEntityTypeMapping.
This ties X3D scenes directly into live simulation networks — a 3D object's position is updated in real time by incoming DIS PDUs over the network. X3D-Edit originated at the Naval Postgraduate School, which explains this focus.
Nodes for geographically-referenced 3D content: GeoLocation, GeoLOD, GeoViewpoint, GeoPositionInterpolator. Supports multiple coordinate systems: GD (Geographic), UTM, GC (Geocentric). Allows X3D scenes to be anchored to real-world coordinates with correct datum handling.
A recently added feature. X3D-Edit can auto-launch a CORS-compliant HTTP server on localhost (configured as a user preference). This enables rendering X3D scenes in X_ITE (formerly Cobweb) directly in the browser without same-origin policy errors. The workflow is: download examples → enable CORS autolaunch → open .x3d → auto-preview in X_ITE in browser. Key for the modern web-delivery use case.
X3DJSAIL supports serialization to X3D Canonical Form — a normalized, deterministic XML representation used for comparison, diffing, and digital signature. Canonical form eliminates whitespace variations, normalizes attribute ordering, and makes round-trip comparison reliable. Invoked via toStringX3D() with canonical flag or CommandLine -canonical.
Based on release notes, README changelogs, and issue tracker activity. X3D-Edit v4.0.37–v4.0.40.
These are where X3D-Edit's Java ecosystem and the Blender Python addon can meet.