-
-
-
-
Reactive and state driven
-
-
-
-Streamsync is **fully state-driven** and provides **separation of concerns** between user interface and business logic.
-
-```py
-import streamsync as ss
-
-def handle_increment(state):
- state["counter"] += 1
-
-ss.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`.
-
-
-
-
-
-
-
-
Fast
-
-
-
-
-
-- Event handling adds **minimal overhead** to your Python code (~1-2ms).
-- The script only runs once.
-- **Non-blocking by default**. Events are handled asynchronously in a thread pool running in a dedicated process.
-
-
-
-
-
-
-
-
Developer-friendly
-
-
-
-- **Version control everything**. Development is local, user interfaces are saved as JSON.
-- **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. **What you see really is what you get**.
-
-
-
-
-
-
-
-
Flexible
-
-
-
-- Elements are highly customisable with **no CSS required**, allowing for shadows, button icons, background colours, etc.
-- **HTML elements with custom CSS may be included** using the _HTML Element_ component. They can serve as containers for built-in components.
-
-
-
-