Skip to content

Releases: reactive-python/reactpy

reactpy v2.0.0b2

31 May 23:48
Compare
Choose a tag to compare
reactpy v2.0.0b2 Pre-release
Pre-release

Summary

Welcome to the first public beta release of ReactPy v2, which brings ReactPy Standalone Mode, and ReactPy ASGI Middleware! That's right, ReactPy is now fully compatible with all ASGI frameworks!

You can give this version a try by typing pip install reactpy --pre.

Here is a quick demo of the new ReactPy Standalone mode:

# FILENAME: example.py
from reactpy import component, html
from reactpy import ReactPy

@component
def ExampleComponent():
    return html.div("Hello World")

app = ReactPy(ExampleComponent)
# Now you can run `uvicorn example:app --reload` to start ReactPy!

Here is a quick demo of the new ReactPy Middleware mode (using Starlette for demonstration purposes):

# FILENAME: example.py
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.templating import Jinja2Templates
from reactpy import ReactPyMiddleware

# You will need to follow your framework's guidelines on installing Jinja extensions
# When our new Jinja extension is installed, the `{% component "example.path" %}` tag will be available in any Jinja template.
# The template tag currently accepts a single argument, which is the dotted path to the component.
# For example {% component "my_package.ExampleComponent" %}
templates = Jinja2Templates(
    directory="templates",
    extensions=["reactpy.jinja.ReactPyTemplateTag"],
)

async def homepage(request):
    return templates.TemplateResponse(request, "index.html")

app = ReactPyMiddleware(
    Starlette(routes=[Route("/", homepage)]),
    # Register components with ReactPy to allow them to be used as a root component in your templates
    root_components=["my_package.ExampleComponent"],
)
# Now you can run `uvicorn example:app --reload` to start ReactPy!

Changelog

Added

  • Added reactpy.executors.asgi.ReactPy that can be used to run ReactPy in standalone mode via ASGI.
  • Added reactpy.executors.asgi.ReactPyPyodide that can be used to run ReactPy in standalone mode via ASGI, but rendered entirely client-sided.
  • Added reactpy.executors.asgi.ReactPyMiddleware that can be used to utilize ReactPy within any ASGI compatible framework.
  • Added reactpy.templatetags.Jinja that can be used alongside ReactPyMiddleware to embed several ReactPy components into your existing application. This includes the following template tags: {% component %}, {% pyscript_component %}, and {% pyscript_setup %}.
  • Added reactpy.pyscript_component that can be used to embed ReactPy components into your existing application.
  • Added uvicorn and jinja installation extras (for example pip install reactpy[jinja]).
  • Added support for Python 3.12 and 3.13.
  • Added reactpy.use_async_effect hook.
  • Added shutdown_timeout parameter to the reactpy.use_async_effect hook.
  • reactpy.html will now automatically flatten lists recursively (ex. reactpy.html(["child1", ["child2"]]))
  • Added reactpy.Vdom primitive interface for creating VDOM dictionaries.
  • Added type hints to reactpy.html attributes.
  • Added support for nested components in web modules
  • Added support for inline JavaScript as event handlers or other attributes that expect a callable via reactpy.types.InlineJavaScript

Changed

  • Substitute client-side usage of react with preact.
  • Script elements no longer support behaving like effects. They now strictly behave like plain HTML script elements.
  • The reactpy.html module has been modified to allow for auto-creation of any HTML nodes. For example, you can create a <data-table> element by calling html.data_table().
  • Change set_state comparison method to check equality with == more consistently.
  • Add support for rendering @component children within vdom_to_html.
  • Renamed the use_location hook's search attribute to query_string.
  • Renamed the use_location hook's pathname attribute to path.
  • Renamed reactpy.config.REACTPY_DEBUG_MODE to reactpy.config.REACTPY_DEBUG.
  • @reactpy/client now exports React and ReactDOM.
  • ReactPy no longer auto-converts snake_case props to camelCase. It is now the responsibility of the user to ensure that props are in the correct format.
  • reactpy.utils.reactpy_to_string will now retain the user's original casing for data-* and aria-* attributes.
  • reactpy.utils.string_to_reactpy has been upgraded to handle more complex scenarios without causing ReactJS rendering errors.
  • reactpy.core.vdom._CustomVdomDictConstructor has been moved to reactpy.types.CustomVdomConstructor.
  • reactpy.core.vdom._EllipsisRepr has been moved to reactpy.types.EllipsisRepr.
  • reactpy.types.VdomDictConstructor has been renamed to reactpy.types.VdomConstructor.

