Readit News logoReadit News
ianhawes · 7 years ago
dmortin · 7 years ago
The question is: how many of these will be maintained several years later? Can you build a long term project on these?

Or the expectation is that one has to make a new UI anyway every several years to keep up with the changing fashion, so rewrites are inevitable?

ergo14 · 7 years ago
I think rewriting UI systems every few years and reimplementing in various JS frameworks that come and go is a serious waste of manpower. I'd so wish people would embrace web components properly once and for all, with LitElement, Svelte or Stencil. This way we won't have to live with another framework-bootstrap clone again and again and everyone can contribute to one solution that will work with all JS frameworks.
Cthulhu_ · 7 years ago
Sure, if it works now, it'll work ten years down the line as long as they're not doing anything nonstandard.

There's a big fear that projects that become unmaintained suddenly stop working; this isn't correct.

Besides, all webapps are rebuilt in a 3-5 year cycle anyway so it really doesn't matter.

quickthrower2 · 7 years ago
Jetbrains would be my bet. They'll look after it even if it doesn't become the most famous library.
jameslk · 7 years ago
They're open source right? Would you expect to build your own design language, responsive/accessible components, documentation and maintain it any better than an open source solution?
bradstewart · 7 years ago
The alternative is to write all of the components yourself.

Using one of these frameworks helped us avoid that cost upfront and get the product out the door. If our company is still around in several years, I'll happily maintain it myself (or hire the original author).

EDIT: This comment assumes the framework of choice is open source.

ggregoire · 7 years ago
If you pick one made by a big company, it should be fine.
acemarke · 7 years ago
We've been happy with http://react.semantic-ui.com/ so far.
sdegutis · 7 years ago
I liked Semantic-UI a lot in terms of looks, but the React aspect of it is separate, so even though it's done by the same people as the core team, it inherently always lags behind a bit in feature completeness. I especially ran into this with transitions and animations, and migrated to Blueprint.js instead, which I was extremely happy with from a feature-completeness perspective, but which I couldn't figure out how to theme.
ui-explorer12 · 7 years ago
I looked at many of these for an assessment at my company. We started a little broader with some css-only solutions as well but they tend to only take you so far; the controls are nice. Key aspects for us were (1) React-based, (2) TypeScript support (bonus for native TS), (3) Applicable to data-dense engineering apps, and (4) a broad-based, healthy ecosystem. I also evaluated Semantic-UI React.

I really like Blueprint JS but I think we'll end up building on top of Ant Design. It's a huge collection of work; they've also started to push Ant Pro which is higher-order components targeting building of admin apps (more opinionated, more than just a UI facade).

nemothekid · 7 years ago
I'm in a similar boat as you. We actually started building on top of Ant. However, we first started out by building out our Admin pages and they were built with Blueprint.

I like Blueprint a lot more than Ant, but Blueprint doesn't pretend to support responsive applications[1], which was somewhat important to us. Blueprint exposes a couple building blocks (like PopOver) which really help in building more custom functionality. It actually looks like Evergreen be closer to Blueprint in this regard so I might piss off all the devs and evaluate Evergreen.

[1]https://github.com/palantir/blueprint/wiki/Frequently-asked-...

mstijak · 7 years ago
Have you looked at CxJS? CxJS offers chart controls and advanced data tables which makes it perfect for building admin apps.

https://cxjs.io/

arvinsim · 7 years ago
I tried both BlueprintJS and Ant Design on two different projects I am handling.

While BlueprintJS is more intuitive, I find that it lacks a lot of built-in components compared to Ant Design.

evrydayhustling · 7 years ago
Great list but missed a big one: https://material-ui.com/
austinjp · 7 years ago
Do any of these produce finished output that is less than a few kB, and works reliably in say the past two major versions of browsers? Bundle sizes are getting ridiculous.

Is there a React UI framework that focuses on tiny build size and browser compatibility?

isakkeyten · 7 years ago
Wouldn't any of those fit the case if you just do tree-shaking?
deltron3030 · 7 years ago
Rebass.
jhabdas · 7 years ago
Not sure what their bundle size looks like but my understanding is they're using PJAX so the site output should function without JS. Problem is good luck maintaining that stack and remaining secure. And then there's the fact there's no conceivable way it could scale properly for large sites static which would need something like Go/Rust to actually generate quickly then there's the matter of caching. Basically this all leads to headaches just in different places.
shimms · 7 years ago
Thanks - that's a great list.

Some of them (atlaskit, MS fabric, Jetbrains, vmware etc) are geared towards building an integration withing those company's products. Whilst they can be used independently (without assets in Fabrics case, and other restrictions in the others), my take is the Evergreen (and ant, etc) are geared towards isolated products, similar to Bootstrap.

