Skip to content

Instantly share code, notes, and snippets.

@dnkm
Created February 4, 2026 22:34
Show Gist options
  • Select an option

  • Save dnkm/ec56a90dbfaf6c87f27edbe5a86a85c7 to your computer and use it in GitHub Desktop.

Select an option

Save dnkm/ec56a90dbfaf6c87f27edbe5a86a85c7 to your computer and use it in GitHub Desktop.
pyodide

The best practice for loading Pyodide involves using a CDN for simple, fast integration, utilizing Web Workers to keep the main thread responsive, and using for package management. As Pyodide constitutes a full Python interpreter load (~tens of MBs), performance optimization is critical. [1, 2, 3, 4, 5]
Here are the best practices for loading Pyodide:

  1. Initial Loading (CDN vs. Local)

• Use CDN for Development/Simplicity: The easiest method is to load directly from the jsDelivr CDN: • Host Locally for Production: For better control, reliability, and offline capabilities, download the Pyodide files and serve them from your own web server. • Asynchronous Initialization: Always load Pyodide asynchronously to prevent blocking the browser's main thread: [1, 2, 6, 7, 8]

  1. Performance & Threading

• Use Web Workers: Run Pyodide in a separate Web Worker rather than the main thread. This prevents the UI from freezing during the initial load or while executing long-running Python scripts. • Cache Packages: If you are loading packages frequently, ensure your web server is configured to cache and files to reduce load times. • Load Once, Reuse: Pyodide takes time to initialize (10-15 seconds in some cases). Initialize it once and keep it active instead of creating a new instance for every task. [9, 10, 11, 12, 13]

  1. Package Management

• Use : For loading packages (like NumPy, Pandas, or pure Python libraries), is the recommended method. • Pre-load Packages: To improve user experience, load required packages immediately after initializing Pyodide, rather than waiting for the user to trigger a function that requires them. [14, 15, 16, 17, 18]

  1. Code Structure

• Use Virtual File System for Large Projects: When working with multiple Python files, don't use for hundreds of lines of code. Instead, write your Python code as a package, create a archive, and use or load it via . • Error Handling: Ensure you handle exceptions in JavaScript when running Python code (e.g., using on promises). [19, 20, 21, 22, 23]

Summary Checklist

Area [15, 24, 25] Best Practice
Loading inside an function.
Performance Use Web Workers for UI responsiveness.
Packages Use for PyPI packages.
Custom Code Package scripts as wheels () or tarballs.
Server Enable caching for and files.

AI responses may include mistakes.

[1] https://pyodide.org/en/latest/usage/working-with-bundlers.html [2] https://pyodide.org/_/downloads/en/0.17.0a2/epub/ [3] https://pyodide.org/en/stable/usage/loading-packages.html [4] https://medium.com/@Nexumo_/python-in-the-browser-10-pyodide-wasm-patterns-131278920304 [5] https://python.plainenglish.io/pyodide-bringing-python-to-the-browser-2a99fe98c592 [6] pyodide/pyodide#3946 [7] https://pyodide.org/en/stable/usage/quickstart.html [8] https://pyodide.org/en/0.16.1/faq.html [9] https://pyodide.com/how-do-i-get-started-with-pyodide/ [10] pyodide/pyodide#1406 [11] https://testdriven.io/blog/build-spa-with-python-part-2/ [12] pyodide/pyodide#776 [13] https://testdriven.io/blog/build-spa-with-python-part-1/ [14] https://pyodide.org/en/0.16.1/loading_packages.html [15] https://pyodide.org/en/stable/usage/loading-packages.html [16] https://github.com/pyodide/pyodide/blob/master/docs/usage/loading-packages.md [17] pyodide/pyodide#2703 [18] https://community.dataiku.com/discussion/5480/how-to-read-a-sample-of-a-very-big-file-using-a-python-code-recipe [19] https://pyodide.org/en/stable/usage/loading-custom-python-code.html [20] https://pyodide.org/en/latest/usage/loading-custom-python-code.html [21] https://pyodide.org/ [22] https://stackoverflow.com/questions/76320238/how-to-load-my-own-custom-python-packages-into-pyodide-using-javascript [23] https://pyodide.org/en/stable/usage/wasm-constraints.html [24] https://www.wpbeginner.com/wp-tutorials/what-is-google-inp-score-and-how-to-improve-it-in-wordpress/ [25] https://thisdavej.com/packaging-python-command-line-apps-the-modern-way-with-uv/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment