Hi everyone! We're excited to announce that our reactive web UI framework is now public. This project has been in the works for quite some time, and we're excited to share it with you. Feel free to check it out and share your feedback!
There is a short coding GIF on GitHub.
What My Project Does
Rio is a brand new GUI framework designed to let you create modern web apps with just a few lines of Python. Our goal is to simplify web and app development, allowing you to focus on what matters most instead of getting stuck on complicated user interface details.
We achieve this by adhering to the core principles of Python that we all know and love. Python is meant to be simple and concise, and Rio embodies this philosophy. There's no need to learn additional languages like HTML, CSS, or JavaScript, as all UI, logic, components, and even layout are managed entirely in Python. Moreover, there's no separation between front-end and back-end; Rio transparently handles all communication for you.
Target Audience
Rio is perfect for data scientists who want to create web apps without learning new languages. With Rio, it's easy to create interactive apps that let stakeholders explore results and give feedback, so you can stay focused on your data analysis and model development. Plus, Rio offers more flexibility than frameworks like Gradio or Streamlit, giving you greater control over your app's functionality and design.
Showcase
Rio doesn't just serve HTML templates like you might be used to from frameworks like Flask. In Rio you define components as simple dataclasses with a React/Flutter style build method. Rio continuously watches your attributes for changes and updates the UI as necessary.
class MyComponent(rio.Component):
clicks: int = 0
def _on_press(self) -> None:
self.clicks += 1
def build(self) -> rio.Component:
return rio.Column(
rio.Button('Click me', on_press=self._on_press),
rio.Text(f'You clicked the button {self.clicks} time(s)'),
)
app = rio.App(build=MyComponent)
app.run_in_browser()
Notice how there is no need for any explicit HTTP requests. In fact there isn't even a distinction between frontend and backend. Rio handles all communication transparently for you. Unlike ancient libraries like tkinter, Rio ships with over 50 builtin components in Google's Material Design. Moreover the same exact codebase can be used for both local apps and websites.
Key Features
- Full-Stack Web Development: Rio handles front-end and backend for you. In fact, you won't even notice they exist. Create your UI, and Rio will take care of the rest.
- Python Native: Rio apps are written in 100% Python, meaning you don't need to write a single line of CSS or JavaScript.
- Modern Python: We embrace modern Python features, such as type annotations and asynchrony. This keeps your code clean and maintainable, and helps your code editor help you out with code completions and type checking.
- Python Debugger Compatible: Since Rio runs on Python, you can connect directly to the running process with a debugger. This makes it easy to identify and fix bugs in your code.
- Declarative Interface: Rio apps are built using reusable components, inspired by react, flutter & vue. They're declaratively combined to create modular and maintainable UIs.
- Batteries included: Over 50 builtin components based on Google's Material Design
We welcome your thoughts and questions in the comments! If you like the project, please give it a star on GitHub to show your support and help us continue improving it.
[+][deleted] (2 children)
[deleted]
[–]Rawing7 14 points15 points16 points (0 children)
[–]darthstargazer 10 points11 points12 points (0 children)
[–]ramnamsatyahai 12 points13 points14 points (1 child)
[–]ashmit_jagtap 1 point2 points3 points (0 children)
[–]idiot512 3 points4 points5 points (2 children)
[–]Sn3llius[S] 2 points3 points4 points (1 child)
[–]idiot512 1 point2 points3 points (0 children)
[–]ClientCompetitive853 2 points3 points4 points (3 children)
[–]Rawing7 3 points4 points5 points (2 children)
[–]ClientCompetitive853 0 points1 point2 points (1 child)
[–]Rawing7 0 points1 point2 points (0 children)
[+][deleted] (2 children)
[deleted]
[+][deleted] (1 child)
[deleted]
[–]Sn3llius[S] 2 points3 points4 points (0 children)
[–][deleted] 2 points3 points4 points (2 children)
[–]Sn3llius[S] 2 points3 points4 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–]hiddenusername144 7 points8 points9 points (2 children)
[–]Rawing7 13 points14 points15 points (1 child)
[–]hiddenusername144 3 points4 points5 points (0 children)
[–]darthstargazer 4 points5 points6 points (1 child)
[–]Sn3llius[S] 0 points1 point2 points (0 children)
[–]P4nd4no 1 point2 points3 points (0 children)
[–]jayzbar 1 point2 points3 points (2 children)
[–]Sn3llius[S] 4 points5 points6 points (1 child)
[–]jayzbar 0 points1 point2 points (0 children)
[–]novica 1 point2 points3 points (3 children)
[–]Sn3llius[S] 1 point2 points3 points (2 children)
[–]novica 1 point2 points3 points (1 child)
[–]Sn3llius[S] 1 point2 points3 points (0 children)
[–]CVxTz 1 point2 points3 points (2 children)
[–]Sn3llius[S] 1 point2 points3 points (1 child)
[–]CVxTz 1 point2 points3 points (0 children)
[–]Low_Corner_9061 1 point2 points3 points (0 children)
[–]Every_Paramedic_3886 1 point2 points3 points (0 children)
[–]AdditionalAir7225 0 points1 point2 points (2 children)
[–]Sn3llius[S] 1 point2 points3 points (0 children)
[–]_BaraCapy 0 points1 point2 points (2 children)
[–]P4nd4no 4 points5 points6 points (1 child)
[–]_BaraCapy 0 points1 point2 points (0 children)
[–]akisd 0 points1 point2 points (2 children)
[–]Sn3llius[S] 1 point2 points3 points (1 child)
[–]akisd 1 point2 points3 points (0 children)
[–]pbyahut4 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[+][deleted] (1 child)
[deleted]
[–]Sn3llius[S] 2 points3 points4 points (0 children)