If you're building an addon for use in an Atlassian product, or an Office 365 product, these are a great way to stay consistent with the host application's look and feel.

threeseed · 7 years ago
Definitely be careful when using some of them e.g. Atlaskit because they are designed specifically for integration.

And if you use it for something else you may not comply with the license.

zwily · 7 years ago
Another to add to the list: https://instructure.design

(Disclaimer: made by my coworkers)

wlesieutre · 7 years ago
Scrolling momentum is broken on iOS for me, it makes the page very frustrating to read.
dagi3d · 7 years ago
feedback: if I click on any of the sample buttons, the page is reloaded
jameslk · 7 years ago
Shopify also has one:

https://polaris.shopify.com

Personally, I've found Ant Design to be the most comprehensive, feature and behavior-wise.

drej · 7 years ago
Just clicked around and here's a note from the elastic/eui repo

" WARNING While open source, the intended consumers of this repository are Elastic products. Read the FAQ for details."

Doesn't instill confidence.

snide · 7 years ago
Hi. I maintain the library along with some others at Elastic. That warning is essentially us being good open source citizens and being very clear about how we maintain it. A lot of these other libraries are built specifically for their own products, no different then us. We just wanted to make it clear that the direction of the library and its maintenance is primarily driven by the needs of Elastic, rather than as some general community UI kit.

All that said, it certainly works fine as a general kit, and we build it with that practicality, it's just not something we officially support.

As far as stability, my team is pretty well resourced (and growing if there are any engineers interested!). We're using the library in many places around Elastic and its not going away anytime soon.

I've looked through most of the kits out there and they all have their pros and cons. Likely our biggest selling point is that it aims to be fully accessible and comes with a lot of fun charting libs. That puts its sweet spot for use in enterprise applications. It's also completely themable with about 8 lines of Sass variables.

jamil7 · 7 years ago
The point of the warning is to indicate that it's intended purpose is to be used with other elastic open source projects like elasticsearch and kibana. It's not a general purpose UI kit like the rest of those links.
manigandham · 7 years ago
I posted this list. FYI: It was specifically about UI frameworks backed by big companies, not every major framework available. There are lots of purely community-owned projects too.
batuhanicoz · 7 years ago
https://grommet.io/ is awesome too.
hardwaresofton · 7 years ago
I can recommend Element (the top of the list) -- I've used it on two projects now and it's been pretty refreshingly easy to use and relatively easy to integrate with (when you need to hook into components to make them act a certain way, for example a paginated table).
cheapsteak · 7 years ago
I made a graph showing download counts of those packages on npm - https://npmcharts.com/compare/carbon-react,material-ui,antd,...

Obviously don't use that as a sole factor to determine what to go with, but with this many options, heuristics may be helpful to narrow down which ones to further investigate

olivtassinari · 7 years ago
material-ui is deprecated, try with @material-ui/core.
jhabdas · 7 years ago
Here are some more, separated out by React, React Native and Universal:

https://habd.as/awesome-react-components/

https://habd.as/awesome-react-boilerplates/

Just added evergreen to the components list as it doesn't look like more than a UI kit.

maga_2020 · 7 years ago
Wouldn't React-native-web ( https://github.com/necolas/react-native-web ) qualify into this list ?

It offers APIs compatible with React-native (which is obviously a huge time saver for cross platform UI dev).

Its disadvantage is that it does not offer (by intent and philosophy) any components outside of React native.

nobody271 · 7 years ago
Yeah but how many of them are modern and elegant?
hazdiego · 7 years ago
I'd also include https://reakit.io
jbfr · 7 years ago
Would also throw https://www.carbondesignsystem.com/ into the mix! We're the design system for IBM :)
onursenture · 7 years ago
darekkay · 7 years ago
From a 5 min glance, this framework looks really inaccessible. Most outlines ("focus rings") are removed and it's really hard to navigate the components with a keyboard, even as a sighted person. The focus indicator for buttons is just another shade, which is not sufficient. I was not able to set a value in the "Rating" component using my keyboard.

All those things can be fixed, but I would rather go with a library with accessibility in mind.

subsection1h · 7 years ago
Issue #1: When I scroll down the list of components, click a link to view a component and then go back to the list, I'm positioned at the top of the page, not down where I scrolled to. This is an issue with many (most?) JavaScript-rendered pages that I visit, and it's the main reason why I hate content sites (not web apps) that use JavaScript-rendered HTML.

