The vm module provides APIs for compiling and running code within V8 virtual machine contexts. Here's how to use it.
Basic Script Execution#
Creating Contexts#
Script Compilation#
Execution Options#
Sandboxed Environment#
Module Support#
Safe Evaluation#
Expression Evaluation#
Template Engine#
Code Analysis#
Worker-like Isolation#
Security Considerations#
Best Practices#
Use Cases:
✓ Simple expression evaluation
✓ Template rendering
✓ Configuration evaluation
✓ Code analysis/validation
Context Setup:
✓ Minimal sandbox
✓ Whitelist allowed APIs
✓ Set timeouts
✓ Validate input
Security:
✓ vm is NOT a security sandbox
✓ Validate/sanitize input
✓ Use for trusted code only
✓ Consider alternatives for untrusted code
Avoid:
✗ Running untrusted code
✗ No timeout limits
✗ Exposing Node.js APIs
✗ Assuming isolation
Conclusion#
The Node.js vm module enables code execution in isolated V8 contexts, useful for template engines, expression evaluation, and code analysis. However, it is NOT a security sandbox - malicious code can escape. Use it for semi-trusted code with input validation and timeouts. For truly untrusted code, consider worker threads, child processes, or purpose-built sandboxing solutions like isolated-vm.