Skip to main content

Minimal, modern embedded V8 for Python.

Project description

PyPI status indicator Github workflow status indicator ISC License

Minimal, modern embedded V8 for Python.

MiniRacer logo: a V8 with a very snakey 8

Features

  • Latest ECMAScript support
  • Web Assembly support
  • Unicode support
  • Thread safe
  • Re-usable contexts

MiniRacer can be easily used by Django or Flask projects to minify assets, run babel or WASM modules.

Examples

MiniRacer is straightforward to use:

    $ pip install mini-racer

and then:

    $ python3
    >>> from py_mini_racer import MiniRacer
    >>> ctx = MiniRacer()
    >>> ctx.eval("1+1")
    2
    >>> ctx.eval("var x = {company: 'Sqreen'}; x.company")
    'Sqreen'
    >>> print(ctx.eval("'❤'"))
    
    >>> ctx.eval("var fun = () => ({ foo: 1 });")

Variables are kept inside of a context:

    >>> ctx.eval("x.company")
    'Sqreen'

While eval only supports returning primitive data types such as strings, call supports returning composite types such as objects:

    >>> ctx.call("fun")
    {'foo': 1}

Composite values are serialized using JSON. Use a custom JSON encoder when sending non-JSON encodable parameters:

    import json

    from datetime import datetime

    class CustomEncoder(json.JSONEncoder):

            def default(self, obj):
                if isinstance(obj, datetime):
                    return obj.isoformat()

                return json.JSONEncoder.default(self, obj)
    >>> ctx.eval("var f = function(args) { return args; }")
    >>> ctx.call("f", datetime.now(), encoder=CustomEncoder)
    '2017-03-31T16:51:02.474118'

MiniRacer is ES6 capable:

    >>> ctx.execute("[1,2,3].includes(5)")
    False

MiniRacer supports the ECMA Intl API:

    # Indonesian dates!
    >>> ctx.eval('Intl.DateTimeFormat(["ban", "id"]).format(new Date())')
    '16/3/2024'

V8 heap information can be retrieved:

    >>> ctx.heap_stats()
    {'total_physical_size': 1613896,
     'used_heap_size': 1512520,
     'total_heap_size': 3997696,
     'total_heap_size_executable': 3145728,
     'heap_size_limit': 1501560832}

A WASM example is available in the tests.

Compatibility

PyMiniRacer is compatible with Python 3.8-3.12 and is based on ctypes.

PyMiniRacer is distributed using wheels on PyPI. The wheels are intended to provide compatibility with:

OS x86_64 aarch64
macOS ≥ 10.9
Windows ≥ 10
Ubuntu ≥ 20.04
Debian ≥ 11
RHEL ≥ 8
other Linuxes with glibc ≥ 2.31
Alpine ≥ 3.19
other Linux with musl ≥ 1.2

If you have a up-to-date pip and it doesn't use a wheel, you might have an environment for which no wheel is built. Please open an issue.

Developing and releasing PyMiniRacer

See the contribution guide.

Credits

Built with love by Sqreen.

PyMiniRacer launch was described in this blog post.

PyMiniRacer is inspired by mini_racer, built for the Ruby world by Sam Saffron.

In 2024, PyMiniRacer was revived, and adopted by Ben Creech. Upon discussion with the original Sqreen authors, we decided to re-launch PyMiniRacer as a fork under https://github.com/bpcreech/PyMiniRacer and https://pypi.org/project/mini-racer/.

Release history

0.7.0 (2024-03-06)

  • Update V8 to 12.2
  • Drop Python 2 support
  • Fix small Python 3.12 issue and add testing for Python 3.9-3.12
  • Add aarch64 support for Mac and Linux
  • Revamp DLL loading to be compliant with Python 3.9-style resource loading. This may present a small breaking change for advanced usage; the EXTENSION_PATH and EXTENSION_NAME module variables, and MiniRacer.v8_flags and MiniRacer.ext class variable have all been removed.
  • Add support for the ECMAScript internalization API and thus the ECMA Intl API
  • Use fast startup snapshots
  • Switch from setuptools to Hatch
  • Switch from tox to Hatch
  • Switch from flake8 and isort to Hatch's wrapper of Ruff
  • Switch from Sphinx to mkdocs (and hatch-mkdocs)
  • Switch from unittest to pytest
  • Add ARCHITECTURE.md and lots of code comments

