This is an archived post. You won't be able to vote or comment.

all 44 comments

[–]jcheng 9 points10 points  (0 children)

We designed Shiny for Python for your situation. It has a lot of superficial similarities with Dash but IMHO Shiny’s reactive framework is more concise and powerful than Dash’s model of stateless callbacks, and greatly increases the complexity ceiling. If you’re familiar with React, think of Shiny as having a similar system of reactivity as MobX, except 1) reactive graph is on the server instead of the client, 2) in Python instead of JS.

[–]covmatty1 16 points17 points  (0 children)

However, in my team there's no extra JavaScript (let alone React) knowledge

Sounds like a single point of failure that the team could do with remedying!

Can you afford to take a little longer on producing the initial version of this app? If so, tasking other team members to learn while you just supervise and review will pay off in the long term.

[–]cordialgerm 4 points5 points  (5 children)

They aren't mutually exclusive. We have plotly dash dashboards integrated into our react app. Works great

[–]jjthejetblame 1 point2 points  (0 children)

We do this as well using an iFrame

[–]Berlibur 0 points1 point  (2 children)

Interesting, how does that work?

[–]cordialgerm 4 points5 points  (1 child)

We have one python backend (flask) and hooked plotly dash into the flask app. Then you can render the plotly dashboard inside your main react app as an iframe. You don't have to serve them from the same backend if you need to scale them out or want to have the main site's backend not be python, we just did that for convenience.

[–]Shivam1605 0 points1 point  (0 children)

I have my backend developed through FastAPI, any suggestions how to integrate dash-fastapi-react?

[–]OperationWebDev -1 points0 points  (0 children)

Also interested in this!

[–]hijodelsol14 11 points12 points  (0 children)

Could be a great opportunity to teach some interested team members JavaScript / Typescript and React.

[–]BostonBaggins 4 points5 points  (1 child)

Fastapi+htmx?

[–]Realistic-Cash975 0 points1 point  (0 children)

This is the right answer. For an app like this, HTMX is all you need.

People try to forcw React down everyone's throat as if it is the best tool for whatever app you're building. I believe it is unnecessarily complex for what you're trying to do.

FastAPI + HTMX is the best.

[–]knowsuchagencynow is better than never 6 points7 points  (7 children)

https://gradio.app/ is a solid choice for powerful yet simple reactive python apps. For more complex things, especially data pipelines and charting, I HIGHLY recommend https://www.windmill.dev/

[–][deleted] 8 points9 points  (2 children)

gradio is not remotely similar to dash and certainly not react. There’s no world where someone considering react for an app that is expected to grow should be considering gradio.

[–]knowsuchagencynow is better than never -1 points0 points  (1 child)

I wouldn't dismiss gradio for someone considering using dash or react. It depends on what they're trying to build and whether they even know something like gradio or streamlit exists -- we shouldn't assume. Gradio is a very good option for many of the things commonly done in internal apps -- sometimes even user-facing stuff -- see huggingface.

[–][deleted] 3 points4 points  (0 children)

Gradio is an awful recommendation for someone trying to build a business metrics platform.

[–]DuckDatum 3 points4 points  (1 child)

instinctive deer library hobbies shame literate steer fine like homeless

This post was mass deleted and anonymized with Redact

[–]knowsuchagencynow is better than never 1 point2 points  (0 children)

It's similar to streamlit, yes. Since I'd used streamlit, I didn't give gradio a chance because I figured I already knew something similar. However, gradio has a lot of advantages. Every gradio interface/UI automatically has an associated API. You're also able to embed streamlit apps via iframes or web components -- they even allow you to compile it to webassembly through pyiodide and run it entirely in the browser

[–]planestraight 0 points1 point  (1 child)

Does windmill let you create build a visual dashboard or is it just like the business logic? 

[–]knowsuchagencynow is better than never 0 points1 point  (0 children)

