{"id":13418533,"url":"https://github.com/pmed/v8pp","last_synced_at":"2025-10-08T19:36:22.242Z","repository":{"id":9169483,"uuid":"10968239","full_name":"pmed/v8pp","owner":"pmed","description":"Bind C++ functions and classes into V8 JavaScript engine","archived":false,"fork":false,"pushed_at":"2025-07-20T18:08:29.000Z","size":1001,"stargazers_count":939,"open_issues_count":25,"forks_count":121,"subscribers_count":32,"default_branch":"master","last_synced_at":"2025-09-26T01:28:21.508Z","etag":null,"topics":["addons","c-plus-plus","cpp","cpp14","cpp17","javascript"],"latest_commit_sha":null,"homepage":"http://pmed.github.io/v8pp/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pmed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-06-26T13:12:39.000Z","updated_at":"2025-09-10T17:57:56.000Z","dependencies_parsed_at":"2024-05-02T00:53:21.489Z","dependency_job_id":"519cdbdd-ea1d-4ce9-a240-83d34ad2309d","html_url":"https://github.com/pmed/v8pp","commit_stats":{"total_commits":535,"total_committers":21,"mean_commits":"25.476190476190474","dds":"0.10280373831775702","last_synced_commit":"3119fc1abdf796cb62e29c5f64553590937b142f"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/pmed/v8pp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmed%2Fv8pp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmed%2Fv8pp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmed%2Fv8pp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmed%2Fv8pp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pmed","download_url":"https://codeload.github.com/pmed/v8pp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pmed%2Fv8pp/sbom","scorecard":{"id":738733,"data":{"date":"2025-08-11","repo":{"name":"github.com/pmed/v8pp","commit":"f034073743feb07321fefa90ccfd7aab99caeec6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/20 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/cmake.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cmake.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/pmed/v8pp/cmake.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cmake.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/pmed/v8pp/cmake.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/cmake.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/pmed/v8pp/cmake.yml/master?enable=pin","Warn: nugetCommand not pinned by hash: .github/workflows/cmake.yml:40: pin your dependecies by either enabling central package management (https://learn.microsoft.com/nuget/consume-packages/Central-Package-Management) or using a lockfile (https://learn.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies)","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   1 nugetCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T16:42:41.429Z","repository_id":9169483,"created_at":"2025-08-22T16:42:41.429Z","updated_at":"2025-08-22T16:42:41.429Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000702,"owners_count":26082805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["addons","c-plus-plus","cpp","cpp14","cpp17","javascript"],"created_at":"2024-07-30T22:01:03.432Z","updated_at":"2025-10-08T19:36:22.236Z","avatar_url":"https://github.com/pmed.png","language":"C++","readme":"[![Build status](https://github.com/pmed/v8pp/actions/workflows/cmake.yml/badge.svg)](https://github.com/pmed/v8pp/actions/workflows/cmake.yml)\n[![NPM](https://img.shields.io/npm/v/v8pp.svg)](https://npmjs.com/package/v8pp)\n[![Join the chat at https://gitter.im/pmed/v8pp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/pmed/v8pp?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/pmed/v8pp)\n\n# v8pp\n\nHeader-only library to expose C++ classes and functions into [V8](https://developers.google.com/v8/) to use them in JavaScript code. v8pp requires a compiler with C++17 support. The library has been tested on:\n\n  * Microsoft Visual C++ 2019 (Windows 10)\n  * GCC 5.4.0 (Ubuntu 16.04)\n  * Clang 5.0.0 (Ubuntu 16.04)\n\n## Building and testing\n\nThe library has a set of tests that can be configured, built, and run with CMake:\n\n```console\n~/v8pp$ mkdir out; cd out\n~/v8pp/out$ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON ..\n~/v8pp/out$ make\n~/v8pp/out$ ctest -V\n```\n\nThe full list of project options can be listed with cmake command:\n\n```console\n~/v8pp/out$ cmake -LH ..\n```\n\nSome of them could be:\n\n\u003e // Build documentation\n\u003e BUILD_DOCUMENTATION:BOOL=OFF\n\u003e\n\u003e // Build shared library\n\u003e BUILD_SHARED_LIBS:BOOL=ON\n\u003e\n\u003e // Build and run tests\n\u003e BUILD_TESTING:BOOL=OFF\n\u003e\n\u003e // Header-only library\n\u003e V8PP_HEADER_ONLY:BOOL=0\n\u003e\n\u003e // v8::Isolate data slot number, used in v8pp for shared data\n\u003e V8PP_ISOLATE_DATA_SLOT:STRING=0\n\u003e\n\u003e // v8pp plugin initialization procedure name\n\u003e V8PP_PLUGIN_INIT_PROC_NAME:STRING=v8pp_module_init\n\u003e\n\u003e // v8pp plugin filename suffix\n\u003e V8PP_PLUGIN_SUFFIX:STRING=.dylib\n\u003e\n\u003e // Use new V8 ABI with V8_COMPRESS_POINTERS and V8_31BIT_SMIS_ON_64BIT_ARCH\n\u003e V8_COMPRESS_POINTERS:BOOL=ON\n\n\n## Binding example\n\nv8pp supports V8 versions after 6.3 with `v8::Isolate` usage in API. There are 2 targets for binding:\n\n  * `v8pp::module`, a wrapper class around `v8::ObjectTemplate`\n  * `v8pp::class_`, a template class wrapper around `v8::FunctionTemplate`\n\nBoth of them require a pointer to `v8::Isolate` instance. They allows to bind from C++ code such items as variables, functions, constants with a function `set(name, item)`:\n\n```c++\nv8::Isolate* isolate;\n\nint var;\nint get_var() { return var + 1; }\nvoid set_var(int x) { var = x + 1; }\n\nstruct X\n{\n    X(int v, bool u) : var(v) {}\n    int var;\n    int get() const { return var; }\n    void set(int x) { var = x; }\n};\n\n// bind free variables and functions\nv8pp::module mylib(isolate);\nmylib\n    // set read-only attribute\n    .const_(\"PI\", 3.1415)\n    // set variable available in JavaScript with name `var`\n    .var(\"var\", var)\n    // set function get_var as `fun`\n    .function(\"fun\", \u0026get_var)\n    // set property `prop` with getter get_var() and setter set_var()\n    .property(\"prop\", get_var, set_var);\n\n// bind class\nv8pp::class_\u003cX\u003e X_class(isolate);\nX_class\n    // specify X constructor signature\n    .ctor\u003cint, bool\u003e()\n    // bind variable\n    .var(\"var\", \u0026X::var)\n    // bind function\n    .function(\"fun\", \u0026X::set)\n    // bind read-only property\n    .property(\"prop\",\u0026X::get);\n\n// set class into the module template\nmylib.class_(\"X\", X_class);\n\n// set bindings in global object as `mylib`\nisolate-\u003eGetCurrentContext()-\u003eGlobal()-\u003eSet(\n    v8::String::NewFromUtf8(isolate, \"mylib\"), mylib.new_instance());\n```\n\nAfter that bindings will be available in JavaScript:\n```javascript\nmylib.var = mylib.PI + mylib.fun();\nvar x = new mylib.X(1, true);\nmylib.prop = x.prop + x.fun();\n```\n\n## Node.js and io.js addons\n\nThe library is suitable to make [Node.js](http://nodejs.org/) and [io.js](https://iojs.org/) addons. See [addons](docs/addons.md) document.\n\n```c++\n\nvoid RegisterModule(v8::Local\u003cv8::Object\u003e exports)\n{\n    v8pp::module addon(v8::Isolate::GetCurrent());\n\n    // set bindings...\n    addon\n        .function(\"fun\", \u0026function)\n        .class_(\"cls\", my_class)\n        ;\n\n    // set bindings as exports object prototype\n    exports-\u003eSetPrototype(addon.new_instance());\n}\n```\n\n## v8pp also provides\n\n* `v8pp` - a static library to add several global functions (load/require to the v8 JavaScript context. `require()` is a system for loading plugins from shared libraries.\n* `test` - A binary for running JavaScript files in a context which has v8pp module loading functions provided.\n\n## v8pp module example\n\n```c++\n#include \u003ciostream\u003e\n\n#include \u003cv8pp/module.hpp\u003e\n\nnamespace console {\n\nvoid log(v8::FunctionCallbackInfo\u003cv8::Value\u003e const\u0026 args)\n{\n    v8::HandleScope handle_scope(args.GetIsolate());\n\n    for (int i = 0; i \u003c args.Length(); ++i)\n    {\n        if (i \u003e 0) std::cout \u003c\u003c ' ';\n        v8::String::Utf8Value str(args[i]);\n        std::cout \u003c\u003c  *str;\n    }\n    std::cout \u003c\u003c std::endl;\n}\n\nv8::Local\u003cv8::Value\u003e init(v8::Isolate* isolate)\n{\n    v8pp::module m(isolate);\n    m.function(\"log\", \u0026log);\n    return m.new_instance();\n}\n\n} // namespace console\n```\n\n## Turning a v8pp module into a v8pp plugin\n\n```c++\nV8PP_PLUGIN_INIT(v8::Isolate* isolate)\n{\n    return console::init(isolate);\n}\n```\n\n## v8pp class binding example\n\n```c++\n#include \u003cv8pp/module.hpp\u003e\n#include \u003cv8pp/class.hpp\u003e\n\n#include \u003cfstream\u003e\n\nnamespace file {\n\nbool rename(char const* src, char const* dest)\n{\n    return std::rename(src, dest) == 0;\n}\n\nclass file_base\n{\npublic:\n    bool is_open() const { return stream_.is_open(); }\n    bool good() const { return stream_.good(); }\n    bool eof() const { return stream_.eof(); }\n    void close() { stream_.close(); }\n\nprotected:\n    std::fstream stream_;\n};\n\nclass file_writer : public file_base\n{\npublic:\n    explicit file_writer(v8::FunctionCallbackInfo\u003cv8::Value\u003e const\u0026 args)\n    {\n        if (args.Length() == 1)\n        {\n            v8::String::Utf8Value str(args[0]);\n            open(*str);\n        }\n    }\n\n    bool open(char const* path)\n    {\n        stream_.open(path, std::ios_base::out);\n        return stream_.good();\n    }\n\n    void print(v8::FunctionCallbackInfo\u003cv8::Value\u003e const\u0026 args)\n    {\n        v8::HandleScope scope(args.GetIsolate());\n\n        for (int i = 0; i \u003c args.Length(); ++i)\n        {\n            if (i \u003e 0) stream_ \u003c\u003c ' ';\n            v8::String::Utf8Value str(args[i]);\n            stream_ \u003c\u003c *str;\n        }\n    }\n\n    void println(v8::FunctionCallbackInfo\u003cv8::Value\u003e const\u0026 args)\n    {\n        print(args);\n        stream_ \u003c\u003c std::endl;\n    }\n};\n\nclass file_reader : public file_base\n{\npublic:\n    explicit file_reader(char const* path)\n    {\n        open(path);\n    }\n\n    bool open(const char* path)\n    {\n        stream_.open(path, std::ios_base::in);\n        return stream_.good();\n    }\n\n    v8::Local\u003cv8::Value\u003e getline(v8::Isolate* isolate)\n    {\n        if ( stream_.good() \u0026\u0026 ! stream_.eof())\n        {\n            std::string line;\n            std::getline(stream_, line);\n            return v8pp::to_v8(isolate, line);\n        }\n        else\n        {\n            return v8::Undefined(isolate);\n        }\n    }\n};\n\nv8::Local\u003cv8::Value\u003e init(v8::Isolate* isolate)\n{\n    v8::EscapableHandleScope scope(isolate);\n\n    // file_base binding, no .ctor() specified, object creation disallowed in JavaScript\n    v8pp::class_\u003cfile_base\u003e file_base_class(isolate);\n    file_base_class\n        .function(\"close\", \u0026file_base::close)\n        .function(\"good\", \u0026file_base::good)\n        .function(\"is_open\", \u0026file_base::is_open)\n        .function(\"eof\", \u0026file_base::eof)\n        ;\n\n    // .ctor\u003c\u003e template arguments declares types of file_writer constructor\n    // file_writer inherits from file_base_class\n    v8pp::class_\u003cfile_writer\u003e file_writer_class(isolate);\n    file_writer_class\n        .ctor\u003cv8::FunctionCallbackInfo\u003cv8::Value\u003e const\u0026\u003e()\n        .inherit\u003cfile_base\u003e()\n        .function(\"open\", \u0026file_writer::open)\n        .function(\"print\", \u0026file_writer::print)\n        .function(\"println\", \u0026file_writer::println)\n        ;\n\n    // .ctor\u003c\u003e template arguments declares types of file_reader constructor.\n    // file_base inherits from file_base_class\n    v8pp::class_\u003cfile_reader\u003e file_reader_class(isolate);\n    file_reader_class\n        .ctor\u003cchar const*\u003e()\n        .inherit\u003cfile_base\u003e()\n        .function(\"open\", \u0026file_reader::open)\n        .function(\"getln\", \u0026file_reader::getline)\n        ;\n\n    // Create a module to add classes and functions to and return a\n    // new instance of the module to be embedded into the v8 context\n    v8pp::module m(isolate);\n    m.function(\"rename\", \u0026rename)\n     .class_(\"writer\", file_writer_class)\n     .class_(\"reader\", file_reader_class)\n        ;\n\n    return scope.Escape(m.new_instance());\n}\n\n} // namespace file\n\nV8PP_PLUGIN_INIT(v8::Isolate* isolate)\n{\n    return file::init(isolate);\n}\n```\n\n## Creating a v8 context capable of using require() function\n\n```c++\n#include \u003cv8pp/context.hpp\u003e\n\nv8pp::context context;\ncontext.set_lib_path(\"path/to/plugins/lib\");\n// script can now use require() function. An application\n// that uses v8pp::context must link against v8pp library.\nv8::HandleScope scope(context.isolate());\ncontext.run_file(\"some_file.js\");\n```\n\n## Using require() from JavaScript\n\n```javascript\n// Load the file module from the class binding example and the\n// console module.\nvar file    = require('file'),\n    console = require('console')\n\nvar writer = new file.writer(\"file\")\nif (writer.is_open()) {\n    writer.println(\"some text\")\n    writer.close()\n    if (! file.rename(\"file\", \"newfile\"))\n        console.log(\"could not rename file\")\n}\nelse console.log(\"could not open `file'\")\n\nconsole.log(\"exit\")\n```\n\n## Create a handle to an externally referenced C++ class.\n\n```c++\n// Memory for C++ class will remain when JavaScript object is deleted.\n// Useful for classes you only wish to inject.\ntypedef v8pp::class_\u003cmy_class\u003e my_class_wrapper;\nv8::Local\u003cv8::Value\u003e val = my_class_wrapper::reference_external(isolate, \u0026my_class::instance());\n// Assuming my_class::instance() returns reference to class\n```\n\n## Import externally created C++ class into v8pp.\n\n```c++\n// Memory for c++ object will be reclaimed by JavaScript using \"delete\" when\n// JavaScript class is deleted.\ntypedef v8pp::class_\u003cmy_class\u003e my_class_wrapper;\nv8::Local\u003cv8::Value\u003e val = my_class_wrapper::import_external(isolate, new my_class);\n```\n\n## Compile-time configuration\n\nThe library uses several preprocessor macros, defined in `v8pp/config.hpp` file:\n\n  * `V8PP_ISOLATE_DATA_SLOT` - A v8::Isolate data slot number, used to store v8pp internal data\n  * `V8PP_PLUGIN_INIT_PROC_NAME` - Plugin initialization procedure name that should be exported from a v8pp plugin.\n  * `V8PP_PLUGIN_SUFFIX` - Plugin filename suffix that would be added if the plugin name used in `require()` doesn't end with it.\n  * `V8PP_HEADER_ONLY` - Use header-only implemenation, enabled by default.\n\n## v8pp alternatives\n\n* [nbind](https://github.com/charto/nbind)\n* [vu8](https://github.com/tsa/vu8), abandoned\n* [v8-juice](http://code.google.com/p/v8-juice/), abandoned\n* Script bindng in [cpgf](https://github.com/cpgf/cpgf)\n","funding_links":[],"categories":["TODO scan for Android support in followings","Scripting","Uncategorized","Language Bindings","C++"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmed%2Fv8pp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpmed%2Fv8pp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpmed%2Fv8pp/lists"}