https://github.com/caoccao/javenode
Javenode is Java + V8 + Node.js. It is a Node.js simulator with Java in V8.
https://github.com/caoccao/javenode
android engine java java-v8 javascript javet linux macos nodejs v8 v8-javascript-engine windows
Last synced: 3 months ago
JSON representation
Javenode is Java + V8 + Node.js. It is a Node.js simulator with Java in V8.
- Host: GitHub
- URL: https://github.com/caoccao/javenode
- Owner: caoccao
- License: apache-2.0
- Created: 2021-08-28T23:50:43.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-01-02T23:21:10.000Z (12 months ago)
- Last Synced: 2025-09-02T18:43:42.144Z (4 months ago)
- Topics: android, engine, java, java-v8, javascript, javet, linux, macos, nodejs, v8, v8-javascript-engine, windows
- Language: Java
- Homepage: https://www.caoccao.com/Javenode/
- Size: 835 KB
- Stars: 66
- Watchers: 6
- Forks: 6
- Open Issues: 2
-
Metadata Files:
- Readme: README.rst
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
Javenode
========
|Maven Central| |Discord| |Donate|
|Linux Build|
.. |Maven Central| image:: https://img.shields.io/maven-central/v/com.caoccao.javet/javenode?style=for-the-badge
:target: https://central.sonatype.com/artifact/com.caoccao.javet/javenode
.. |Discord| image:: https://img.shields.io/discord/870518906115211305?label=join%20our%20Discord&style=for-the-badge
:target: https://discord.gg/R4vvKU96gw
.. |Donate| image:: https://img.shields.io/badge/Donate-Paypal-green?style=for-the-badge
:target: https://paypal.me/caoccao?locale.x=en_US
.. |Linux Build| image:: https://github.com/caoccao/Javenode/actions/workflows/linux_build.yml/badge.svg
:target: https://github.com/caoccao/Javenode/actions/workflows/linux_build.yml
Javenode is Java + V8 + Node.js. It is a Node.js simulator with Java in V8.
Javenode is an extension of `Javet `_ (Java + V8). It aims at simulating Node.js with Java in Javet V8 mode. Why? Because Javet V8 mode is much more secure than the Node.js mode, but lacks of some basic features, e.g. `setTimeout`, `setInterval`, etc. So, these **must-have** API can be found in Javenode.
========================= ================= ================
Feature Javet Javenode
========================= ================= ================
External Dependencies No Yes
Platform Dependent Yes No
========================= ================= ================
If you like my work, please **Star** this project. And, you may follow me `@sjtucaocao `_, or visit https://blog.caoccao.com/ or http://caoccao.blogspot.com/. And the official support channel is at `discord `_.
Major Features
==============
* Native Event Loop (vert.x)
* Same Modules as Node.js
* Modules
* console
* javet
* timers
* timers/promises
Quick Start
===========
Dependency
----------
Maven
^^^^^
.. code-block:: xml
com.caoccao.javet
javenode
0.8.0
Gradle Kotlin DSL
^^^^^^^^^^^^^^^^^
.. code-block:: kotlin
implementation("com.caoccao.javet:javenode:0.8.0")
Gradle Groovy DSL
^^^^^^^^^^^^^^^^^
.. code-block:: groovy
implementation 'com.caoccao.javet:javenode:0.8.0'
Hello Javenode (Static Import)
------------------------------
.. code-block:: java
try (V8Runtime v8Runtime = V8Host.getV8Instance().createV8Runtime();
JNEventLoop eventLoop = new JNEventLoop(v8Runtime)) {
eventLoop.loadStaticModules(JNModuleType.Console, JNModuleType.Timers);
v8Runtime.getExecutor("const a = [];\n" +
"setTimeout(() => a.push('Hello Javenode'), 10);").executeVoid();
eventLoop.await();
v8Runtime.getExecutor("console.log(a[0]);").executeVoid();
}
Hello Javenode (Dynamic Import)
-------------------------------
.. code-block:: java
try (V8Runtime v8Runtime = V8Host.getV8Instance().createV8Runtime();
JNEventLoop eventLoop = new JNEventLoop(v8Runtime)) {
eventLoop.loadStaticModules(JNModuleType.Console);
eventLoop.registerDynamicModules(JNModuleType.TimersPromises);
v8Runtime.getExecutor(
"import { setTimeout } from 'timers/promises';\n" +
"const a = [];\n" +
"setTimeout(10, 'Hello Javenode')\n" +
" .then(result => a.push(result));\n" +
"globalThis.a = a;").setModule(true).executeVoid();
eventLoop.await();
v8Runtime.getExecutor("console.log(a[0]);").executeVoid();
}
TODO
====
* To implement `fetch`
* To implement `fs`
License
=======
`APACHE LICENSE, VERSION 2.0 `_
Documents
=========
* `Javet `_
* `Javenode Document Portal `_