Issue #2: Many (most?) of the form components show no indication of being selected when using keyboard navigation. This is the main issue I have with most web UI toolkits. (For example, Semantic UI is a notorious offender, even though it's frequently recommended at HN, including multiple times in the comments on this page.)

Issue #3: There are multiple problems in Firefox, including two carets displayed in each Select component.

Issue #2 and #3 almost make me miss the notices that used to be displayed at the bottom of web pages, such as "Best viewed in Internet Explorer 4 at 800x600 resolution". A lot of pages nowadays should have a warning like "Best used in Chrome with a mouse or touchscreen".

freyr · 7 years ago
Issue #4: Go to the Tables page, click a header on the example table, the entire page disappears.
ernsheong · 7 years ago
I wish people would stop making UI frameworks in <some non-standard framework name>, and instead make it web components based with vanilla JS/very light lib dependency, so that everyone can enjoy the benefit. React is becoming a bubble of its own, and it's exclusive.
bthornbury · 7 years ago
My first thought was that this is a UI Framework (Evergreen) built on UI Framework (React) built on a UI Framework (js + html).

No real point here, but I do find it curious that there is this tendency to build new UI frameworks all the time.

Personally, I still like html + js (and I have used React).

deltron3030 · 7 years ago
3 Different things. html, css & js are like raw materials, React is processing these raw materials, and a UI components or design systems are the result you get if you mix the React process with manual labor.

The're frameworks and design systems. A React UI framework refines or enhances the React process to build UI components or design systems.

Bootstrap e.g. is 2 things in 1, it's a process/framework and design system that sits directly on top of html, css & js.

Natela · 7 years ago
I agree very much. However there are two points that make it difficult : - Virtual Dom. It simplifies a lot the creation of components. And components that are made for a VDOM are very different from those made without VDOM in mind. - Data Binding. There are multiple ways to bind data to your components, once again this might influence the way components are made.

Those are not standard, some people like VDOM other not, and not everybody want to bind data the same way. So if we all contributed components in vanilla JS / Web Components, this still doesn't solve what should the API of those webcomponent look like.

ernsheong · 7 years ago
Try https://github.com/Polymer/lit-element for an alternative to VDOM, without the VDOM part. It's reactive and uses lit-html under the hood.
Touche · 7 years ago
This is confusing. The only difference between if this were a web component vs a React component is that the consumer would not capitalize the name. Instead of `<Button appearance="primary">` they would do `<evergreen-button appearance="primary">`. That's it.
blumomo · 7 years ago
I guess we're all looking forward to your open source web components library!
krikou · 7 years ago
This is already a start: https://www.webcomponents.org/
emixam · 7 years ago
I've been working on a tiny vanilla js lib focused around web components: https://github.com/maximebf/gousse.js. It includes a set of components using Bootstrap: https://github.com/maximebf/gousse.js/blob/master/examples/u...
aikah · 7 years ago
Web components are not supported in many popular browsers. Until they are widely supported they are not a thing. And no, Polymer and co are not polyfills for them, they are their own incompatible frameworks.

I agree in principle but it's up to browser vendors to implement specs, and it is always the same offender that is dragging his feet.

pjmlp · 7 years ago
Edge and Firefox are only missing Shadow DOM and Custom Elements, which they are already developing.

On mobile Web 100% of the browsers support Web Components.

https://www.webcomponents.org/

So what are the many popular browsers you refer to? As anything else is meaningless.

ergo14 · 7 years ago
Yup, Polymer is "big" dependency, but with things like svelte, litelement or stencil you can build web components which have little overhead.

Also polyfills are separate thing from polymer - they are reused by ALL other frameworks including vuejs for example, so I'm not sure what you meant by that comment.

ernsheong · 7 years ago
Personally I like LitElement: https://github.com/Polymer/lit-element

It's a super-lightweight base class for web components, and a descendant of the Polymer framework.

A Material Design framework uses this: https://github.com/material-components/material-components-w...

huehehue · 7 years ago
This is especially frustrating for job seekers. I've seen so many job listings calling for extensive experience with Bootstrap, for example. Why would knowledge of CSS and the grid system not suffice there?

It's a bit disheartening to see titles like "Ember ninja" and "Angular guru", if only because recruiters don't know that both of those things are just JavaScript frameworks.

I'm excited for Web Components but I wonder how it will play out practically. Do people put "HTML Expert" on their resumes today?

latexr · 7 years ago
> I've seen so many job listings calling for extensive experience with Bootstrap, for example. Why would knowledge of CSS and the grid system not suffice there?

Because their current system might already be using Bootstrap, so they need someone who understands it to be able to continue the work.

