# Pyobfuscate > Pyobfuscate is a free online platform for Python code protection — an AST-based server-side obfuscator plus supporting browser and server-assisted tools for formatting, minifying, linting, compiling, and running Python. ## Core pages and tools - [Home](https://pyobfuscate.com/): Free online Python obfuscator and developer-tool suite. - [Python Obfuscator](https://pyobfuscate.com/python-obfuscator): Free online AST Python obfuscator — rename identifiers, encrypt strings, hide imports and flatten control flow, then download standalone Python. - [All Tools](https://pyobfuscate.com/tools): Directory of every free Python tool on the site. - [Online Python Compiler](https://pyobfuscate.com/online-python-compiler): Run Python 3.11–3.13 in a sandboxed, in-browser environment. - [Python Type Checker](https://pyobfuscate.com/python-type-checker): Type-check Python with mypy in your browser (WebAssembly) — catch type errors, nothing uploaded. - [Marshal Encryptor](https://pyobfuscate.com/marshal-encryption): Compile Python to version-locked marshaled bytecode (3.10–3.13) with a self-contained loader. - [Python .pyc Decompiler](https://pyobfuscate.com/pyc-decompiler): Decompile compiled .pyc bytecode back to source in the browser via WebAssembly (Python 1.x–3.12+). Nothing uploaded. - [Python Bytecode Disassembler](https://pyobfuscate.com/python-bytecode-disassembler): Disassemble Python to CPython bytecode with the dis module (3.11–3.13) — interactive opcodes, code objects, jumps and constants, entirely in your browser. Nothing uploaded. - [Ruff Linter & Formatter Online](https://pyobfuscate.com/online-ruff-linter): Lint and format Python online with Ruff (the fast Rust linter that replaces Flake8, isort and Black) — 100% in your browser via WebAssembly, nothing uploaded. - [Ruff Playground](https://pyobfuscate.com/ruff-playground): Live online Ruff playground — diagnostics, formatted output, AST, tokens and formatter IR with an editable config and shareable links, 100% in your browser. - [Python Script Formatter](https://pyobfuscate.com/python-formatter): Format Python to PEP 8 instantly with Black, autopep8, YAPF or isort — with a before/after diff view and Black options (keep quotes, no magic comma). - [Python Script Minifier](https://pyobfuscate.com/python-minifier): Minify Python with python-minifier: strip comments, docstrings and annotations, rename variables, hoist literals and combine imports — with per-option toggles and a live size readout. - [Python to EXE Online](https://pyobfuscate.com/python-to-exe): Turn a Python script into a standalone .exe online — a GitHub Actions workflow builds Windows, macOS & Linux executables on real runners. Free. - [Python AST Viewer](https://pyobfuscate.com/python-ast-viewer): Visualize and explore the Abstract Syntax Tree of your scripts. - [cURL to Python Converter](https://pyobfuscate.com/curl-to-python): Paste any curl command and instantly get clean Python code for requests, httpx, or aiohttp. - [Python 2 to 3 Converter](https://pyobfuscate.com/python-2-to-3-converter): Automatically migrate legacy version 2 code to modern version 3 syntax. - [Jupyter Notebook Converter](https://pyobfuscate.com/jupyter-notebook-to-python): Convert Jupyter (.ipynb) notebooks into standard (.py) scripts. - [Jupyter Notebook Viewer](https://pyobfuscate.com/ipynb-viewer): Open and view Jupyter .ipynb notebooks in your browser — markdown, code, and outputs — with no Python or Jupyter install. - [Jupyter Notebook Output Cleaner](https://pyobfuscate.com/ipynb-cleaner): Strip saved outputs and execution counts from a Jupyter .ipynb — clean notebooks for git and smaller files, in your browser. - [Modernize Python Type Hints](https://pyobfuscate.com/modernize-type-hints): Convert old Python type hints to modern syntax — typing.List → list, Optional[X] → X | None, Union → |. In your browser. - [ASCII Art Generator](https://pyobfuscate.com/ascii-art-generator): Convert basic text into stylish ASCII art blocks for terminal headers. - [Docs](https://pyobfuscate.com/docs): Documentation and platform overview. ## Guides and comparisons - [Blog & Guides](https://pyobfuscate.com/blog): Tested guides on Python obfuscation and code protection. - [Ruff vs Pylint: Which Python Linter Wins? (Tested)](https://pyobfuscate.com/blog/ruff-vs-pylint): We ran Ruff 0.16.3 and Pylint 4.0.7 on the same 14 lint cases. Compare errors caught, auto-fixes, speed, plugins and the best setup. - [ty vs mypy vs Pyright: Tested Python Type Checkers](https://pyobfuscate.com/blog/ty-vs-mypy-vs-pyright): We ran ty 0.0.72, mypy 2.3.1 and Pyright 1.1.413 on the same Python 3.14 fixtures. Compare diagnostics, strictness, speed and fit. - [PyArmor vs Nuitka vs Cython vs Pyobfuscate (Tested)](https://pyobfuscate.com/blog/pyarmor-vs-nuitka-vs-cython-vs-pyobfuscate): I ran all four on the same script: PyArmor, Nuitka, Cython and Pyobfuscate. Real output sizes, which hide the secret, speed, and which to use — a tested Python code protection comparison. - [Does PyInstaller Protect Python Source Code?](https://pyobfuscate.com/blog/does-pyinstaller-protect-python-source-code): Does PyInstaller protect your source code? No — I built a real exe and extracted the .pyc back out with pyinstxtractor. PyInstaller is packaging, not protection. Here's the proof and the fix. - [Can Python .pyc Files Be Decompiled? (Complete Guide)](https://pyobfuscate.com/blog/can-pyc-files-be-decompiled): Can .pyc files be decompiled? Yes — I tested it across Python 3.8–3.14. What's recoverable (logic, strings), what's lost (comments), how version affects it, and how to protect .pyc. - [Can Python Code Be Decompiled? (Tested Answer)](https://pyobfuscate.com/blog/can-python-code-be-decompiled): Can Python code be decompiled? Yes — .py is plain source, .pyc decompiles and leaks strings, even .pyd/.so can be disassembled. What each format really exposes, tested. - [Python Obfuscation vs Encryption (Explained)](https://pyobfuscate.com/blog/python-obfuscation-vs-encryption): Python obfuscation vs encryption: obfuscation makes code hard to read but still runnable; encryption makes data unreadable until decrypted with a key. Why encryption alone can't protect executable logic — tested. - [Obfuscator vs Compiler vs Packager (Python)](https://pyobfuscate.com/blog/python-obfuscator-vs-compiler-vs-packager): PyInstaller, Cython, Nuitka, PyArmor — obfuscator vs compiler vs packager, explained with real artifacts. Different jobs: hide, compile, or just bundle. Which to use, and how to combine them. - [Compile Python to .pyd / .so with Cython (Tested)](https://pyobfuscate.com/blog/compile-python-to-pyd-so-cython): Compile Python to a native .pyd/.so with Cython — no .py or .pyc to decompile. I built a real module: 56× faster and a 35 KB binary. Honest limits (strings still leak) too. - [Control-Flow Flattening in Python (How It Works)](https://pyobfuscate.com/blog/control-flow-flattening-python): How control-flow flattening obfuscates Python: it rewrites if/else and loops into one while-loop state machine. Real before/after from our obfuscator — same output, unreadable flow. - [Python Variable & Function Renaming (Obfuscation)](https://pyobfuscate.com/blog/variable-function-renaming-obfuscation): Identifier renaming is Python obfuscation's cheapest, irreversible layer. Real before/after from our obfuscator: label/total become noise, the code runs the same, the names are gone for good. - [Junk-Code Injection in Python (Does It Help?)](https://pyobfuscate.com/blog/junk-code-injection-python): Junk-code (dead-code) injection buries Python logic in realistic-looking noise. Real before/after from our obfuscator — a 194-char function became 4,451 chars of plausible junk that still runs. - [Check Ruff Online: How to Run ruff check (Tested)](https://pyobfuscate.com/blog/check-ruff-online): Check Ruff online, free: paste Python and run ruff check in your browser. I ran Ruff 0.16.2 on a messy file — 8 errors, 5 auto-fixable. Real output + how-to. - [Disassemble Python Bytecode: the dis Module (Tested)](https://pyobfuscate.com/blog/disassemble-python-bytecode): Disassemble Python bytecode with the dis module — read opcodes, code objects and jumps, see how it changes per version, and why .pyc isn't protection. Tested. - [Convert Python to EXE Online (No Install, Tested)](https://pyobfuscate.com/blog/convert-python-to-exe-online): Convert Python to an .exe online: why a browser can't truly compile one, and the real no-install path — generate the command, spec & a cloud build. Tested. - [Format Python Code Online (Black, autopep8, YAPF)](https://pyobfuscate.com/blog/format-python-code-online): Format Python online with Black, autopep8, or YAPF — no install. See the same messy code cleaned three ways (tested) and which formatter to pick. - [Modernize Python Type Hints: typing → | None](https://pyobfuscate.com/blog/modernize-python-type-hints): Modernize Python type hints: typing.List → list (PEP 585) and Optional[X] → X | None (PEP 604). Tested equivalences, version caveat, and an online tool. - [Convert Python 2 to 3 Online (2to3 Guide, Tested)](https://pyobfuscate.com/blog/convert-python-2-to-3): Convert Python 2 to 3 the right way: what 2to3 fixes automatically (tested diff), what it can't (text vs bytes), and an online converter — no install. - [How to Minify Python Code (Free, Tested Sizes)](https://pyobfuscate.com/blog/minify-python-code): Minify Python to shrink file size — strip comments/whitespace or rename identifiers. Tested reductions, behavior preserved, and why it isn't protection. - [Convert cURL to Python Requests (Tested Guide)](https://pyobfuscate.com/blog/curl-to-python-requests): Convert any cURL command to Python requests — headers, JSON, auth, params, files. A tested flag-by-flag map, plus an online converter. Proven equivalent. - [How to Open a .ipynb File (Without Jupyter)](https://pyobfuscate.com/blog/open-ipynb-file): Six ways to open a Jupyter .ipynb file: an online viewer (no install), VS Code, GitHub, JupyterLab, nbconvert, or plain Python. Tested — what each gives. - [How to Deobfuscate Python Code (4 Methods)](https://pyobfuscate.com/blog/deobfuscate-python-code): Deobfuscate Python step by step: unpack exec/base64/zlib, re-indent mangled code with AST, disassemble marshal blobs, and pull hidden strings. Tested. - [Convert a Jupyter Notebook to a Python Script](https://pyobfuscate.com/blog/convert-jupyter-notebook-to-python): Three ways to turn a .ipynb into a .py — nbconvert, a no-install browser tool, and a few lines of stdlib. Tested: what each does to magics and outputs. - [Reading a Python AST: A Practical Guide](https://pyobfuscate.com/blog/python-ast-guide): How to read and transform Python code with the ast module — parse, dump, walk, NodeVisitor, and ast.unparse. Real, runnable examples on Python 3.14. - [Python Minification vs Obfuscation (Tested)](https://pyobfuscate.com/blog/python-minification-vs-obfuscation): Minifying shrinks a Python file; obfuscating protects it. I tested both on one script — sizes, whether the secret survives, and whether it still runs. - [Python .pyc Decompiler: 3 Methods, Tested (2026)](https://pyobfuscate.com/blog/python-pyc-decompiler): The 3 ways to decompile a Python .pyc — online decompiler, CLI tools (uncompyle6/pycdc), and stdlib marshal+dis. Tested across Python 3.8–3.14. - [Decompile a PyInstaller EXE Back to Python (Tested)](https://pyobfuscate.com/blog/decompile-pyinstaller-exe): I built a real PyInstaller .exe, then unpacked it with pyinstxtractor and decompiled it back to source. Every step, real commands and output, 2026. - [How to Protect API Keys in Python (Tested)](https://pyobfuscate.com/blog/protect-api-keys-python): I hard-coded an API key, then tried every common way to hide it — base64, config.py, XOR, obfuscation. Here's what leaks, what actually works, and why. - [Is Python Obfuscation Secure? I Broke 5 Methods](https://pyobfuscate.com/blog/is-python-obfuscation-secure): I obfuscated one Python script five common ways, then reverse-engineered each. base64, zlib, marshal, layering, minifier — here is how fast every method fell. - [How to Decompile a Python .pyc File (2026)](https://pyobfuscate.com/blog/decompile-python-pyc): Can you decompile a Python .pyc file back to source? I tested it — strings leak, the bytecode is readable, and it runs without the .py. Here’s exactly what works. - [Python marshal Explained: Bytecode Loaders (2026)](https://pyobfuscate.com/blog/python-marshal-explained): What Python marshal does, how to build a marshaled bytecode loader (with optional zlib compression and -O/-OO), why it’s version-locked (3.10–3.14), and why it is weak protection. Tested. - [Python Obfuscation Explained: Protect Your Code (2026)](https://pyobfuscate.com/blog/python-obfuscation-explained): A complete 2026 guide to Python obfuscation and code protection — how it works, tested examples, bytecode, decompilers, tools, and mistakes to avoid. - [How to Obfuscate Python Code (2026 Complete Guide)](https://pyobfuscate.com/blog/how-to-obfuscate-python-code): Learn how to obfuscate Python code the right way in 2026 — from weak base64 tricks to AST-level obfuscation and compilation. With real, tested examples. - [autopep8 vs Black: Which Formatter? (2026)](https://pyobfuscate.com/blog/autopep8-vs-black): autopep8 vs Black, tested. I ran both on the same messy Python file — real before/after output, quotes, line length, and which one to actually use. - [Convert Python to EXE (Real PyInstaller Guide)](https://pyobfuscate.com/blog/python-to-exe): How to convert a Python script to a .exe — I built a real one with PyInstaller. The exact command, onefile vs onedir sizes, the cross-compile catch, and why an .exe isn’t protection. - [Python Bytecode Explained (Real dis Output)](https://pyobfuscate.com/blog/python-bytecode-explained): What is Python bytecode? A clear, tested explainer — how source compiles to a code object, real dis output, what a .pyc holds, magic numbers, and why bytecode isn’t protection. - [How to Protect Python Source Code (2026)](https://pyobfuscate.com/blog/protect-python-source-code): How to protect Python source code, ranked from weakest to strongest — with a real test showing where minification, .pyc, obfuscation and native compilation actually stand. - [Python String Encryption: 4 Ways, Tested](https://pyobfuscate.com/blog/python-string-encryption): Python string encryption, tested. base64, XOR, Fernet and AST obfuscation — what actually hides a string in your code, what’s trivially reversible, and the limit you can’t code around. - [Run Python in Your Browser (No Install)](https://pyobfuscate.com/blog/run-python-in-browser): Run Python online with no install — real examples: execute a script, pip-install numpy, and test Python 3.13 features in the browser. Client-side vs server-side compilers explained. - [charset-normalizer: Detect Encoding in Python](https://pyobfuscate.com/blog/charset-normalizer-python): How to detect a file's text encoding in Python with charset-normalizer — plus a no-install stdlib fallback. I ran both against 33 real samples across 7 encodings. Here are the numbers. - [LangGraph vs Pydantic AI: Which to Use in 2026?](https://pyobfuscate.com/blog/langgraph-vs-pydantic-ai): LangGraph vs Pydantic AI in 2026. I built the same agent in both and measured install size, lines of code, and durability. Real numbers, honest verdict. - [Architect GenAI Into Your Python Backend (2026)](https://pyobfuscate.com/blog/genai-python-backend-architecture): Architect generative AI into a Python backend: FastAPI streaming, a semantic vector cache, and a pgvector schema — with real latency numbers I measured. - [uv: The Fast Python Package Manager (2026 Guide)](https://pyobfuscate.com/blog/uv-python-package-manager): uv replaces pip, virtualenv, pyenv and pipx in one Rust binary. I benchmarked it on Python 3.14: 31x faster installs than pip. Real tests, honest tradeoffs. - [Ruff vs Flake8 & Black: Real Benchmarks (2026)](https://pyobfuscate.com/blog/ruff-vs-flake8): Ruff replaces Flake8, isort and Black in one Rust tool. I benchmarked it: 53× faster than Flake8 on 1,677 files. Real lint + format tests, honest caveats. - [Ruff Format vs Black: Is It a Drop-in Replacement?](https://pyobfuscate.com/blog/ruff-format-vs-black): I formatted 124 real files with both Ruff and Black — 86% came out byte-identical, and ruff format ran 29× faster. Is it a drop-in Black replacement? Real tests. - [What Is PyArmor? How It Works + Free Alternatives](https://pyobfuscate.com/blog/what-is-pyarmor): What PyArmor is, how it obfuscates Python (tested on a real build), 2026 pricing (Basic $52 / Pro $89), the free trial limits, and honest free alternatives. - [Python Static Code Analysis: 5 Tools, Tested](https://pyobfuscate.com/blog/python-static-code-analysis): I ran Ruff, Pylint, Flake8, Bandit and mypy on the same 30-line buggy Python file. Real output, what each caught, and which static analysis tools to actually use. - [Can PyArmor Be Deobfuscated? (Honest Answer)](https://pyobfuscate.com/blog/can-pyarmor-be-deobfuscated): Is there a PyArmor deobfuscator? I tested the standard decompiler toolkit against PyArmor output — it fails. Here is the honest picture of what is and isn’t reversible. - [Python Beautifier: Prettify Code & Pretty-Print Data](https://pyobfuscate.com/blog/python-code-beautifier): "Beautify Python" means two things. I tested both: reformatting code with Black vs autopep8, and pretty-printing dicts/JSON with pprint vs json.dumps. Real output. - [Decompile a Python 3.14 .pyc? (Tested 2026)](https://pyobfuscate.com/blog/decompile-python-3-14-pyc): I tested pycdc, uncompyle6 and the stdlib on a real Python 3.14 .pyc. Full decompilers fail with "Bad MAGIC", but marshal + dis still recover the strings and logic. - [Run a Jupyter Notebook Online Free (No Install)](https://pyobfuscate.com/blog/run-jupyter-notebook-online): Run, view, convert or clean a Jupyter notebook online — free, no install. Full interactive kernels (Colab, JupyterLite) plus lightweight browser tools, compared and tested. - [Best Online Python Compilers 2026 (Compared)](https://pyobfuscate.com/blog/best-online-python-compiler): Compared: the best online Python compilers in 2026 — Colab, Replit, Programiz, OnlineGDB and in-browser (Pyodide) runners — by Python version, pip support, privacy and login. - [Online Python Compiler With Libraries (pip)](https://pyobfuscate.com/blog/online-python-compiler-with-libraries): Yes, you can run Python online with libraries — pip-install numpy, pandas, requests and 300+ more, even in the browser. How package support works online, tested, and its limits. - [Best Python to EXE Converters Compared (2026)](https://pyobfuscate.com/blog/python-to-exe-converters-compared): PyInstaller vs Nuitka vs cx_Freeze vs py2exe vs auto-py-to-exe — the best Python-to-EXE converters compared by output, protection and ease, including py-to-exe without PyInstaller. - [Comparisons](https://pyobfuscate.com/compare): Honest side-by-side comparisons of Python protection tools (PyArmor, Nuitka, PyInstaller, Cython, Pyobfuscate). - [PyArmor vs Pyobfuscate: Free PyArmor Alternative 2026](https://pyobfuscate.com/compare/pyarmor-vs-pyobfuscate): Looking for a free PyArmor alternative? See how Pyobfuscate — free, web-based, server-processed, no runtime — compares to PyArmor on protection, DRM and price. - [Nuitka vs PyArmor 2026: Compiler vs DRM, Which Wins?](https://pyobfuscate.com/compare/nuitka-vs-pyarmor): Nuitka compiles Python to a fast, hard-to-reverse binary; PyArmor adds obfuscation + licensing/DRM. See which fits your goal — and when to use both. - [PyInstaller vs Nuitka (2026): Which Should You Use?](https://pyobfuscate.com/compare/pyinstaller-vs-nuitka): PyInstaller bundles your Python app into an executable; Nuitka compiles it to native code. Compare protection, performance and build speed. - [Cython vs Nuitka (2026): Which Python Compiler Wins?](https://pyobfuscate.com/compare/cython-vs-nuitka): Cython optimizes hot modules with type hints; Nuitka compiles whole programs automatically. Compare performance, effort, output and source protection. - [PyArmor Free vs Pro (2026) – Is the Paid License Worth It?](https://pyobfuscate.com/compare/pyarmor-free-vs-pro): A clear breakdown of PyArmor free vs its paid licenses — obfuscation modes, runtime restrictions, DRM features, and when to upgrade. - [Best Python Obfuscator 2026 – Free & Paid Tools Compared](https://pyobfuscate.com/compare/best-python-obfuscator-2026): The best Python obfuscators and code-protection tools in 2026 — Pyobfuscate, PyArmor, Nuitka and more, with honest pros, cons and picks. ## Policies and contact - [About](https://pyobfuscate.com/about): Who builds Pyobfuscate and the tested, honest approach behind every tool and guide. - [Contact](https://pyobfuscate.com/contact): Support and business inquiries. - [Privacy Policy](https://pyobfuscate.com/privacy): How cookies and third-party advertising (Google AdSense) are used on the site, and how to opt out. - [Terms of Service](https://pyobfuscate.com/terms): Terms governing use of the free tools. ## Notes - Generated from the site's route manifest, so this list stays complete and current (88 public URLs). It mirrors sitemap.xml.