Metadata-Version: 2.1
Name: writer
Version: 0.6.0rc5
Summary: An open-source, Python framework for building feature-rich apps that are fully integrated with the Writer platform.
Home-page: https://www.writer.com
Keywords: data apps,gui,ui,framework,writer framework
Author: Writer, Inc.
Requires-Python: >=3.9.2,<4.0
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: authlib (>=1.3.0,<2.0.0)
Requires-Dist: fastapi (>=0.89.1,<1)
Requires-Dist: gitignore-parser (>=0.1.11,<0.2.0)
Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
Requires-Dist: pandas (>=2.2.0,<3)
Requires-Dist: plotly (>=5.18.0,<6)
Requires-Dist: pyarrow (>=15.0.0,<16.0.0)
Requires-Dist: pydantic (>=2.6.0,<3)
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
Requires-Dist: pytz (>=2024.1,<2025.0)
Requires-Dist: requests (>=2.31.0,<3.0.0)
Requires-Dist: uvicorn (>=0.20.0,<1)
Requires-Dist: watchdog (>=3.0.0,<4)
Requires-Dist: websockets (>=12,<13)
Requires-Dist: writer-sdk (==0.1.0a3)
Project-URL: Documentation, https://developer.writer.com/framework
Project-URL: Repository, https://www.github.com/streamsync-cloud/streamsync
Description-Content-Type: text/markdown

## What is Streamsync?

[![PyPi](https://img.shields.io/pypi/v/streamsync.svg?label=Version)](https://pypi.org/project/streamsync/)
[![CI](https://github.com/streamsync-cloud/streamsync/actions/workflows/ci.yml/badge.svg)](https://github.com/streamsync-cloud/streamsync/actions/workflows/ci.yml)
[![Discord](https://img.shields.io/badge/discord-streamsync-sn677E3Pd3?logo=discord&logoColor=white)](https://discord.gg/sn677E3Pd3)
[![License](https://img.shields.io/pypi/l/streamsync)](LICENSE)

Writer Framework is an open-source framework for creating data apps. Build user interfaces using a visual editor; write the backend code in Python.

![Writer Framework Builder screenshot](https://raw.githubusercontent.com/streamsync-cloud/streamsync/master/docs/docs/public/sc1.png "Writer Framework Builder screenshot")

- [Live demo](https://hello.streamsync.cloud/) of an app. [Source code](https://github.com/streamsync-cloud/streamsync/blob/master/apps/hello/main.py).
- [1 minute introduction video](https://youtu.be/XBAPBy_zf8s) on YouTube

It's an alternative to Plotly Dash, Streamlit and Gradio. Its focused on the creation of web applications for data analytics and machine learning.

It aims to be as simple as Streamlit, but faster, more flexible and with a cleaner, easily-testable syntax. It provides separation of concerns between UI and business logic, enabling more complex applications.

## Highlights

### Reactive and state-driven

Writer Framework is **fully state-driven** and provides **separation of concerns** between user interface and business logic.

```py
import writer as wf

def handle_increment(state):
    state["counter"] += 1

wf.init_state({
    "counter": 0
})
```

The user interface is a template, which is defined visually. The template contains reactive references to state, e.g. `@{counter}`, and references to event handlers, e.g. when _Button_ is clicked, trigger `handle_increment`.

### Flexible

- Elements are highly customisable with no CSS required, allowing for shadows, button icons, background colours, etc.
- HTML elements with custom CSS can be included using the _HTML Element_ component. They can serve as containers for built-in components.

### Fast

- Event handling adds minimal overhead to your Python code (~1-2ms\*).
- Streaming (WebSockets) is used to synchronise frontend and backend states.
- The script only runs once.
- Non-blocking by default. Events are handled asynchronously in a thread pool running in a dedicated process.

\*End-to-end figure, including DOM mutation. Tested locally on a Macbook Air M2. [Measurement methodology](https://medium.com/@ramiromedina/measuring-time-elapsed-between-an-event-and-its-associated-dom-mutation-80431ad576e1).

### Developer-friendly

- It's all contained in a standard Python package, just one `pip install` away.
- User interfaces are saved as JSON, so they can be version controlled together with the rest of the application.
- Use your local code editor and get instant refreshes when you save your code. Alternatively, use the provided web-based editor.
- You edit the UI while your app is running. No hitting "Preview" and seeing something completely different to what you expected.

## Installation and Quickstart

Getting started with Writer Framework is easy. It works on Linux, Mac and Windows.

```sh
pip install "streamsync[ds]"
streamsync hello
```

- The first command will install Writer Framework using `pip` and include the optional data science dependencies.
- The second command will create a demo application in the subfolder "hello" and start Writer Framework Builder, the framework's visual editor, which will be accessible via a local URL.

The following commands can be used to create, launch Writer Framework Builder and run an application.

```sh
streamsync create my_app
streamsync edit my_app
streamsync run my_app
```

## Documentation

Documentation is available online at [streamsync.cloud](https://streamsync.cloud).

## License

This project is licensed under the Apache 2.0 License.

