dasher-project / dasher-web

Dasher text entry in HTML, CSS, JavaScript, and SVG
https://dasher-project.github.io/dasher-web/browser/
MIT License
43 stars 8 forks source link

Vanilla JS or NPM Dependancies #109

Closed gavinhenderson closed 2 years ago

gavinhenderson commented 2 years ago

Currently the web project doeesn't use any 3rd party dependancies. As the UI is about to get a refresh I was wondering if now would be a good time to consider dropping the stance of only using vanilla JS and start to adopt a 3rd party UI framework.

Let me know your thoughts below.

My stance is we should adopt 3rd party dependancies. We would be able to get more done quicker if we relied on a well documented UI library. We would be able to focus all our effort on improving code that is unique to dasher rather than working to build things that 3rd parties can provide to us for free.

How do we stop dependancies going out of date?

We can use tools like Renovate or Dependabot which can automatically keep our deps up to date.

How do we stop vulnerabilities?

We can use tools like Snyk to make sure we are keeping on top of vulnerabilities in deps.

I would also argue that using tried and tested dependancies can often be more secure than creating our own solutions.

How do we prevent bloating our app?

Yeah using NPM deps can lead to bloat in your app which I must admit does suck.

Nowadays bundlers have great tree shaking abilities that mean we can only ship the javascript we actually use.

There is also tools that we can use to set dependancy budgets so that we aren't adding unnecessary bloat.

Also these days with GZIP on the web the amount of JS you actually send down the wire is tiny

CC @jcope @aspickard @sjjhsjjh

sjjhsjjh commented 2 years ago

Adding a UI library for the control panel settings part could be useful. For the main zooming library, I doubt we have much to gain. We already should make the control panel optional, to facilitate integration with commercial products that have their own settings UI. In other words, support external settings. A control panel built on a library could then be another external settings source.

jcope commented 2 years ago
aspickard commented 2 years ago

I think VueJS might be a great option for this, as it focuses exclusively on the view layer and is very Angular - like. I find it to be very flexible and we could use something like https://github.com/SortableJS/Vue.Draggable

willwade commented 2 years ago

So have we got any others in the offering @aspickard @gavinhenderson @sjjhsjjh that we should be considering?

gavinhenderson commented 2 years ago

Closing this, as we should do this via the new RFC system