Vinnl · 7 years ago
Yeah, I really dislike Polymer's approach of using Web Components as an architectural pattern, but this is the exact use case they're good at. Then again, I can understand that you don't whip something like this up in a day, and support for Web Components might not be as widespread yet as a UI framework author would like.
pjmlp · 7 years ago
There is 100% support on the mobile web across Safari and Chrome.
pjmlp · 7 years ago
I am on the same boat, hence why I am on Angular and Polymer side.

Everything else that builds their little platform on top of the browser is not interesting to me.

chrisweekly · 7 years ago
That's radically inconsistent. Angular is not HTML, nor Javascript, rather it's its own thing -- precisely a "little platform on top of the web", to use your phrasing.
rahimnathwani · 7 years ago
Why are these UI frameworks tied to React, rather than working for any HTML+CSS site (as with Bootstrap)? Do they provide interactive functionality that requires React or similar?
the_duke · 7 years ago
They are not CSS frameworks in the sense of Bootstrap.

They are React component frameworks for common functionality with a unified style approach.

Something purpose-built for React is usually much better than something where React is bolted on to an existing framework, like Reactstrap (React + Boostrap) because those usually are built with jQuery and just handle state and functionality in a way that's not easy to integrate with React cleanly, so you end up re-implementing the actual functionality again.

andrewingram · 7 years ago
Probably because the people making them are using React, and first and foremost they're making it for themselves.
rahimnathwani · 7 years ago
That was my guess, but the_duke's comment makes me think there is more to it. I'll have to look at the code to see if the React components do anything more than apply HTML templates with associated CSS styles.
Spiritus · 7 years ago
Not sure about interactive functionality. But it basically means it provides ready-made React components.
rahimnathwani · 7 years ago
I think the_duke answered my question.

The reason I asked it is that, if you're building an HTML+CSS framework for use in React, then why wouldn't you separate out the HTML+CSS part, and then depend on this. That way it would be easy to re-use 90% of the work, if you then want to use the components with Vue or some other framework, or even for plain static pages.

Deleted Comment

pier25 · 7 years ago
Bootstrap needs jQuery for anything that requires interactivity
humbleMouse · 7 years ago
Don't ask questions like that. /s
chrisparton1991 · 7 years ago
Evergreen looks quite nice, but their website isn't responsive and that gives me pause when considering it for my own projects. The components themselves may work fine, but I can't be sure without digging in further.

Just something to consider if you're looking at using Evergreen.

UntitledNo4 · 7 years ago
"Currently there is no opinionated way to construct responsive layouts in Evergreen. In the case of responsive layouts you might want to simply use a div with a class name and use breakpoints in CSS — or potentially a CSS-in-JS solution."

https://evergreen.segment.com/components/layout-primitives

onion2k · 7 years ago
Responsive design isn't just adding breakpoints.

It's responding to the device and the ways the user will interact with it. For example, the combobox example in Evergreen doesn't actually use a <select> in the background, so users on mobile devices will actually have to use the dropdown implementation rather than the browser displaying a proper native mobile select. That's a much worse experience. Not to mention Evergreen will be completely inaccessible for users who need assistive technology, which potentially poses legal issues...

Deleted Comment

laurent123456 · 7 years ago
That's a minor thing but when I press the back button on one of the documentation pages it takes 6 seconds to go back (first it changes the title of the tab then it seems to wait for 6 seconds, probably parsing and running several MB of JavaScript). Sometimes the tab titles is blinking and displaying "Evergreen" and "Components - Evergreen" very quickly during these 6 seconds.

You'd think in 2018 going back to a page would be a solved problem, but apparently each new framework needs to re-solve this in a new orignal way.

virtualmic · 7 years ago
This doesn't happen for me, it is pretty quick. I am in India and on a 40 Mbps connection.
laurent123456 · 7 years ago
My connection is fast enough too. I'm on Firefox though, so maybe that's the "issue", if their framework is designed to work mostly on Chrome and not the other browsers.
sgt · 7 years ago
I've wondered about React, although I haven't used it myself. I know that the new Reddit was written using React components, and it's very slow. Is that a React problem (i.e. is it hard to write fast web apps) or is it a Reddit problem (or both)?
chrisco255 · 7 years ago
It's not a React problem. React runs Facebook, Instagram, and mobile Twitter, for example. But it's possible to build inefficient React implementations. Reddit rebuilt their front end from the ground up. It is possible they have front end issues there. Some flame chart analysis on Reddit's current front end and old front end would reveal the source of the problems.
matsemann · 7 years ago
While I agree React isn't the issue here, you chose horrible examples. Loading Facebook on my computer (especially trying to open a chat window) brings my computer to a knee. And using twitter on mobile browser you quickly learn how the spinner looks.
ttty · 7 years ago
React is fast. If you are not experienced in react you'll make a mess because they work against its principles.

