Ask HN: Why Haven't GUI Front End Editors Caught On?
WYSIWYG/GUI frontend editors have been around for years now, but the standard development process for frontend developers is still to crack out an IDE or text editor and write HTML/CSS by hand. For such a technical industry this seems like a strange trend - why wouldn't we leverage tools and technology to make building HTML/CSS less of a boilerplate activity?
It makes sense that it could be related to the widgetisation of frontends, with chunks of HTML appearing in different locations or as embedded JSX, but I see no reason why editors couldn't provide integration by allowing single documents to be sliced up into smaller components and kept in sync.
So, HN, what's your take on the lack of adoption of GUIs for building frontends?
139 comments
[ 2.7 ms ] story [ 244 ms ] threadThat said, I've seen React GUI editors pop up occasionally.
What you’re building can be accessed visually on a variety of screen sizes, through a screen reader, a screen magnifier, a braille display, through print outs and a multitude of other different ways.
Conversely in the other direction, you’re also building application interfaces that let back-end systems feed data into the interface, and that‘s not something you’d want to use a visual editor for either.
on the backend interfacing side, I suppose that depends on if the UI allowed you to set up fixture data that then flowed into your template tree. I could see that being quite a nice way to visually experiment with structuring your data.
In the bad old days, Dreamweaver had visual tools for this stuff, and it generated a horrifying mess of nested tables. This was rightly criticized because it made for a huge amount of markup, the markup was difficult to embed in a generator, there were lots of ways to destroy the layout if the content you inserted into it was the wrong size or had the wrong stuff inside it, and it was hell for web scrapers and screen readers. The generated page had no semantics and tripped up all these secondary uses. It also tended to be huge, slow to load, and hard to edit later.
Once CSS grew more powerful, a big fight ensued for semantic markup: keeping the template semantically meaningful (no tables of images and lack of table content), easy to generate and fill and easy for scrapers and screen readers, and doing all the layout in CSS. The mantra became something about hand-coded HTML always being better than machine-generated.
It probably could be done better today (and with the prevalence of JSON APIs semantic markup may not matter as much as it used to), but once the philosophy becomes widespread it becomes difficult to unseat. When you have developers who are competent at CSS and semantic markup, the sales pitch of moving back to a visual editor becomes harder.
There's no reason that I can see, that you wouldn't be able to name the elements in a document (or ML could be perhaps used to auto-derive names), and beyond that, my understanding is that semantic markup (at least in terms of class/ID names) hasn't proven to be all that important since the advent of the API. Perhaps it's just not been done well enough so far to justify moving over from HTML/CSS, but you'd expect people to be jumping to solve their own issues. I for one find CSS/HTML tweaking to be pretty monotonous when I'm just trying to get to an end result.
I'm not a front end developer, and don't really have any desire to become one, and I would like to have a GUI for building fairly standard UIs.
Yeah, it totally could happen. Go make it and I promise I'll start using it.
It seems like they do exist, and it's just that developers like myself are unaware of them.
Sites with HTML tables were faster to load, smaller, resized automatically, and never had overlapping text. Most of the claimed benefits of CSS were false. CSS pages tend to pull in, or include, large libraries of styles, Javascript, and other junk. That's where page bloat comes from. See yesterday's article on why the web is so slow despite more bandwidth. Do "view source" on the pages of some major sites. It's disgusting.
There seems to be a programmer mindset that users must write source code which is then compiled to something else. Nroff/Troff, then TeX, then DocBook, for example. (Is DocBook dead? The last update on the DocBook site was three years ago.)[1] This is a terrible thing to impose on users.
[1] http://docbook.org/
I was involved with a technical documentation project around 6 years ago, and the trend was moving to DITA.
http://dita.xml.org/
http://www.xmlmind.com/xmleditor/
https://www.oxygenxml.com/xml_editor/dita_editor_structured_...
Companies that see software development as a cost center, and rely on consulting companies to provide value to their actual business processes.
At most, their IT departments or vendor management departments, might know that Github is where some open source packages they leech are stored.
Now there are new problems having to do with bloat, and of course many people use Bootstrap wrongly, but nobody is honestly suggesting you go back to table-driven layout. I'm saying, this is the philosophy that got us here. I'm not saying it works well or that most content is semantically tagged—it isn't.
Your concluding remarks also seem off-base to me. TeX to some extent and LaTeX to a much greater extent put a lot of emphasis on semantic markup. It's just locked up in TeX-land and hard to parse outside of it, so the utility is limited, but every edition of the TeXbook and Guide to LaTeX2e expends great effort encouraging you to introduce semantic macros into your documents so that changing the style does not require extensive rework, as it would a Word document without stylesheets. Even the old Nroff/Troff macros had semantic-ish macros you were supposed to use. And DocBook really could not be further in this direction, where all the styling happens in CSS or XSL, and you have tags like `<computeroutput>` and `<funcprototype>`. I don't see how semantic meaning is an imposition, and anyway, the document authors and the document readers are not the same people.
I don't think it would work for everyone or every app, but for me it's been a dream come true.
The secret was to have self-contained components that fit within a rigid layout system. It wasn't easy to make things pretty, but it worked. To write code, you clicked on the component, clicked on an event, and wrote your logic in a little snippet editor. It was all event-driven.
Would love to have something like that for web design today. An opinionated system that forced you to use a limited subset of html and css might be able to pull it off.
(Delphi was a VB-like environment for Borland Pascal. It's still around: https://www.embarcadero.com/products/delphi)
[1]https://gomix.com/
But the UIs are complex, and getting good performance is a challenge because of all the layout info stored in the database. They are not something a capable dev team would want to build a product on top of. Fine for empowering content authors though.
Since you need a programmer anyway, you might as well use a freeform design tool (Photoshop) to let the designer design whatever the hell he wants without the constraints that a more specialized app might impose. Then, let the programmer take that design and create whatever infrastructure he thinks is necessary without also constraining him to whatever a specialized app might impose.
I've been doing both design and programming a bit lately and I absolutely love apps like Subform, Webflow and Apple's interface builder. But, once I get past the fast iteration mockup phase, the structure of the app or webapp I'm making changes enough that the tools become unwieldy.
What I would really like are more robust layout APIs for both the browser and native apps. In Subform, you can define relative widths and positions both to other components and to the window itself. It's great for taking some of the tediousness out of design, but from a programming perspective, centering an object horizontally and vertically consistently is still a surprisingly difficult endeavor.
The only way around the poor performance of table layouts is to use table-layout: fixed, which then means you lose all responsive layout so you'd need to create a new version for every screen size you wanted to support (and implicitly, not be able to support every size of mobile screen since percentages don't play well with fixed layout. In this case, you haven't saved any time and in fact have created more work for yourself along with a worse version of your site since fewer people will be able to view it properly.
[1] http://www.stubbornella.org/content/2009/03/27/reflows-repai...
[1] http://caniuse.com/#feat=flexbox
What framework?
If I fire up a reasonable layout system (Xaml for example) which is completely foreign, it's trivial to do there.
I can't understand why html/CSS makes it so hard.
This is what I love about CSS flexbox and grid. Flexbox completely changed how I approach layouts, and I'm excited for grid to hit the big time as well.
The only thing I wish flexbox could do is allow custom spacing functions, so I could write my own alternative to "justify-content: space-around".
The link you shared above is a big upgrade.
Right-click inspect element selects the element you want to modify. Then change CSS properties in a GUI editor. Only problem is persistence.
I love designing and tweaking with devtools iteratively.
A lot of things are done in editors because it gives you a lot of control of logic. Designing assets in visual language like flash makes a lot of sense.
Unity has the same idea. Create your assets visually and assign behaviors to it via code. Their GUI/code fusion is pretty cool.
Writing a public var in a class exposes it in GUI and makes it bindable to other things via click and drag.
Keep an eye on "Houdini" -- a new browser API draft that exposes the internals of CSS's layout system (and much more): https://www.youtube.com/watch?v=sE3ttkP15f8
If you want it to work well, the UI model of a visual editor has to match up with the data model of the application behind it. Visual Basic worked so well because the objects you manipulated in code were the same components you dragged and dropped onto your window.
We already have way too many (and too complex) representations of application state in a typical web app. I count six:
It's hard enough to make a WYSIWYG editor for the final transformation (HTML -> visual layout). But trying to WYSIWYG the whole "code -> HTML -> layout" flow is basically impossible. This is why I think you won't see a workable GUI editor as long as we stay chained to today's overcomplicated HTML/JS web stack.What we did with Anvil (https://anvil.works) was to build a simple UI model from the ground up. We avoid HTML and JS, and provide discrete components that can sensibly be dragged and dropped in a GUI editor, and sensibly addressed from code. This means we can bring back 1990s innovations like autocompleting UI code.
But right now it's like having your hand in a cookie jar. As long as you hold onto the full complexity of HTML, JS, Angular/React/etc, you're never going to get that simplicity you want.
This creates a much less "leaky" abstraction than building a new framework directly on top of HTML/JS. It also lets us offer things like blocking I/O operations (no more callback hell!).
Semantics had withered away since then. No one cared, and it eventually got replaced with a bunch of <div>s on the DOM side and JS-virtual-DOM-all-the-way on how it's generated and managed. Editors haven't caught up, but I'm sure they will.
When you add that factor in it shouldn't be hard to see why a visual editor is not sufficient. Visual editors are just not a great way to specify the type of logic that decides how your interface will look and behave at radically different sizes and shapes.
i think the reason the equivalent doesn't exists for web is maybe due to the complexity of css / html, and the various level of browser support, which makes all of it a dark art as soon as you aim for wide device support. Whereas Apple controls everything.
The OP is also talking about editing the visual side of things, and I think if a well-done editor that also output good CSS and HTML existed, it would be embraced by many.
Of course, I'm someone who enjoys using Xcode's interface builder tools to edit GUIs, rather than laying out controls in code, because I get instant feedback with Xcode's interface builder. As others have mentioned, something similar for Web work seems like it could be very powerful.
Xcode works because even on mobile/desktop there is more separation between design and functionality than the web. The web is both more primitive and more flexible.
HTML stressed rapid results and quick iteration. Surely, it bought many other idiosyncrasies to the table but proposing Motif as HTML killer... In this case we should also declare CORBA a hypothetically better alternative to SOAP and WSDL...
The biggest reasons in my experience are:
* Limited logic. A builder is fine for a simple static layout. How should that layout change depending on the data to be displayed? How should it adapt to different screen dimensions and orientations? Pretty soon you want to write code to control the view.
* Doesn't play well with source control. Even if the GUI builder spits out a text-based format like XML, it's hard to read and understand diffs, and it can be difficult to impossible to merge.
Why don't use tools to make writing HTML/CSS less boilerplate? To some extent we do. We have CSS preprocessors and HTML templating.
In the end, the front end is just code, and no one has yet come up with a graphical form of coding that is superior to text.
When I came back to try iOS development, and saw the sad state of IB, I wondered how things had fallen so far.
Then I tried Android development. Hand rolled XML layout of UI? NOPE.
I too am surprised that no one has developed tools to just do this.
The other 10% of the time I have to get my hands dirty. This is pretty much par for the course with UI design. Any WYSWIG editor necessarily abstracts functionality in favor of simplicity, and when you need to get deep, you go back to the underlying general purpose language.
There's nothing wrong with that. It's a good workflow. Easy stuff is easy and hard stuff is hard, as nature intended. Fully committing to an IDE editor would mean that easy stuff is easy and hard stuff is impossible.
This is a bit more specific to Apple imho. Android layouts are also XML but much smaller and much more manageable in source control. The underlying xml of storyboard files are hundreds of lines long and often change just from opening the file, even if you don't change anything.
> Doesn't play well with source control. Even if the GUI builder spits out a text-based format like XML, it's hard to read and understand diffs, and it can be difficult to impossible to merge.
I often see people making this claim, and I don't understand it. I think the XML format is very sane.
* It's declarative: the structure matches the view hierarchy, making it easy to audit.
* Custom property values are attributes of the view element, putting all of the view customization in one place.
* Constraints are displayed in a way that matches their implementation: they're added to a single view, and they relate two (or one) views with multipliers and constants. The view id is kind of gross, but it's very searchable.
RE: merging. I also strongly disagree that this is "difficult to impossible". If the changes are to separate parts of the view hierarchy or different ViewControllers, they won't conflict. If you do have two different changes to the same views that need to be merged, isn't it a feature that a human has to look at them? I contend that if you read the xml and understand your view hierarchy, merging is not impossible and is often easy.
One way to think about this is: why don't you or I use a GUI to build a front end.
I tried to use one for Bootstrap, and it was hard to get the everything to line up right. I wasn't sure how things would act when the screen changed, or how to change that.
Then when I went into the CSS it was laid out in an unfamiliar fashion.
These problems seem very solvable, but I don't know why they persist.
(this also applies to anyone else who thinks that GUI frontend editing is the way forward - send me an email and I'll let you know when I have something to show you! I won't send you anything else, scout's honour).
I often think, and many agree, that the problem is with reactive interfaces supporting both mobile and desktop. Or that the problem is with GUI editors producing disgusting HTML. And indeed these are both problems. But QTDesigner, and friends don't face these problems. Your GTK app isn't going to be a reactive interface, and QT, not using html, isn't at risk of the "disgusting html" problem. And yet these designers aren't terribly popular either.
Wix.com, for example, does a nice job with this. If you play around with it, though, you can see why it would be difficult to extend it for general purpose use on any type of website. See https://www.youtube.com/watch?v=UgkkiKdPibg for an idea of how it works.
Also, code is a really handy tool for design (generation/automation).
I believe in using the right tool for whatever "material" I'm working with. For (responsive) web apps, that tool is HTML/CSS/JS.
Most designer's have their own preferences. I don't believe any current or future wysiwyg app can meet all needs.
WYSIWYG development just sucks. It's not diffable nor mergeable. Quick setup is simple, but complex refactorings are plain impossible. Also there's always at least this one thing the editor fights you on.
Then again, for me frontend means native applications, using Android UI Builder, WPF Blend, Qt Creator, iOS UI Builder, Netbeans Matisse.
https://pinegrow.com/
http://www.bootply.com/
A list of some options:
http://www.cssauthor.com/bootstrap-editors/
How about Structor: https://helmetrex.com
In chip design there's graphical editors available, but most design work is done by writing text in languages such as Verilog and VHDL.