Common questions.

If you don't find your answer here, ask on Discord.

It compiles Python source into a hardened native binary (.pyd on Windows, .so on Linux/macOS). The output runs inside a custom virtual machine with randomized opcodes, encrypted constants, and active anti-analysis defenses. Your original .py files are never shipped.

PyArmor encrypts bytecode but ships the .pyc - decryptable with known tooling. Nuitka compiles to C but preserves Python semantics in a debuggable form. PyVMProtect replaces the CPython dispatch loop entirely with a per-build VM whose opcodes, encryption keys, and dispatch structure are unique to every build. There is no universal unpacker.

Python 3.11, 3.12, and 3.13 on Windows x64. Linux x64 support is in beta. macOS support is in development. Free-threaded Python 3.13t (no-GIL) is not yet supported; use @vm_skip for code that requires it.

Functions annotated with @vm_protect run inside the VM at roughly 5-15x slower than native CPython for compute-heavy logic. Functions annotated with @vm_skip run at full native speed with zero overhead. The recommended pattern is to protect security-critical functions (license checks, key derivation, authentication) and skip everything else.

Yes. Submit a .zip of your package. The builder walks the AST, rewrites and compiles protected functions, and emits a single .pyd that imports like a normal Python module. Unprotected modules remain as .py or are bundled alongside.

Source is processed in an isolated build sandbox and deleted immediately after the .pyd is generated. We do not retain your code, store it in logs, or use it for training. HTTPS in transit, no third-party storage.

Yes. The VM has native support for generators (yield, yield from, send(), throw(), close()), async/await coroutines, context managers (with/__enter__/__exit__), closures, default args, *args/**kwargs, and full exception handling.

Static analysis tools (capstone, angr, Ghidra) cannot reconstruct the bytecode because the VM instruction set is unique per build and handler code is encrypted on disk. A sufficiently skilled attacker with kernel-mode access or hardware tracing can still observe execution - no software protection is unconditional. We raise the cost significantly without claiming invincibility.

Protected functions are private by default: their names are stripped and the module dict holds only the VM object. @pvmp_export (or --export name:alias on the CLI) makes a function callable by importers under a public alias, without leaking the internal name as a string anywhere in the binary.

Yes. The REST API (POST /api/v1/job_submit.php → poll /api/v1/job_status.php → GET /api/v1/job_download.php) is designed for automation. See the Docs page for endpoint reference and a Python client example. API key authentication, no browser required.

Free during beta. No credit card required. Limits: 5 builds per day, max 2 MB source zip, free-tier profile (reduced decoy count, no dump detection). Paid tiers with higher limits and premium profiles will launch after beta. Early users get a discount.

Python is the focus. The VM and pipeline are Python-specific (AST mutation, CPython bytecode compilation, .pyd/.so output). No other language targets are planned for the near term.

Join our Discord