To me the Reddit web app is fast, the show part I think is the server side.

sgt · 7 years ago
There may be some fast components in the Reddit web app, but I think there must be a valid reason why so many users are switching to the old Reddit (not just because of the way it looks, but due to performance complaints). I just went in and even scrolling through Reddit comments is laggy. Switching to old mode is like day and night.
goatlover · 7 years ago
The new Reddit design is often much slower loading the first time than the old one. It's performant after that, but that first load is annoying.

Deleted Comment

Natela · 7 years ago
React is not fast, clearly the simple idea of having a virtual Dom is very costly compared to do things by hand. However for a large scale app react makes it more easy to reason about and keep it maintainable, components are far easier to implement, etc...

So for many people, the benefits you get on the development side outweight the performance overhead

pier25 · 7 years ago
There is an overhead, but the main problem with the new Reddit is not that it was made in React, but that it's a massive fuckup. Not only from a programming perspective but also design and UX.
siftikha · 7 years ago
always hilarious to see the dumb dependencies that these projects have

https://github.com/sindresorhus/arrify

https://github.com/JedWatson/classnames

yuchi · 7 years ago
While I can understand your skepticism on the first one, the second package is actually very useful. It doesn't just concatenate strings filtering out falsy values, it supports the whole old AngularJS class format. You can, for example, pass an object {string:booleanish} and it will add only the keys whose values are truthy.

Pretty neat, actually.

anonytrary · 7 years ago
> You can, for example, pass an object {string:booleanish} and it will add only the keys whose values are truthy.

Why is this something you can't do on your own in a few lines of code?

  const classNames = (o, c=[]) => {
    for (let k in o) if (o[k]) c.push(k) // booleanish
    return c.join(" ")
  } 
This is not cool at all! Why import a trivial function over NPM to do this for you? Better to lower your dependency count and have a "util.js" file for helpers like this.

nathan_f77 · 7 years ago
Yeah, my React code is currently littered with conditions and `classNames.join(' ')`. I'm going to start using this library.
sumnulu · 7 years ago
In ideal world all functions should be pure and be a dependency and all code should be just pure functions.
siftikha · 7 years ago
Second one is used only once in the code base to concat two strings together afaik
city41 · 7 years ago
Curious what your issue with classnames is? Is it just because it’s a small and simple module (50 lines of code)?
anonytrary · 7 years ago
I was curious so I checked out their Github page. I found this example:

  classNames('foo', 'bar'); // => 'foo bar'
  classNames('foo', { bar: true }); // => 'foo bar'
  classNames({ 'foo-bar': true }); // => 'foo-bar'
  classNames({ 'foo-bar': false }); // => ''
  classNames({ foo: true }, { bar: true }); // => 'foo bar'
  classNames({ foo: true, bar: true }); // => 'foo bar'
  ...
  var btnClass = classNames({
    btn: true,
    'btn-pressed': this.state.isPressed,
    'btn-over': !this.state.isPressed && this.state.isHovered
  });
Look like the button example is a good enough convention for me, I don't need any of the other conventions. Can anyone tell me why this is not sufficient?:

  const classNames = (pojo, c=[]) => {
    for (let k in pojo) if (pojo[k]) c.push(k);
    return !!c.length && c.join(" ");
  }
Do I need array-flattening support, multiple argument support? The size of this library probably comes from it supporting a handful of different coding styles. I would say the size (50 lines) is too large, if anything. Dependency worthy? I'm not convinced. I am very much so against requiring trivial utility functions from other people. Roll your own if it's trivial! It's better than depending on something over the network.

anonytrary · 7 years ago

  const arrify = a => a && (Array.isArray(a) ? a : [a])
vs. introducing a potential attack vector.

darekkay · 7 years ago
arrify(null) returns null, unlike the arrify library . I expect that a function which turns things into an array returns an empty array as fallback. This ist just an example for why one would favor well-tested utilities over re-inventing the wheel (not that I would use arrify as a dependency myself).
voltagex_ · 7 years ago
Is there a way to see what code in the project actually uses these dependencies? I gave up on learning Typescript for another 6 months after a starter template dragged in 400 dependencies.
maaaats · 7 years ago
Why would that matter for learning typescript..?
siftikha · 7 years ago
Most low effort way is to search the repository on GitHub for the require.

Also worth noting the ones I listed aren't transitive dependencies. Those are both explicit dependencies of this project