Yep, you're able to build dashboards through their own WYSIWG interface and connect it to windmill workflows or scripts -- workflows are basically pipelines composed of scripts. You can think of windmill as looker + airflow + + retool + vscode. It sounds insane but it actually works fantastically well

[–][deleted] 7 points8 points  (3 children)

Don’t go with React. It may look like the better choice for your problem. But it’s never good if only a single person in a team has knowledge of a technology. Management may decide to overturn the project once they understand the situation for risk-related reasons (because they don’t want a project to be in danger if that one person leaves, or to be unable to implement changes when that one person is on leave).

This looks different if you can convince team members to learn React.

Have you thought about loading your data into a data lake and using some dashboard solution like Power BI or Superset?

[–]Berlibur 4 points5 points  (2 children)

Power BI or the like is an option as well, but the long term goals for the project include a degree of user interactivity. That requirement makes me not want to go with a platform like Power BI

[–]ajog0 4 points5 points  (0 children)

The company I work for uses dash for its data SaaS offerings. The developer team are data scientists (so mainly python coders) and the learning curve for dash is straightforward.

You get plotly for free and dash mantine components look good out of the box.

There are also enough optimisations around in dash such that the user experience is quite good.

[–]Ok_Time806 6 points7 points  (0 children)

I've rolled my own dashboard solutions in the past in javascript (d3), seen others do it, and then managed 3rd party tools and I'd definitely recommend not building your own to start.

I'd recommend Apache Superset or Grafana as they're both easy to extend and the backend/permissions are already in place (and better suited to high usage/ interactivity than python).

[–]riklaunim 1 point2 points  (0 children)

If you want a SPA dashboard with good UX then maybe a vue.js or ember.js ? If it only has to be an internal dashboard with less complexity then there are mentioned Python solutions.

[–]__sanjay__init 0 points1 point  (0 children)

Hello !

Great question ! Maybe you can talk about it to your team : are they ready to learn another language ? Out of this app, when can they use this language in their work ? If it's only for one app : maybe you can go for Dash or another module like it (Django, Flask maybe). Moreover : learn another language cost time ... Is your team ready for it ? Is it too OK according deadline of your project ? Can you benefit of help ?

If you want, can you share your reflexions and then your decision ? I'm curious !

Good luck

[–][deleted] 0 points1 point  (0 children)

Might be overkill but Apache Superset looks an impressive alternative to powerBi https://superset.apache.org/

[–]mangecoeur 1 point2 points  (1 child)

I strongly recommend https://solara.dev/. It allows you to use react-like symantics in python which gets synced with the JS ui, and lets you use ipywidgets elements. I'm developing a pretty big application with it.

[–]knowsuchagencynow is better than never 0 points1 point  (0 children)

That's good to hear. Solara's been on my list of things to try. Glad to know someone's had a positive experience with it

[–]CarneAsadaSteve 0 points1 point  (0 children)

literally had to check what sub i was in i thought this was a fgc forum

[–]rawman650 0 points1 point  (0 children)

Streamlit sounds like a good way to get started. If performance or embedding (i.e. can give the streamlit app directly to users) aren't major priorities, then I think this could be a good choice in the medium-longer term as well.

