[{"data":1,"prerenderedAt":393},["ShallowReactive",2],{"project-40469592":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":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":42,"post_text":45,"what":46,"said":82,"maker_in_thread":210,"shape":222,"grid":225,"attempts":349,"same_week":354,"maker_shows":33,"maker_hidden":385,"reader_version":386,"card":387},"40469592","Spot","Simple, cross-platform, reactive desktop GUI toolkit for Go","title","Show HN: Spot – Simple, cross-platform, reactive desktop GUI toolkit for Go","https:\u002F\u002Fgithub.com\u002Froblillack\u002Fspot","github.com","da_rob",1716578371,2024,309,57,193,3515,6,"legend","dev_tools","gui toolkit","library",[24,25,26,27],"go gui toolkit","react-like go","cross-platform desktop gui","fltk go","curious",-0.163,{"positive":31,"neutral":32,"mixed":33,"critical":18},2,12,1,21,{"idea":36,"design":38,"docs":40,"performance":41},{"positive":31,"critical":37},4,{"positive":39,"critical":31},0,{"positive":39,"critical":39},{"positive":39,"critical":39},[43,39,33,44,39,39,39,39,44,39,44,39,39,39,44,33,39,44,43,39,39,39,39,33,44,39,44,44,39,39,39,39,33,44,44,33,33,39,44,39],5,3,"Hi HN, I’m excited to share Spot, a simple, cross-platform, React-like GUI library for Go. It is just a few days old and has lots of missing features but I'm happy with the results so far, and looking for some design feedback.\n\nSpot is designed to be easy to use and provide a consistent API across different platforms (mainly Mac & Linux). It’s inspired by React, but written in Go, aiming to combine the best of both worlds: the easy tooling & performance of Go with a modern, reactive approach to UI development.\n\nKey features:\n\n- Cross-platform: Leveraging FLTK[1] & Cocoa[2], Spot works on Mac, ",{"problem":47,"audience":53,"pricing":62,"motivation":63,"time_to_build":62,"stack":67,"openness":80,"stage":81,"team_size":80},{"value":48,"source":49,"evidence":50},"Building cross-platform desktop GUIs in Go with a traditional native look and reactive model","maker",[51],{"id":52},"post",{"value":54,"source":55,"evidence":56},"Go developers building desktop applications","inferred",[57,58],{"id":52},{"id":59,"by":60,"text":61},"40471637","heywire","I’ll have to give this a look! I’ve been looking for a simple way to use Go to write an internal development tool which is basically just a form with some buttons and text…",null,{"value":64,"source":49,"evidence":65},"Wanted a cross-platform Go GUI toolkit with a traditional look; experimented with building a React-like framework in Go",[66],{"id":52},[68,72,76],{"value":69,"source":49,"evidence":70},"Go",[71],{"id":52},{"value":73,"source":49,"evidence":74},"FLTK",[75],{"id":52},{"value":77,"source":49,"evidence":78},"Cocoa (via Gocoa)",[79],{"id":52},"unknown","beta",{"praise":83,"objections":102,"requests":128,"questions":151,"alternatives":173},[84,93],{"value":85,"source":49,"evidence":86},"Declarative reactive model is appealing for complex state",[87,90],{"id":88,"by":11,"text":89},"40472801","For complex scenarios (i.e. the user interacting with the UI while there are some long-running processes in the backround doing this, too), managing the state quickly gets…",{"id":91,"by":11,"text":92},"40470027","While I agree, that the virtual widget tree has a certain overhead, the typical desktop app you would create with Spot probably does not have 1000s of components—more like ten to…",{"value":94,"source":95,"evidence":96},"Fills a need for simple Go GUI with React-like model","commenter",[97,101],{"id":98,"by":99,"text":100},"40471540","Heliodex","If only I had known about this (or judging by commit history, if it existed) ~3 weeks ago. I've been saying for ages that either React ported to Go or a React-like framework for…",{"id":59,"by":60,"text":61},[103,110,117],{"value":104,"source":95,"evidence":105},"Cross-platform support is spread across too many toolkits and may hurt quality",[106],{"id":107,"by":108,"text":109},"40487024","jerf","\"Cross-platform: Leveraging FLTK[1] & Cocoa[2], Spot works on Mac, Linux, and the BSDs with plans for native Windows support in the future.\" I'd seriously recommend that you…",{"value":111,"source":95,"evidence":112},"No Windows support yet",[113],{"id":114,"by":115,"text":116},"40472548","KingOfCoders","I applaud your effort, but cross plattform with no Windows support?",{"value":118,"source":95,"evidence":119},"Virtual widget tree adds overhead and complexity",[120,124],{"id":121,"by":122,"text":123},"40472841","felipefar","I'm already convinced of the benefit of declarative GUIs over imperative ones. To be clearer, what I mean by declarative GUIs is ones where I can specify that UI elements should…",{"id":125,"by":126,"text":127},"40469307","ASalazarMX","I don't know how to take this in. On one side, it's great to have a cross-platform GUI toolkit that's easy to use; on the other side, it feels like a React-like UI is contrary to…",[129,137,144],{"value":130,"source":95,"evidence":131},"Windows support",[132,133],{"id":114,"by":115,"text":116},{"id":134,"by":135,"text":136},"40472535","getcrunk","Fltk supports windows. Will you be using another solution and that’s why u don’t support windows yet?",{"value":138,"source":95,"evidence":139},"GTK backend for Linux",[140],{"id":141,"by":142,"text":143},"40471100","jakjak123","Very cool idea! If someone implements GTK I would absolutely use it, its just fltk is no fun in Linux world",{"value":145,"source":95,"evidence":146},"Listing supported platforms in the readme",[147],{"id":148,"by":149,"text":150},"40478463","sandreas","Looks great! Thanks for sharing. Would you consider listing the supported platforms in the readme? I think that would be a pretty interesting piece of information: ``` - Windows…",[152,159,166],{"value":153,"source":95,"evidence":154},"Why use a virtual tree instead of direct updates to controls",[155,158],{"id":156,"by":122,"text":157},"40472625","I'm curious to hear your take on this: what's the advantage of following the virtual control tree approach compared to instead updating directly the controls that are displayed…",{"id":121,"by":122,"text":123},{"value":160,"source":95,"evidence":161},"How cross-platform layout handles differing native control sizes",[162],{"id":163,"by":164,"text":165},"40474090","iamcalledrob","I have been looking for something like this in Go for a while. I think there's a real opportunity for Go to provide a great developer experience for cross platform UI due to how…",{"value":167,"source":95,"evidence":168},"Cross-compilation and packaging for macOS and Windows",[169],{"id":170,"by":171,"text":172},"40470222","scosman","Cool! What does building for cross platform look like? Would love if there was a command that produced my MacOs .app and Windows exe without me having to dive into package…",[174,185,192,199,203],{"value":175,"source":95,"evidence":176},"Fyne",[177,181],{"id":178,"by":179,"text":180},"40475307","dweymouth","This is exactly how the data binding APIs in Fyne (another Go GUI toolkit) work. And it's also an optional feature, so if you want to handle things by registering callbacks and…",{"id":182,"by":183,"text":184},"40473721","andrewfromx","Been using https:\u002F\u002Ffyne.io\u002F https:\u002F\u002Fgithub.com\u002Ffyne-io\u002Ffyne for years but will check this out ( terminal but still great go guis: https:\u002F\u002Fgithub.com\u002Fgizak\u002Ftermui…",{"value":186,"source":95,"evidence":187},"Wails",[188,191],{"id":189,"by":99,"text":190},"40471719","Wails \u003Chttps:\u002F\u002Fwails.io>. I wanted to use Go but wasn't as familiar with native UI as with HTML\u002FCSS\u002FJS, I tried out most of the other popular Go UI frameworks too though they…",{"id":59,"by":60,"text":61},{"value":193,"source":95,"evidence":194},"wxWidgets",[195],{"id":196,"by":197,"text":198},"40470257","allanrbo","Was looking for something like this some years back. Though I wanted Windows support too. Ended up switching to C++ to use wxWidgets, giving me small self contained binaries.",{"value":200,"source":95,"evidence":201},"Gio",[202],{"id":59,"by":60,"text":61},{"value":204,"source":95,"evidence":205},"Qt",[206],{"id":207,"by":208,"text":209},"40479732","Fire-Dragon-DoL","Main problem is that when you release on desktop, a web version is usually desirable (except for very niche apps that interact a lot with the OS). Alternatively, something that…",{"comments":211,"answered":43,"key":212},9,[213,216,219],{"id":214,"text":215},"40472817","Perfect use-case, IMHO! Looking forward to hear your thoughts ocne you tried it.",{"id":217,"text":218},"40470433","Big fan of WxWindows, I'm just too invested into Go these days. :) Self-contained Spot \"Hello World\" is 2.3MiB on my Mac. Not pretty, but works for me.",{"id":220,"text":221},"40473286","Geez, look at the build instructions! It all went downhill when they switched from Motif to GTK.",{"commenters":223,"max_depth":37,"maker_replies":211,"first_comment_mins":39,"lifespan_hours":224},33,67,[226,228,230,232,234,236,238,242,244,247,250,251,253,254,256,260,263,264,268,270,271,275,278,280,284,285,288,291,294,297,299,300,303,307,309,311,313,315,317,319,322,326,328,332,334,337,339,340,345,347],[59,39,43,227,60,39],"project\u002Fpositive\u002Fidea",[214,39,39,229,11,33],"commenter\u002Fpositive\u002Fnone",[107,33,33,231,108,39],"project\u002Fcritical\u002Fidea",[163,31,44,233,164,39],"project\u002Fneutral\u002Fdesign",[196,44,44,235,197,39],"project\u002Fneutral\u002Fnone",[217,44,39,237,11,33],"project\u002Fneutral\u002Fperformance",[239,44,39,240,241,39],"40473096","other\u002Fneutral\u002Fnone","ofrzeta",[220,44,39,243,11,33],"other\u002Fcritical\u002Fdocs",[245,44,39,240,246,39],"40471311","mappu",[248,44,39,240,249,39],"40473335","zerr",[156,37,44,233,122,39],[88,37,39,252,11,33],"project\u002Fpositive\u002Fdesign",[121,37,44,233,122,39],[255,37,39,233,11,33],"40473058",[257,37,39,258,259,39],"40473482","other\u002Fneutral\u002Fdesign","iainmerrick",[261,37,39,258,262,39],"40473708","jdthedisciple",[178,37,39,258,179,39],[265,37,44,266,267,39],"40472949","project\u002Fmixed\u002Fdesign","lenkite",[148,43,44,269,149,39],"maker\u002Fneutral\u002Fdocs",[114,18,33,231,115,39],[272,18,39,273,274,39],"40473801","commenter\u002Fcritical\u002Fnone","atlas_hugged",[276,18,44,235,277,39],"40474136","RobotToaster",[98,279,43,227,99,39],7,[281,279,39,282,283,39],"40471612","commenter\u002Fneutral\u002Fnone","apitman",[189,279,39,240,99,39],[286,279,39,240,287,39],"40472137","parlortricks",[289,279,39,240,290,39],"40472183","rkwz",[292,279,39,240,293,39],"40476353","biomcgary",[295,279,39,296,290,39],"40481815","other\u002Fneutral\u002Fperformance",[207,298,33,231,208,39],8,[134,211,44,235,135,39],[301,211,39,302,11,33],"40472764","maker\u002Fneutral\u002Fnone",[304,305,44,237,306,39],"40470190",10,"ygnasygnoimqwb",[308,305,39,302,11,33],"40470393",[170,310,44,235,171,39],11,[312,310,39,235,11,33],"40470365",[314,310,39,240,171,39],"40470638",[316,310,39,282,246,39],"40471283",[318,310,39,240,283,39],"40471472",[320,310,39,321,122,39],"40472594","other\u002Fneutral\u002Fidea",[323,32,33,324,325,39],"40480230","project\u002Fcritical\u002Fdesign","gloosx",[141,327,44,235,142,39],13,[329,330,44,235,331,39],"40472972",14,"zem",[182,333,39,240,183,39],15,[335,333,33,324,336,39],"40475339","bsimpson",[125,338,33,231,126,39],16,[91,338,39,237,11,33],[341,342,44,343,344,39],"40474171",17,"project\u002Fneutral\u002Fidea","kdma",[346,342,39,240,336,39],"40475324",[348,342,39,282,344,39],"40491226",[350,353],{"id":351,"t":352,"points":211,"comments":39},"40390501",1715957066,{"id":4,"t":12,"points":14,"comments":15},[355,360,365,370,375,380],{"id":356,"name":357,"points":358,"category":359},"40456236","Dataherald",464,"data",{"id":361,"name":362,"points":363,"category":364},"40501021","Grooved",452,"hardware",{"id":366,"name":367,"points":368,"category":369},"40455478","PaperTalk",319,"productivity",{"id":371,"name":372,"points":373,"category":374},"40502956","Openkoda",318,"web_saas",{"id":376,"name":377,"points":378,"category":379},"40456959","Porter Cloud",258,"infrastructure",{"id":381,"name":382,"points":383,"category":384},"40481578","DiscoGrad",232,"languages",false,"v2",{"id":388,"name":5,"line":6,"ai":385,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":389,"top":18,"kw":390,"maker":11,"domain":10,"tier":19,"attempts":31,"strip":391,"url":9,"mix":392,"praise":85,"objection":104,"sub":21},40469592,-0.16,[24,25,26,27],"5013000030300031035000013033000013311030",[31,32,33,18],1794036655291]