Monaco Editor Assets
A Python package that provides easy access to Monaco Editor assets. Assets are
automatically downloaded on first use, eliminating the need to bundle large
files with the package. Optionally, the assets can be served by a local
webserver on a custom port (MonacoServer); the required fastapi and
uvicorn packages are installed together with monaco-assets.
Installation
python3 -m pip install monaco-assets
# or
uv pip install monaco-assets
Quick Start
import monaco_assets
server = monaco_assets.MonacoServer(port=8000)
Now, you can use http://localhost:8000/min/vs/loader.js in a webbrowser to see, e.g., loader.js.
Please note that there are no directory listings, one has to directly address the file(s).
Cache Management
import monaco_assets
# Clear cache to free space before uninstalling the package
monaco_assets.clear_cache()
# Check whether the assets are already cached (no download needed)
if monaco_assets.has_cached_assets():
...
else:
# a download will take place; e.g. show a progress indicator
assets_path = monaco_assets.get_path(progress_callback=show_progress)
Download Progress
On a cold cache, get_path() downloads the Monaco Editor assets (~100 MB
extracted). You can report the download progress in real time by passing a
progress_callback that receives (bytes_downloaded, total_bytes):
import monaco_assets
def show_progress(done: int, total: int | None) -> None:
if total is not None:
print(f"\r{done / total:.0%} of {total / 2**20:.1f} MiB", end="", flush=True)
else:
print(f"\r{done / 2**20:.1f} MiB", end="", flush=True)
assets_path = monaco_assets.get_path(progress_callback=show_progress)
Notes:
- The callback is only invoked if a download actually takes place; on a warm
cache
get_path()returns immediately without calling it. If you build progress UI around the call, checkhas_cached_assets()first to avoid showing it unnecessarily. total_bytesisNoneif the server does not send aContent-Lengthheader. The first chunk is always reported; further calls are throttled to at most one per 0.5 seconds, plus a final call when the download completes.- If you call
get_path()from a background thread yourself, make the callback thread-safe accordingly.
Cache Locations
Assets are cached in platform-appropriate directories using the platformdirs library
How It Works
-
First Use: When
get_path()is called for the first time, the package:- Downloads Monaco Editor from npmjs.org
- Verifies the download integrity with SHA1 hash
- Extracts assets to the user cache directory
- Returns the path to the assets
-
Subsequent Uses: The package checks the cache and returns the existing assets path immediately.
Download Issues
If asset download fails:
- Check internet connectivity
- Verify firewall settings allow access to registry.npmjs.org
- Check disk space in cache directory
Cache Issues
Clear and re-download if corrupted.
monaco_assets.clear_cache()
assets_path = monaco_assets.get_path()
Version Correspondence
Version correspondence will be ensured after initial bugfixes.
| Package Version | Monaco Editor Version |
|---|---|
| 0.5.1 | 0.54.0 |
| 0.7.0 | 0.54.0 |
Requirements
- Python 3.10+
- Internet connection (only for initial asset download)
- ~100MB disk space for Monaco Editor assets
License
MIT License - see LICENSE file for details.
Monaco Editor is licensed under the MIT License by Microsoft Corporation.
Metadata
Release files for monaco-assets 0.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| monaco_assets-0.7.1.tar.gz | 6.0 kB | Without provenance | Details for monaco_assets-0.7.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| monaco_assets-0.7.1-py3-none-any.whl | Python 3 | none | any | Details for monaco_assets-0.7.1-py3-none-any.whl |
Total release size: 12.1 kB
Release files / monaco_assets-0.7.1.tar.gz
| Download URL | monaco_assets-0.7.1.tar.gz |
|---|---|
| Size | 6.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6339b17888a12f32c9a86a81a2830c2426ddf5b11b05d5f04b99a8d73d3ad72
|
|
BLAKE2b-256 checksum How to use checksums |
99795f08c2c1bde800de255b5ddbfeeb00947a2003071e914b62946a31cbd20e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / monaco_assets-0.7.1-py3-none-any.whl
| Download URL | monaco_assets-0.7.1-py3-none-any.whl |
|---|---|
| Size | 6.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
243ee1513d62c0d93a5f859d21e6eb86ac8abdf7c93e19d0e19d0a0b696afd5f
|
|
BLAKE2b-256 checksum How to use checksums |
da8020e76cd7b20c4b9cecf2e064cb4aad3448d99bb3ae48a4f8f97f29c81634
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for monaco-assets 0.7.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.