0.6.0 (2020-04-20)

  • Update V8 to 8.9
  • Optimize function calls without arguments
  • Switch V8 to single threaded mode to avoid crashes after fork
  • Switch to strict mode by default
  • Revamp documentation

0.5.0 (2020-02-25)

  • Update V8 to 8.8

0.4.0 (2020-09-22)

  • Universal wheels for Linux, Mac and Windows
  • Fallback to source package for Alpine Linux

0.3.0 (2020-06-29)

  • Introduce a strict mode
  • Fix array conversion when size changes dynamically (CVE-2020-25489)

0.2.0 (2020-03-11)

  • Support for Alpine Linux
  • Avoid pip private modules in setup.py

0.2.0b1 (2020-01-09)

  • Support for Windows 64 bits
  • Support for Python 3.8
  • Upgrade V8 to 7.8
  • Support soft memory limits

0.1.18 (2019-01-04)

  • Support memory and time limits

0.1.17 (2018-19-12)

  • Upgrade libv8
  • Fix a memory leak

0.1.16 (2018-07-11)

  • Add wheel for Python without PyMalloc

0.1.15 (2018-06-18)

  • Add wheel for Python 3.7

0.1.14 (2018-05-25)

  • Add support for pip 10
  • Update package metadata

0.1.13 (2018-03-15)

  • Add heap_stats function
  • Fix issue with returned strings containing null bytes

0.1.12 (2018-17-04)

  • Remove dependency to enum

0.1.11 (2017-07-11)

  • Add compatibility for centos6

0.1.10 (2017-03-31)

  • Add the possibility to pass a custom JSON encoder in call.

0.1.9 (2017-03-24)

  • Fix the compilation for Ubuntu 12.04 and glibc < 2.17.

0.1.8 (2017-03-02)

  • Update targets build for better compatibility with old Mac OS X and linux platforms.

0.1.7 (2016-10-04)

  • Improve general performances of the JS execution.
  • Add the possibility to build a different version of V8 (for example with debug symbols).
  • Fix a conflict that could happens between statically linked libraries and dynamic ones.

0.1.6 (2016-08-12)

  • Add error message when py_mini_racer sdist fails to build asking to update pip in order to download the pre-compiled wheel instead of the source distribution.

0.1.5 (2016-08-04)

  • Build py_mini_racer against a static Python. When built against a shared library python, it doesn't work with a static Python.

0.1.4 (2016-08-04)

  • Ensure JSEvalException message is converted to unicode

0.1.3 (2016-08-04)

  • Fix extension loading for python3
  • Add a make target for building distributions (sdist + wheels)
  • Fix eval conversion for python 3

0.1.2 (2016-08-03)

  • Fix date support
  • Fix Dockerfile for generating python3 wheels

0.1.1 (2016-08-02)

  • Fix sdist distribution.

0.1.0 (2016-08-01)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mini_racer-0.7.0.tar.gz (401.5 kB view details)

Uploaded Source

Built Distributions

mini_racer-0.7.0-py3-none-win_amd64.whl (12.9 MB view details)

Uploaded Python 3 Windows x86-64

mini_racer-0.7.0-py3-none-musllinux_1_2_x86_64.whl (14.4 MB view details)

Uploaded Python 3 musllinux: musl 1.2+ x86-64

mini_racer-0.7.0-py3-none-musllinux_1_2_aarch64.whl (14.6 MB view details)

Uploaded Python 3 musllinux: musl 1.2+ ARM64

