Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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 days ago
JSON representation

Javenode is Java + V8 + Node.js. It is a Node.js simulator with Java in V8.

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 `_