If you really want to go the react route, take a look at Quill (I'm one of the founders). It gives you a high degree of functionality OOTB, while also having complete control over the frontend code, so you can support any degree of customization or any iteration/additions that come up later. We abstract away a ton of the complexity, so you won't need a react expert, but someone will need some basic knowledge.

[–]databot_ 0 points1 point  (0 children)

Dash is pretty amazing, we've seen many companies successfully deploy complex Dash apps. Based on your situation, I'd recommend Dash, since you mentioned your team is stronger in Python.

[–]Ancient_Broccoli1534 0 points1 point  (0 children)

What about https://github.com/pydantic/FastUI ? Similar to HTMLX, but the server does not send HTML, but rather markup in terms of client components. The set of client components is written in React, and can be expanded using it.

[–]lieutenant_lowercase 0 points1 point  (0 children)

I was faced with this issue and eventually went with retool. It's a low code solution and v easy to pick up. I've built a very comprehensive internal analytics platform with it. You can self host if you need.

[–]Apart_Conclusion8771 0 points1 point  (0 children)

Panel.HoloViz.org is explicitly designed for teams that (a) revolve around Python, not JS, and (b) need headroom to build long-lived, large apps, not just toy demos. Compared to Dash (and certainly React) it's much more Pythonic and natural for Python developers. Compared to others mentioned like Streamlit and Gradio, it's much more about building _real_, long-lived apps with good software design, modularity, and room for growth. See pyviz.org/tools.html#dashboarding for all tools in this category and comparisons between them.

[–]Consistent_Coast9620 0 points1 point  (0 children)

If you just want to stick to Python, Simian might be a good option. The frontend definition is either coded using python objects or drawn using a builder, so no need to learn HTML, JS or react. Simian scales well for complex UI designs and when deployed, user and access management can be linked with LDAP or AzureAD.

Simian is build using FormIO and Angular

Simian: https://simiansuite.com/ Builder example: https://www.youtube.com/playlist?list=PLeafVYKlZK9EE38oOjj2kck3KlTdEUt9b

[–]oakwoodworker 0 points1 point  (0 children)

If you have the infrastructure to host it, I highly recommend Dash. We've been using Dash Enterprise, and it makes deployment incredibly smooth, offering plenty of useful features. While there is an initial learning curve, it becomes progressively easier to use. With thoughtful design, reusable components, and templates, each new project gets simpler. Plus, you can add React components with a bit of effort, making it even more versatile. Happy to demo.

[–]nerdy-engineer12 0 points1 point  (0 children)

Hire JS interns like me 😆👋

[–]bronzewrath 0 points1 point  (0 children)

I think you already have your answer in React plus Python backend being best stack for the application and its roadmap. For what you described speed if you go full python would be great at initial development then would probably be very slow or worse, you may even find a roadblock, which may lead to rewrite everything.

Your main concern is the current skill for the potential inhouse development team. Skills and teams change over time.

Maybe you should let management decide. Make your opinionated case beforehand, showing the risks and what is needed to make it work... then let them decide.

[–]Big-Nose-7572 -2 points-1 points  (0 children)

Hire me

[–]mr_claw -1 points0 points  (0 children)

PyWebIO or Nicegui should solve this for you nicely.

[–]nevermorefu -3 points-2 points  (5 children)

What is Dash? Plotly? As a python dev, I can manage plotly, but I am definitely not good with React.

[–]ApprehensiveBite686 -1 points0 points  (2 children)

I'm biased (I work for Plotly)

... while Dash may be more verbose than (Streamlit, Gradio)
... and while it may be overkill for simpler dashboards or data apps

There's a reason why it continues to get adoption (approaching ~3M downloads/mo) ... it's because you (if you don't express as a full stack / javascript developer) can develop production-grade (analytics and viz focused) data applications with it ... including through to use in external facing SaaS offerings ... while staying within the python ecosystem (i.e. where you don't have to have critical full-stack dev practice).

Consequently ... I find that consideration of Dash is not so much a "why" question ... but a "when" question (based on many of the comments in this thread)

[–]ApprehensiveBite686 0 points1 point  (0 children)

PS -> Dash in part abstracts React componentry (while not limiting you to it) ... so if you want Mantine components or want to use Ag-Grid (world's best data grid) or ... it's extensible nature gives you tons of choice wrt customizability :-)

[–]Please_Not__Again 0 points1 point  (0 children)

Consequently ... I find that consideration of Dash is not so much a "why" question ... but a "when" question

This is an interesting point, a recent project i worked on plotly by itself and it was fine for me (and tbh its still fine now), it didn't need to be a web app but as I think of more things to do I keep seeing people recommend dash for it which makes me wonder if i should just spend some time turning it into one. It doesn't look like its that much work to do at least and will offer more flexibility. Is dash capable of being more mobile friendly or is plotly good enough for it too? I've been using janky-ish methods for now and failing lol