[HN Gopher] FormKit: Form building framework for Vue 3
       ___________________________________________________________________
        
       FormKit: Form building framework for Vue 3
        
       Author : Destiner
       Score  : 169 points
       Date   : 2022-05-13 13:47 UTC (9 hours ago)
        
 (HTM) web link (formkit.com)
 (TXT) w3m dump (formkit.com)
        
       | msoad wrote:
       | Why people keep inventing new schema formats? JSON Schema is not
       | perfect but you can extend it to achieve all of what's in this
       | schema format.
        
         | bpicolo wrote:
         | Well, they're not validating JSON. Forms are text value fields
         | that aren't always sent as JSON later, or necessarily sent over
         | the wire at all.
         | 
         | They definitely are using their DSL for things far out of the
         | scope of JSON schema. The builtin debouncing is pretty neat:
         | https://formkit.com/essentials/validation#debounce-milli
         | 
         | Forms in UI code also tend to have a bunch of business-logic
         | type validation (e.g. "there's already a user with that email
         | address") which schemas alone are unsuitable for.
        
           | buremba wrote:
           | Well, they produce JSON though. I understand that there is
           | much more context related to the user interface but you can
           | extend JSON Schema to be able to tie more information to it.
           | It's an incredibly flexible & collaborative way to define the
           | schemas. The backend people are also familiar with it and can
           | validate the data & collaborate with frontend people over a
           | JSON Schema probably much easier compared to a frontend
           | libraries DSL.
           | 
           | For example; React has a library to generate forms via JSON
           | Schema and you can use uiSchema feature for the use-case that
           | you mentioned: https://react-jsonschema-
           | form.readthedocs.io/en/latest/api-r...
        
             | bpicolo wrote:
             | But then I'm running a bespoke DSL for interface display in
             | a validation lib.
             | 
             | It's not obvious that's the better direction eh?
        
       | ROARosen wrote:
       | I've used VueFormulate in the past, and it was extremely powerful
       | albeit somewhat bloated. FormKit seems like a step in the right
       | direction. Good Luck!
        
       | calltrak wrote:
        
       | juddlyon wrote:
       | The product and the website are really slick, but there is
       | nothing about who made this other than "FormKit, Inc." in the
       | footer. Is this a group, an individual, a subsidiary, or what?
        
         | ROARosen wrote:
         | FormKit is a "descendant" of VueFormulate[1] you'll find more
         | information there. here's the co-founder's Twitter:
         | https://twitter.com/jpschroeder
         | 
         | [1]https://vueformulate.com/
        
         | meetups323 wrote:
         | GH contributions primarily from three people, all affiliated
         | with https://www.wearebraid.com/home. Seems to be some web dev
         | consultancy that has open sourced part of their toolchain.
        
         | [deleted]
        
         | andrew_braid wrote:
         | One of the maintainers here -- new business created by the team
         | that made Vue Formulate (https://vueformulate.com/). FormKit is
         | its own entity because its goals are larger than being a sub-
         | product of a client-service agency.
         | 
         | Primary author is Justin Schroeder -
         | https://twitter.com/jpschroeder
         | 
         | I help :) (Andrew Boyd) - https://twitter.com/0xBOYD
        
       | Jarvy wrote:
       | I love these sorts of frameworks! Makes doing forms a lot nicer,
       | especially the live validation.
       | 
       | I feel like the next evolution is automatically generating a
       | whole form from selecting a schema in an OpenAPI spec.
       | 
       | In a lot of specs, the type (string, email, phone, int, etc) is
       | present along with any constraints (min/max length). Depending on
       | the language/OpenAPI generator, it even preserves field order. It
       | could massively speed up a lot of the more generic forms that
       | happen in frontend.
        
         | user3939382 wrote:
         | Here's a Clojure strategy optimized for streamlining this exact
         | type of development https://hyperfiddle.notion.site/Reactive-
         | Clojure-You-don-t-n...
        
         | divan wrote:
         | As for me, forms are the single most important aspect of many
         | web apps. Including critical ones for the society (banking,
         | tickets, taxes, etc). Large part of my frustration with the
         | state of web stems from how terrible experience with (creating
         | and using) forms is.
         | 
         | Web is almost 30 years old by now, and the announce of a way to
         | make forms relatively easily, still generates an excitement.
         | 
         | I mean, how many more years webdev community needs to realize
         | that typesetting engine from 80s is not a good option for
         | making modern robust UI apps? Technology for making hyperlinked
         | web-pages is a terrible foundation for apps.
        
           | blowski wrote:
           | I watched a video recently on how to make fire. 30,000 years
           | we've been doing it, and videos like that are still
           | interesting!
        
           | pineconewarrior wrote:
           | 1000% this. The state of native form inputs on the web
           | platform is dismal, truly. Particularly on mobile.
        
         | tuckwat wrote:
         | These exist, such as: https://github.com/rjsf-team/react-
         | jsonschema-form
         | 
         | We also built one from scratch and used it in client-facing
         | production applications (Angular + React Native). The biggest
         | hurdle is that JSON schema is great at describing the shape of
         | the form data but not a great job at describing how the form
         | looks. We ended up creating a separate "presentation" schema
         | which handled things like order of the form, rows/columns,
         | widgets to use, and much more.
        
         | rekwah wrote:
         | I know https://github.com/bytebuilders/vue-openapi-form exists
         | but no first hand experience with it.
         | 
         | There's also a number of them out there that generate a form
         | from json schema. I'm most familiar with
         | https://github.com/formschema/native which we use/extend at
         | https://routegy.com for microapps.
        
       | lubos wrote:
       | Very impressive. The schema covers everything I need. This
       | library desperately needs "Repeater" component which I assume
       | would handle array of inputs. This would allow FormKit to handle
       | the most complex forms which is where this library would help the
       | most.
        
       | ramraj07 wrote:
       | I used vue for a project and encountered a gnarly bug - I have a
       | component which can embed itself recursively, and I pass some
       | variables through the stack to communicate to the root. But if I
       | nest 3 components deep, it actually hangs the tab and crashes
       | chrome! Can't even debug! Not sure how to even recreate it in a
       | way that's not proprietary and hence can't file a bug as well.
        
         | Etheryte wrote:
         | That sounds like a bug in your code, honestly. Recursive
         | components have been around in Vue since 0.x and they're used
         | in many, many projects.
        
         | pmx wrote:
         | I'd be interested in seeing your code for this. I'm 99% certain
         | it's something in your code rather than in Vue itself. I've
         | done recursive nesting myself plenty of times and as long as
         | you limit the depth so it doesn't go infinite you're fine.
        
           | ramraj07 wrote:
           | Absolutely sure I'm doing something wrong but why would vue
           | allow any case that hangs the entire tab? I've never seen
           | that in any website ever!
        
             | DJBunnies wrote:
             | Are you expecting vue to prevent you from doing something
             | wrong?
        
               | ramraj07 wrote:
               | Imagine if you write a java program and you execute it to
               | get BSOD on windows, is that reasonable?
        
               | croes wrote:
               | In that case you should blame Windows not Java.
        
               | spiderice wrote:
               | Correct. And in this case, Chrome seems to be working as
               | intended. Crashing the tab when bad code is written
               | sounds like the correct behavior.
        
               | badthingfactory wrote:
               | I've written C# code that deadlocked a webserver, C++
               | code that crashed a computer lab, JavaScript code that
               | made the browser unresponsive, a SQL migration that
               | accidentally deleted too much data. I don't really know
               | what point you're trying to make, but bad code typically
               | behaves badly.
        
               | Etheryte wrote:
               | You can write a program that locks up your computer in
               | most any language, it's called a fork bomb. Of course,
               | there are guards against the most basic versions these
               | days, but the point still stands that there's nothing
               | stopping you from writing an endless loop that takes up
               | more and more resources.
               | 
               | You can open the browser dev tools on this very page,
               | write in `while(1);`, hit enter and watch the tab freeze
               | up.
        
         | AlbinoDrought wrote:
         | If it could help, I have a demo project that has recursive
         | components (comments) [1]. It can be seen in action on GitHub
         | Pages [2].
         | 
         | The only issue I encountered is that recursive components must
         | be named since they can't import themselves. This is covered in
         | the official Vue docs [3]
         | 
         | [1] https://github.com/AlbinoDrought/vue-
         | dit/blob/master/src/com...
         | 
         | [2] https://albinodrought.github.io/vue-
         | dit/#/sub/technology/uom...
         | 
         | [3] https://v2.vuejs.org/v2/guide/components-edge-
         | cases.html#Rec...
        
         | __ryan__ wrote:
         | Why can't you debug?
        
           | ramraj07 wrote:
           | Because it doesn't throw an error, and it hands deep inside
           | the vue code when an even to add one more nested component is
           | triggered.
        
             | skybrian wrote:
             | Maybe try console logging?
        
               | aabhay wrote:
               | But what if the component is a recursively nested logging
               | tool?
        
               | sgt wrote:
               | They might even become part of the next YC batch. A
               | recursively nested logging platform - quite a novel idea.
               | Possibly even possible to patent.
        
             | whizzter wrote:
             | iirc Chrome sometimes handles stack-overflows and/or out of
             | memory conditions badly. If you have any function there
             | that is called try making an entry/exit counter and
             | log/throw if it goes above some threshold.
        
       | strict9 wrote:
       | FormKit (formerly VueFormulate) team is the most responsive to
       | issues I've ever encountered. Superb documentation and easy to
       | understand apis.
       | 
       | If only all third-party packages/apps were as pleasant to work
       | with as the ones put out by FormKit team.
        
       | newuser94303 wrote:
       | Is there something like this for bootstrap?
        
         | Yuioup wrote:
         | Honestly I would rather have a UI-less solution a bit like the
         | "Reactive Forms" from Angular.
        
           | andrew_braid wrote:
           | For clarity, the base theme -- Genesis -- is 100% optional.
           | FormKit is not and does not aspire to be a UI library.
        
             | Yuioup wrote:
             | Ah great! I didn't read the docs closely, just did a quick
             | surface scan.
             | 
             | I'll definitely check this out.
        
               | andrew_braid wrote:
               | Hit us up in Discord if you have any issues! We've got a
               | very active community and someone (including the
               | maintainers) will be able to help if you're stuck!
        
         | andrew_braid wrote:
         | With the genesis theme that ships with it there's nothing that
         | would be inherently incompatible with bootstrap if you threw it
         | inside a container -- provided you're already using Vue.
         | 
         | Happy to hear if you're having any issues! We have a very
         | active and helpful discord community.
        
       | axi0m wrote:
       | I personally use that lib: https://github.com/openizr/gincko
       | Still in beta, but quite stable though.
        
       | XzAeRosho wrote:
       | I wish more frameworks or tools offered a landing page as good as
       | this project.
        
       | pupppet wrote:
       | Whenever I see these form frameworks the first thing I do is
       | click the label to ensure it focuses the input field. Aaaand
       | pass, good job!
        
         | Semaphor wrote:
         | That's a very low bar, I wouldn't even check because it's to be
         | expected. Are there any form frameworks getting traction that
         | are so broken?
        
           | ditsuke wrote:
           | What would you know, today I learned
        
         | KronisLV wrote:
         | It does appear to do that for me in their example on the
         | homepage (desktop Firefox), though?
         | 
         | Doesn't this happen by default in most cases where a regular
         | <label/> is used?
         | 
         | https://developer.mozilla.org/en-US/docs/Web/HTML/Element/la...
         | 
         | > When a user clicks or touches/taps a label, the browser
         | passes the focus to its associated input (the resulting event
         | is also raised for the input). That increased hit area for
         | focusing the input provides an advantage to anyone trying to
         | activate it -- including those using a touch-screen device.
        
           | pupppet wrote:
           | It only occurs when you use the label's for attribute to
           | manually associate the label with the input, or wrap both the
           | label text and the input in the same label.
        
         | [deleted]
        
       | est wrote:
       | What's the difference between Free and Pro?
        
         | jvzr wrote:
         | They will apparently (at least) offer new input types such as
         | tag fields. You can find a few references of the pro features
         | in the documentation and guides.
        
       ___________________________________________________________________
       (page generated 2022-05-13 23:00 UTC)