Removed

  • Removed the ability to import reactpy.html.* elements directly. You must now call html.* to access the elements.
  • Removed reactpy.sample module.
  • Removed reactpy.svg module. Contents previously within reactpy.svg.* can now be accessed via html.svg.*.
  • Removed reactpy.html._ function. Use html.fragment instead.
  • Removed reactpy.run. See the documentation for the new method to run ReactPy applications.
  • Removed reactpy.backend.*. See the documentation for the new method to run ReactPy applications.
  • Removed reactpy.core.types module. Use reactpy.types instead.
  • Removed reactpy.utils.html_to_vdom. Use reactpy.utils.string_to_reactpy instead.
  • Removed reactpy.utils.vdom_to_html. Use reactpy.utils.reactpy_to_string instead.
  • All backend related installation extras (such as pip install reactpy[starlette]) have been removed.
  • Removed deprecated function module_from_template.
  • Removed support for Python 3.9.
  • Removed support for async functions within reactpy.use_effect hook. Use reactpy.use_async_effect instead.
  • Removed reactpy.vdom. Use reactpy.Vdom instead.
  • Removed reactpy.core.make_vdom_constructor. Use reactpy.Vdom instead.
  • Removed reactpy.core.custom_vdom_constructor. Use reactpy.Vdom instead.

Fixed

  • Fixed a bug where script elements would not render to the DOM as plain text.
  • Fixed a bug where the key property provided via server-side ReactPy code was failing to propagate to the front-end JavaScript component.
  • Fixed a bug where RuntimeError("Hook stack is in an invalid state") errors would be provided when using a webserver that reuses threads.

reactpy v1.1.0

24 Nov 10:44
7a6c31e
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: reactpy-v1.0.2...reactpy-v1.1.0

@reactpy/client v0.3.2

11 Jan 01:58
e09d09c
Compare
Choose a tag to compare

Fixes needless JavaScript component recreation

reactpy v1.0.2

04 Jul 05:29
5582431
Compare
Choose a tag to compare

What's Changed

Full Changelog: reactpy-v1.0.1...reactpy-v1.0.2

reactpy v1.0.1

16 Jun 16:48
9bf3db7
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: https://github.com/reactive-python/reactpy/compare/@reactpy/client-v0.3.1...reactpy-v1.0.1

@reactpy/client v0.3.1

11 Apr 06:30
0aab4b0
Compare
Choose a tag to compare
use abstract class (#968)

* use abstract class

* include source map in dist

@reactpy/client v0.3.0

11 Apr 04:27
b1951cc
Compare
Choose a tag to compare
@reactpy/client-v0.3.0

define a better client interface (#967)

event-to-object v0.1.1

02 Apr 02:27
3a009b6
Compare
Choose a tag to compare
fix event-to-object + fix npm release (#962)

* fix event-to-object + fix npm release

* fix sanic error

@reactpy/client v0.2.1 and event-to-object v0.1.2

02 Apr 03:11
b15b43d
Compare
Choose a tag to compare
fix JS dist artifacts (#963)

* fix reactpy client dist

* bump event to object too

event-to-object v0.1.0

01 Apr 21:38
82a8bd6
Compare
Choose a tag to compare
rewrite the client in typescript (#951)

* initial work to rewrite the client in typescript

* minor fixes

* fix js tests

* misc fixes

* rewrite event-to-object

* rewrite event-to-object tests

* finish tests

* improve typescript configuration

* show npm version

* workspace order

* minor fixes

* rework docs extension + misc changes

* build before check types

* fix typos

* move client under namespace dir

* fix types in noxfile