mini_racer-0.7.0-py3-none-manylinux_2_31_x86_64.whl (14.4 MB view details)

Uploaded Python 3 manylinux: glibc 2.31+ x86-64

mini_racer-0.7.0-py3-none-manylinux_2_31_aarch64.whl (14.5 MB view details)

Uploaded Python 3 manylinux: glibc 2.31+ ARM64

mini_racer-0.7.0-py3-none-macosx_11_0_arm64.whl (14.2 MB view details)

Uploaded Python 3 macOS 11.0+ ARM64

mini_racer-0.7.0-py3-none-macosx_10_9_x86_64.whl (15.1 MB view details)

Uploaded Python 3 macOS 10.9+ x86-64

File details

Details for the file mini_racer-0.7.0.tar.gz.

File metadata

  • Download URL: mini_racer-0.7.0.tar.gz
  • Upload date:
  • Size: 401.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for mini_racer-0.7.0.tar.gz
Algorithm Hash digest
SHA256 28920d8d7d35e60505f9fcc319acbb2aaf13d7aaff6ab79bd0a89dc10956a9f0
MD5 c87c81f70e8ff6873db3742e83ff2ba5
BLAKE2b-256 0fc16356b3768e612c2ede5263104bb876fc3ef12022f78304ae5b26e760e25c

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: mini_racer-0.7.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 12.9 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for mini_racer-0.7.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 9e433d55933a7af0f5bacbee6b917956cef8b70c9359f18fc48d7e0149c6298c
MD5 70878d2e08c26c47b30fc76b8b996130
BLAKE2b-256 b2490e631804fc33fb6932d7f32b949b4edf92f5cefb5a3ab3bff17cce4767ab

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for mini_racer-0.7.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 681989da68653ff9152be2f8850b4f318cfd8059842859fb5e9f1886b3deac22
MD5 b3c2701d691f22265d6e293d5ba211a1
BLAKE2b-256 d58bdf02a9e864091806b7f74f4ab4e098f024c569fb79100b27faec33805e4d

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for mini_racer-0.7.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 42966bf615d05e1f44991dc651ed092d8241e5e93a16bd886376bb00e391f160
MD5 4d6a932701e0820f17b1b98c22edba79
BLAKE2b-256 9d83f01bd8c4cc83fe710fc73cd2252635af1fd922f5ac04f0c97accc8820ad3

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for mini_racer-0.7.0-py3-none-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 aa6dbe6bff38067d7dee42337638a4cdc3341626c6dadd2d12bf32c0a9f5962c
MD5 1a0ddfeeb113e43e43877cfca537f2e9
BLAKE2b-256 ebd3a15dbb103540e9dd6ca0f497cee69cdde1de5736b148aefddf37c4b78f15

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for mini_racer-0.7.0-py3-none-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 7baacc8ccb1470420b2bce796c4d9f9cff50fd14b00729e68cc3c9ba85fcc6d4
MD5 bb3129fc2d6af84e00e2d0fdb2e41f57
BLAKE2b-256 d6c2daca978d964e20440d2f2306c1ed517311a3f2547ca9f9deb0d2071dde0d

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mini_racer-0.7.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4d2d941bf3f6e5000d61e1d373fcea87e8c0f23fa29db25345e80f24d7be7e3f
MD5 3275cf10a1da430f33fc1a4e4be5b2b7
BLAKE2b-256 34d791f0c59f265ecdd5d4ae9b48a8843b6b9a121e650c3a289c6857d51a03de

See more details on using hashes here.

File details

Details for the file mini_racer-0.7.0-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for mini_racer-0.7.0-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4b5fb2ace3f214fd13ac303768b36b124b125d771bafb2c8ab1924b2ed9d1fbe
MD5 18ffa872a4b5ec847cb4a14523130ae0
BLAKE2b-256 a93a740dda927de6b36302bb92b13391b65ceffa506890435fadfe344bc15a01

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page