[{"data":1,"prerenderedAt":355},["ShallowReactive",2],{"project-20008466":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":43,"post_text":46,"what":47,"said":87,"maker_in_thread":189,"shape":191,"grid":196,"attempts":317,"same_week":318,"maker_shows":39,"maker_hidden":347,"reader_version":348,"card":349},"20008466","tiptap","A renderless and extendable rich-text editor for Vue.js","title","Show HN: A renderless and extendable rich-text editor for Vue.js","https:\u002F\u002Fgithub.com\u002Fscrumpy\u002Ftiptap","github.com","hanspagel",1558784881,2019,278,74,116,2195,6,"legend","dev_tools","rich text editor library","library",[24,25,26,27,28],"rich text editor","vue.js","prosemirror","renderless components","wysiwyg","mixed",0.441,{"positive":32,"neutral":33,"mixed":34,"critical":35},10,11,0,2,23,{"execution":38,"idea":40,"design":42},{"positive":39,"critical":34},1,{"positive":41,"critical":34},4,{"positive":34,"critical":35},[44,44,34,44,45,39,34,34,34,34,44,45,45,44,45,44,45,34,45,34,34,34,44,34,34,34,34,34,34,45,45,45,44,44,34,34,34,34,34,45],5,3,null,{"problem":48,"audience":56,"pricing":46,"motivation":65,"time_to_build":46,"stack":72,"openness":86,"stage":86,"team_size":86},{"value":49,"source":50,"evidence":51},"No good rich-text editor existed for Vue.js","commenter",[52],{"id":53,"by":54,"text":55},"20010273","philippkuehn","I didn't call it \"perfect\". Slate.js is great but has some downsides too. But for Vue.js there was like nothing, so I took the first step. There is also a core package of Slate,…",{"value":57,"source":58,"evidence":59},"Vue.js developers building rich-text editing","inferred",[60,61],{"id":53,"by":54,"text":55},{"id":62,"by":63,"text":64},"20009070","mathnmusic","While this is really nice, it's a shame that a VueJS developer is unable to re-use a React-based text-editor which already exists and he found it perfect. This is why Web…",{"value":66,"source":50,"evidence":67},"Vue lacked a good rich-text editor option, so the maker built one",[68,69],{"id":53,"by":54,"text":55},{"id":70,"by":54,"text":71},"20010232","We used Quill before as our rich text editor at scrumpy.io … a few months later I started working on tiptap :)",[73,79],{"value":74,"source":75,"evidence":76},"Vue.js","maker",[77],{"id":78},"post",{"value":80,"source":50,"evidence":81},"ProseMirror",[82,83],{"id":53,"by":54,"text":55},{"id":84,"by":54,"text":85},"20010205","It's built on top of ProseMirror (plain JavaScript).","unknown",{"praise":88,"objections":114,"requests":132,"questions":150,"alternatives":161},[89,100,107],{"value":90,"source":50,"evidence":91},"Renderless design gives full control over markup and styling",[92,96],{"id":93,"by":94,"text":95},"20010523","Etheryte","As a frontend dev, this is really, really nice and I wish more libraries followed the renderless principles. So many manhours are wasted, daily, just because a library is a tad…",{"id":97,"by":98,"text":99},"20010682","faitswulff","For those who were confused about the \"renderless\" bit: > What does renderless mean? > With renderless components you'll have full control over markup and styling. tiptap doesn't…",{"value":101,"source":50,"evidence":102},"Suggestions demo for mentions and autocomplete looks promising",[103],{"id":104,"by":105,"text":106},"20009156","jacquesc","I started paying attention to this when i saw the \"Suggestions\" demo. https:\u002F\u002Ftiptap.scrumpy.io\u002Fsuggestions Every rich text editor I've tried so far, it's been a nightmare to add…",{"value":108,"source":50,"evidence":109},"Smooth and supports good default functionality",[110],{"id":111,"by":112,"text":113},"20011120","manigandham","Nice work here, very smooth and supports a good set of functionality by default. Added to the list of HTML editor: https:\u002F\u002Fgist.github.com\u002Fmanigandham\u002F65543a0bc2bf7006a487",[115,125],{"value":116,"source":50,"evidence":117},"Vue renderless pattern via slots seen as cumbersome by some",[118,122],{"id":119,"by":120,"text":121},"20011209","ng12","I read the renderless article linked to in the README (https:\u002F\u002Fadamwathan.me\u002Frenderless-components-in-vuejs\u002F) and it seems like an absolute nightmare in Vue. Lots of cognitive…",{"id":123,"by":120,"text":124},"20025087","Why would you want to use slots, then? It's just extra steps for the same functionality. > The whole idea of renderless is to move beyond this very limited and crude approach for…",{"value":126,"source":50,"evidence":127},"Built-in links accept javascript: protocol without validation",[128],{"id":129,"by":130,"text":131},"20009671","lol768","Might be nice to do some more input validation, particularly for links - the editor is happy to insert a javascript: link. I don't think this poses a security issue (at most,…",[133,143],{"value":134,"source":50,"evidence":135},"Markdown output support",[136,140],{"id":137,"by":138,"text":139},"20008662","billconan","This is really cool! and I really want to adopt it. I have a question though, can the data be represented as markdown, instead of html and json? My current editor is monaco and…",{"id":141,"by":54,"text":142},"20010504","There is already a feature request about markdown support. You can follow that issue on github. At the moment I'm not sure if this will land in tiptap.",{"value":144,"source":50,"evidence":145},"Validation for link protocols",[146,147],{"id":129,"by":130,"text":131},{"id":148,"by":54,"text":149},"20010442","Good catch! That should be easily done.",[151],{"value":152,"source":50,"evidence":153},"Browser support, including IE11",[154,158],{"id":155,"by":156,"text":157},"20009047","ceejayoz","This is really slick. I like it. Would love details on browser support, though.",{"id":159,"by":54,"text":160},"20010449","It's built on top of ProseMirror. They're targeting IE11.",[162,173,181],{"value":163,"source":50,"evidence":164},"Quill",[165,169],{"id":166,"by":167,"text":168},"20010083","burlesona","This is really awesome. I’ve been watching Prosemirror for a long time and have considered building something like this on top of it, but haven’t had the time to try. I’ve been…",{"id":170,"by":171,"text":172},"20010835","whatl3y","At a quick glance tiptap looks great and I don't want to derail the thread mentioning another solution, but after admittedly struggling longer than I'd hoped to implement…",{"value":174,"source":50,"evidence":175},"Slate",[176,180],{"id":177,"by":178,"text":179},"20010448","azangru","On the topic of rich text editors (since people mentioned Slate) what's your opinion of react's draft.js?",{"id":53,"by":54,"text":55},{"value":182,"source":50,"evidence":183},"Draft.js",[184,185],{"id":177,"by":178,"text":179},{"id":186,"by":187,"text":188},"20012828","underwater","Not OP, but I was an early contributor to Draft. Draft JS lacks a few features, notably nested block support (tables) and a schema definition and sanitization. Slate is more…",{"comments":34,"answered":34,"key":190},[],{"commenters":192,"max_depth":193,"maker_replies":34,"first_comment_mins":194,"lifespan_hours":195},32,8,49,57,[197,199,202,204,206,208,210,212,215,217,219,221,223,224,227,229,231,232,233,235,237,238,240,244,247,248,251,253,255,257,261,264,267,270,273,276,278,281,284,287,290,291,292,296,298,299,300,302,305,308,311,314,316],[104,34,44,198,105,34],"project\u002Fpositive\u002Fexecution",[200,34,44,201,54,34],"20010222","maker\u002Fpositive\u002Fidea",[170,34,34,203,171,34],"commenter\u002Fneutral\u002Fnone",[205,34,34,203,105,34],"20011374",[93,39,44,207,94,34],"project\u002Fpositive\u002Fidea",[97,39,45,209,98,34],"project\u002Fneutral\u002Fidea",[119,39,39,211,120,34],"project\u002Fcritical\u002Fdesign",[213,39,34,214,94,34],"20015185","commenter\u002Fneutral\u002Fidea",[216,39,34,203,120,34],"20017120",[218,39,34,203,94,34],"20023561",[220,39,34,203,120,34],"20024253",[222,39,34,203,94,34],"20024963",[123,39,34,203,120,34],[225,39,44,207,226,34],"20011736","svieira",[137,35,45,228,138,34],"project\u002Fneutral\u002Fexecution",[230,35,45,228,130,34],"20009694",[141,35,45,228,54,34],[166,45,44,207,167,34],[70,45,45,234,54,34],"maker\u002Fneutral\u002Fnone",[111,41,44,236,112,34],"project\u002Fpositive\u002Fnone",[129,44,45,228,130,34],[148,44,45,239,54,34],"maker\u002Fneutral\u002Fexecution",[241,18,34,242,243,34],"20010066","other\u002Fneutral\u002Fnone","echopom",[245,18,34,203,246,34],"20010173","marmada",[84,18,45,228,54,34],[249,18,34,242,250,34],"20010364","dwaltrip",[252,18,34,242,54,34],"20010436",[254,18,34,242,250,34],"20010479",[256,18,34,242,54,34],"20010532",[258,18,44,259,260,34],"20022141","maker\u002Fpositive\u002Fnone","realty_geek",[262,18,34,242,263,34],"20010315","pxtail",[265,18,34,242,266,34],"20010696","luckydata",[268,18,34,203,269,34],"20010705","zemptime",[271,18,34,242,272,34],"20011060","deergomoo",[274,18,34,242,275,34],"20011301","dpau",[277,18,34,242,269,34],"20011816",[279,18,34,203,280,34],"20014120","Vinnl",[282,18,34,242,283,34],"20014151","h1d",[285,286,45,234,54,34],"20010212",7,[288,286,39,211,289,34],"20011470","Theodores",[155,193,44,236,156,34],[159,193,45,228,54,34],[293,294,44,236,295,34],"20010499",9,"werber",[297,32,44,236,260,34],"20022101",[177,33,34,242,178,34],[186,33,34,242,187,34],[62,301,34,242,63,34],12,[303,301,34,242,304,34],"20009126","jeremyjh",[306,301,34,242,307,34],"20009191","adrianhel",[309,301,34,242,310,34],"20010060","woah",[312,301,34,242,313,34],"20010598","mfatica",[315,301,34,203,63,34],"20011204",[53,301,45,234,54,34],[],[319,324,328,333,337,342],{"id":320,"name":321,"points":322,"category":323},"20012687","nextdns.io",372,"infrastructure",{"id":325,"name":326,"points":327,"category":20},"20033728","Endoflife.date",248,{"id":329,"name":330,"points":331,"category":332},"20001339","Workstation",206,"consumer_social",{"id":334,"name":335,"points":336,"category":20},"20019877","youtube-dl-interactive",196,{"id":338,"name":339,"points":340,"category":341},"20024448","Imgsquash",178,"creative",{"id":343,"name":344,"points":345,"category":346},"20041076","PugSQL",155,"languages",false,"v2",{"id":350,"name":5,"line":6,"ai":347,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":351,"top":18,"kw":352,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":353,"url":9,"mix":354,"praise":90,"objection":116,"sub":21},20008466,0.44,[24,25,26,27,28],"5505310000533535303000500000033355000003",[32,33,34,35],1793990989740]