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.