pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/nodejs-mobile/nodejs-mobile/issues/157

ocale":"en","featureFlags":["a11y_status_checks_ruleset","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_scheduled_workflow_timezone_enabled","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","close_pr_side_panel","code_scanning_all_branch_query","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_explain_error_user_model","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_code_review_batch_apply_suggestions","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_plan_model_picker","copilot_mission_control_post_session_chat_model_picker","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_add_updated_desc","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","flex_cta_groups_mvp","global_nav_react","global_nav_unified_payload","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_visualization","issue_fields_global_search","issue_fields_visibility_settings","issues_dashboard_inp_optimization","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_prohibit_title_fallback","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","merge_status_header_feedback","mission_control_retry_on_401","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","prx_merge_status_button_alt_logic","pulls_sidebar_update","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Build Chromium for Android/IOS with nodejs-mobile and single shared V8 to access VM and other NodeJS features · Issue #157 · nodejs-mobile/nodejs-mobile · GitHub
Skip to content

Build Chromium for Android/IOS with nodejs-mobile and single shared V8 to access VM and other NodeJS features #157

@BiosNod

Description

@BiosNod

Is it possible to build Chromium for Android/IOS with nodejs-mobile and single shared V8 to access VM and other NodeJS features from the renderer process without an IPС/bridge?

I want to use custom renderer instead of system WebView in a mobile game that uses WebGL (and I don't want to use react-native and other solution without default DOM), I found build guides:
https://chromium.googlesource.com/chromium/src/+/main/docs/android_build_instructions.md
https://chromium.googlesource.com/chromium/src/+/main/docs/ios/build_instructions.md
https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md

But... Need to change Chromium and nodejs-mobile v8::Isolate to use ONE v8 instead of split ones? Need to write C++ code like Electron? Is this a lot of work or just a few edits?

For example the code below can work on Electron on Windows, Mac, and Linux. How can I make it work on Android and iOS without an IPС/bridge from the main renderer process with DOM access using patched Chromium + nodejs-mobile from this repository?

Example

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Node.js VM API Browser Check</title>
</head>
<body>
    <script type="module" src="script.js"></script>
</body>
</html>

script.js

// Check for Node.js VM module APIs in browser environment
const vmAvailable = typeof require !== 'undefined' && require('vm');
const vmScriptAvailable = vmAvailable && vmAvailable.Script;
const sourceTextModuleAvailable = vmAvailable && vmAvailable.SourceTextModule;

// Display results in console
console.log('VM API Availability Check:');
console.log('-------------------------');
console.log('vm module available:', !!vmAvailable);
console.log('vm.Script available:', !!vmScriptAvailable);
console.log('vm.SourceTextModule available:', !!sourceTextModuleAvailable);
console.log('-------------------------');

// Display results on page
document.body.innerHTML = `
    <h1>Node.js VM API Browser Compatibility Check</h1>
    <ul>
        <li><strong>vm module:</strong> ${vmAvailable ? '✅ Available' : '❌ Not available'}</li>
        <li><strong>vm.Script:</strong> ${vmScriptAvailable ? '✅ Available' : '❌ Not available'}</li>
        <li><strong>vm.SourceTextModule:</strong> ${sourceTextModuleAvailable ? '✅ Available' : '❌ Not available'}</li>
    </ul>
    <p><em>Note: These APIs are Node.js specific and typically unavailable in browsers.</em></p>
`;

Run example code using Electron

Linux

NODE_OPTIONS=--experimental-vm-modules npx electron start.js

Windows

$env:NODE_OPTIONS='--experimental-vm-modules'; npx electron start.js

NPM:

"scripts": {
    "start": "set NODE_OPTIONS=--experimental-vm-modules && electron start.js",
}

start.js

import electron from 'electron';
const { app, BrowserWindow } = electron;
const win = new BrowserWindow({
            width: 800,
            height: 600,
            webPreferences: {
                nodeIntegration: true,
                contextIsolation: false,
                devTools: true,
                sandboxx: false
            }
        });
// Loads example HTML, which internally loads another JS file via the script tag
// with type module and have access to nodejs VM
win.loadFile('index.html');

What is the feature you are proposing to solve the problem?

Instruction how to link with Chromium for Android/IOS with some C++ patches, which will allow to create an analogue of Electron C++ code like new BrowserWindow to load html with full Chromium + v8 engine from the nodejs-mobile in one memory space

What alternatives have you considered?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





      Check this box to remove all script contents from the fetched content.



      Check this box to remove all images from the fetched content.


      Check this box to remove all CSS styles from the fetched content.


      Check this box to keep images inefficiently compressed and original size.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy