<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: bryanphe</title><link>https://news.ycombinator.com/user?id=bryanphe</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 24 May 2026 19:48:26 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=bryanphe" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by bryanphe in "Onivim 2 is a retro-futuristic modal editor"]]></title><description><![CDATA[
<p>Thanks for trying it out and sharing your feedback, appreciate it!<p>> However, I really don't like the fact that there is no way to navigate tabs using vim's commands.<p>There's a related feature request here: <a href="https://github.com/onivim/oni2/issues/3673" rel="nofollow">https://github.com/onivim/oni2/issues/3673</a><p>> I also find the VSCode similarities distracting and it seems to be causing confusion to would be investors of this due to the assumption it's some branch of it as opposed to a completely new editor.<p>I agree, this is consistent feedback we get... There's a ton of potential to have a built-for-modal-editing UX that we're missing at the moment.<p>> Finally, is there a way to remove the system bar on the top in the configuration? I can toggle most elements of the UI but that system bar is visible even in zen mode and I never use it in any text editor with support for keyboard driven commands.<p>Yes, there is a `window.menuBarVisibility` configuration setting: <a href="https://onivim.github.io/docs/configuration/settings#layout" rel="nofollow">https://onivim.github.io/docs/configuration/settings#layout</a></p>
]]></description><pubDate>Tue, 29 Jun 2021 00:45:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=27670261</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=27670261</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27670261</guid></item><item><title><![CDATA[New comment by bryanphe in "Onivim 2 is a retro-futuristic modal editor"]]></title><description><![CDATA[
<p>Thanks for the feedback! I removed the animation... hopefully not as jarring now.</p>
]]></description><pubDate>Tue, 29 Jun 2021 00:39:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=27670219</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=27670219</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27670219</guid></item><item><title><![CDATA[New comment by bryanphe in "Why Isn't Functional Programming the Norm? [video]"]]></title><description><![CDATA[
<p>In terms of performance, the way we build applications today is <i>such a low bar</i> that IMO it opens the door for functional programming. Even if it is not as fast as C or raw assembly - if it is significantly faster than Electron, but preserves the developer ergonomics... it can be a win for the end user!<p>I created an Electron (TypeScript/React) desktop application called Onivim [1] and then re-built it for a v2 in OCaml / ReasonML [2] - compiled to native machine code. (And we built a UI/Application framework called Revery [3] to support it)<p>There were very significant, tangible improvements in performance:<p>- Order of magnitude improvement in startup time (time to interactive, Windows 10, warm start: from 5s -> 0.5s)<p>- Less memory usage (from ~180MB to <50MB). And 50MB still seems too high!<p>The tooling for building cross-platform apps on this tech is still raw & a work-in-progress - but I believe there is much untapped potential in taking the 'React' idea and applying it to a functional, compile-to-native language like ReasonML/OCaml for building UI applications. Performance is one obvious dimension; but we also get benefits in terms of correctness - for example, compile-time validation of the 'rules of hooks'.<p>- [1] Onivim v1 (Electron) <a href="https://github.com/onivim/oni" rel="nofollow">https://github.com/onivim/oni</a><p>- [2] Onivim v2 (ReasonML/OCaml) <a href="https://v2.onivim.io" rel="nofollow">https://v2.onivim.io</a><p>- [3] Revery: <a href="https://www.outrunlabs.com/revery/" rel="nofollow">https://www.outrunlabs.com/revery/</a><p>- [4] Flambda: <a href="https://caml.inria.fr/pub/docs/manual-ocaml/flambda.html" rel="nofollow">https://caml.inria.fr/pub/docs/manual-ocaml/flambda.html</a></p>
]]></description><pubDate>Thu, 17 Oct 2019 15:25:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=21283041</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=21283041</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21283041</guid></item><item><title><![CDATA[New comment by bryanphe in "Cross-Platform GUI Toolkit Trainwreck (2016)"]]></title><description><![CDATA[
<p>This is less fashionable now in the era of Electron apps - users are starting to expect apps that look _the same_ everywhere.<p>See VSCode, Discord, Spotify...<p>It's easier to get a single code-base that 'just works' across platforms if you have an abstraction that is truly cross-platform. One of the major value propositions of developing with Electron is this ability to develop cross-platform 'with confidence' - I can build an app on Windows and be 99% sure it's going to look function the same on OSX / Linux.<p>> I want my macOS apps to use Mac-native UI elements, and Windows apps to use Windows-native UI elements<p>That's a fine goal but it means you end up needing more platform-specific code. It's a trade-off, and there isn't a one-size-fits-all solution.</p>
]]></description><pubDate>Thu, 25 Apr 2019 19:45:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=19751799</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=19751799</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19751799</guid></item><item><title><![CDATA[New comment by bryanphe in "Cross-Platform GUI Toolkit Trainwreck (2016)"]]></title><description><![CDATA[
<p>Great list and summary! So often these concerns get conflated.<p>We're working on a framework that address 1, 2, 2.1, 3, and 3.1 - Revery [0] - a React-like framework that compiles to native code, built with ReasonML [1]. I believe that the React pure-functional model of UI-as-a-function-of-state is such a powerful paradigm, and not leveraged on native today - ReasonML is a perfect fit for that.<p>Bullet point 4 is a non-goal for Revery, but our sister project, Brisk [2] is built on platform widgets.<p>I'd personally also add a couple of dev experience bullet points or ideas to the "holy grail":<p>6) Fast / instant compilation time<p>7) Hot-reload (see changes to the app instantly)<p>We're not there yet, but we hope we could also get to the point of including 6/7 - essentially bringing some of the great aspects of React/Redux to desktop application development, with native code.<p>- [0] Revery: <a href="https://github.com/revery-ui/revery" rel="nofollow">https://github.com/revery-ui/revery</a><p>- [1] ReasonML: <a href="https://reasonml.github.io/" rel="nofollow">https://reasonml.github.io/</a><p>- [2] Brisk: <a href="https://github.com/briskml/brisk" rel="nofollow">https://github.com/briskml/brisk</a></p>
]]></description><pubDate>Thu, 25 Apr 2019 18:28:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=19751115</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=19751115</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19751115</guid></item><item><title><![CDATA[New comment by bryanphe in "Flutter desktop shells"]]></title><description><![CDATA[
<p>"Native" is actually overloaded in the era of hybrid web apps - there are two pivots:<p>- Native code - does the GUI framework compile to machine code?<p>- Native widgets - does the GUI framework use platform widgets, or a platform agnostic layer?<p>In the context of Revery, we used "native" to mean "native code", ie, "compiles to machine code" - and further clarify in the README. It's important for us to make this differentiation - because often people look at the framework and assume its JavaScript.<p>Do you have a suggestion on how to clarify this?<p>Note that, if you're interested in using the platform UI - there's a project called Brisk (<a href="https://github.com/briskml/brisk" rel="nofollow">https://github.com/briskml/brisk</a>) that is very similar to Revery, but uses platform UI frameworks (Cocoa/Win32/etc).</p>
]]></description><pubDate>Thu, 25 Apr 2019 15:40:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=19749271</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=19749271</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19749271</guid></item><item><title><![CDATA[New comment by bryanphe in "GLFW 3.3 Is Released"]]></title><description><![CDATA[
<p>Ah, that's too bad! I've been hunting for ways to get better integration tests on CI for Revery.<p>Would like to have image-based verification for certain classes of tests, and we use Azure CI pipelines - seems their VMs don't have hardware support at all for OpenGL (on any platform).</p>
]]></description><pubDate>Tue, 16 Apr 2019 18:32:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=19676087</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=19676087</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19676087</guid></item><item><title><![CDATA[New comment by bryanphe in "GLFW 3.3 Is Released"]]></title><description><![CDATA[
<p>Very excited for this release! GLFW is part of the foundation for a UI framework we're building called Revery [1] and there are several features in 3.3 that will be useful for us - transparent framebuffers, headless backend via OSMesa (important for CI / automation), and high-DPI improvements.<p>GLFW takes a lot of the pain out of cross-platform GPU development, and I've found the API simple and intuitive to work with. For those looking to play with it - the LearnOpenGL tutorial series [2] is excellent, and uses GLFW for managing a window and getting an OpenGL context.<p>Thank you maintainers for your work on it!<p>- [1] Revery: <a href="https://github.com/revery-ui/revery" rel="nofollow">https://github.com/revery-ui/revery</a><p>- [2] LearnOpenGL: <a href="https://learnopengl.com/Getting-started/Creating-a-window" rel="nofollow">https://learnopengl.com/Getting-started/Creating-a-window</a></p>
]]></description><pubDate>Tue, 16 Apr 2019 17:02:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=19675321</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=19675321</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19675321</guid></item><item><title><![CDATA[New comment by bryanphe in "OCaml on Baremetal Shakti RISC-V Processor"]]></title><description><![CDATA[
<p>There are some really cool projects popping up with ReasonML - here are a few:<p>- A package manager like NPM, but for native code: <a href="https://github.com/esy/esy" rel="nofollow">https://github.com/esy/esy</a><p>- A fast Node version manager: <a href="https://github.com/Schniz/fnm" rel="nofollow">https://github.com/Schniz/fnm</a><p>- A fast replacement for dotenv-cli: <a href="https://github.com/ulrikstrid/reenv" rel="nofollow">https://github.com/ulrikstrid/reenv</a><p>- A fast JS bundler: <a href="https://github.com/fastpack/fastpack" rel="nofollow">https://github.com/fastpack/fastpack</a><p>- A native language server: <a href="https://github.com/jaredly/reason-language-server" rel="nofollow">https://github.com/jaredly/reason-language-server</a><p>The OCaml language and toolchain is very powerful... and I do believe ReasonML makes it more approachable, at least for a wider audience of developers comfortable with JavaScript-style syntax.</p>
]]></description><pubDate>Fri, 29 Mar 2019 17:49:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=19523933</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=19523933</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19523933</guid></item><item><title><![CDATA[New comment by bryanphe in "Revery – Native, high-performance, cross-platform desktop apps"]]></title><description><![CDATA[
<p>Sorry, our documentation isn't very clear. The API is Electron-inspired (as if you had React+Redux+Electron), but it's compiled down to a fast native stack consisting of GLFW/FreeType2/Harfbuzz.</p>
]]></description><pubDate>Fri, 25 Jan 2019 16:08:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=18999166</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18999166</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18999166</guid></item><item><title><![CDATA[New comment by bryanphe in "Revery – Native, high-performance, cross-platform desktop apps"]]></title><description><![CDATA[
<p>Hey scoopr! Thanks a lot for trying it out.<p>> It does seem to exhibit the usual custom rendered app issues. I suppose it is constantly redrawing the screen, as it seems to have constant cpu usage even when doing nothing, so not laptop friendly (though perhaps fixable still).<p>Yes, at least when there is an animation active (we redraw the screen in that case). Most event-based apps, though, would only redraw in response to user input or for a temporary animation - our initial demo is constantly animating at 60hz, so maybe not the best performance demo...<p>> Some of the widget seem fairly arcane but usable.<p>Definitely. Still a lot of work needed here. We've had some excellent help from the community getting an initial palette of controls; but still a ways to go!<p>> One thing that was very alien to me was the build tooling and language/runtime.<p>This is great feedback. We should include more details in our README about this. The stack is really Esy [1] -> Dune [2] -> OCaml compiler (ocamlopt) [3]. Then C linker for your platform.<p>> Also how easy would it be to link C/Rust lib, so that revery would only be used as the UI layer for something else.<p>I haven't tried Rust, but C libs are doable with Reason/OCaml's C FFI [1]. In fact, several of the underlying pieces of technology powering Revery (GLFW, FreeType2, Harfbuzz) are used via this FFI [4].<p>[1] <a href="https://esy.sh/" rel="nofollow">https://esy.sh/</a><p>[2] <a href="https://dune.readthedocs.io/en/latest/quick-start.html" rel="nofollow">https://dune.readthedocs.io/en/latest/quick-start.html</a><p>[3] <a href="https://caml.inria.fr/pub/docs/manual-ocaml/native.html" rel="nofollow">https://caml.inria.fr/pub/docs/manual-ocaml/native.html</a><p>[4] <a href="https://github.com/bryphe/reason-glfw" rel="nofollow">https://github.com/bryphe/reason-glfw</a></p>
]]></description><pubDate>Fri, 25 Jan 2019 16:07:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=18999152</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18999152</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18999152</guid></item><item><title><![CDATA[New comment by bryanphe in "Revery – Native, high-performance, cross-platform desktop apps"]]></title><description><![CDATA[
<p>Oni 2 creator here. Agree with your concern 100%. We're working to review the license and come up with a better fit with more clarity.<p>We really just want a license that says - free to use for educational / non-commercial purposes, but a license is required to use in a commercial environment. No real "drop-in" licenses to support this, unfortunately. Some additional thoughts about our considerations here: <a href="https://www.reddit.com/r/neovim/comments/ae7ef6/question_about_oni_2_license/ednq9hz/" rel="nofollow">https://www.reddit.com/r/neovim/comments/ae7ef6/question_abo...</a><p>The work that we want to share out (custom widgets that are more generally applicable) will live in Revery - that's the reason we split Revery out from Oni2 into an MIT Licensed project - so that we could share the heart of the work out with a  broader community, and get help building out this foundation, too.</p>
]]></description><pubDate>Fri, 25 Jan 2019 15:57:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=18999027</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18999027</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18999027</guid></item><item><title><![CDATA[New comment by bryanphe in "Revery – Native, high-performance, cross-platform desktop apps"]]></title><description><![CDATA[
<p>Hey HN! I'm Bryan, creator of Revery. I was really surprised when I saw Revery on the front-page of HN, so cool!<p>I apologize that there isn't more info - we're still working on website, docs, architecture diagrams, etc. But I'll be around for a bit to answer questions. It's still pretty new and actively developed - we're building it in parallel with the next version of our Oni [1] text editor. Some of the rationale for this decision can be found in our early architecture document for the next version of Oni [2].<p>ReasonML (which is a syntax over OCaml) is now a great environment to build native apps. Most of the attention has been focused on the compile-to-JS scenarios, but the tooling is at the point where you can just as easily compile-to-native on the major platforms, thanks to tools like Esy [3] - workflow isn't much different from NPM+JS development!<p>Jordan and team, as well as OCamlLabs on the OCaml side, have been smoothing out this native workflow (it's not easy to build a package manager for native code!), and I think/hope you'll see more ReasonML projects like Revery start to pop-up.<p>I'm bullish on this because React-as-a-paradigm (pure-functional UI) is a natural fit - it's like a language designed for React.<p>Not only that, there is some incredible work that has been invested in the OCaml ecosystem, too:<p>- The compiler is FAST<p>- The GC is FAST (also deterministic and supports sliced collections, important for perf)<p>- Very powerful type system (ADTs, GADTs) - we even express the React 'rules of hooks' in types, such that they're enforced in the compiler.<p>The output code generated by the OCaml compiler (ocamlopt) is fast too - in some cases on par with C++ [4]<p>Everything seemed to line up in terms of tech to make it a natural fit for us to give it a try :)<p>And Revery is meant for very custom UIs - there is a counterpart project called Brisk [5] that uses platform-native widgets. We share common infrastructure and in fact uses Brisk's reconciler to provide the 'React' layer and component model.<p>[1] <a href="https://github.com/onivim/oni" rel="nofollow">https://github.com/onivim/oni</a><p>[2] <a href="https://gist.github.com/bryphe/ca3260914818a1293864e9fa6422a69c" rel="nofollow">https://gist.github.com/bryphe/ca3260914818a1293864e9fa6422a...</a><p>[3] <a href="https://esy.sh/" rel="nofollow">https://esy.sh/</a><p>[4] <a href="http://www.ffconsultancy.com/languages/ray_tracer/comparison.html" rel="nofollow">http://www.ffconsultancy.com/languages/ray_tracer/comparison...</a><p>[5] <a href="https://github.com/briskml/brisk" rel="nofollow">https://github.com/briskml/brisk</a></p>
]]></description><pubDate>Fri, 25 Jan 2019 15:52:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=18998958</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18998958</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18998958</guid></item><item><title><![CDATA[New comment by bryanphe in "Revery – Native, high-performance, cross-platform desktop apps"]]></title><description><![CDATA[
<p>Note that Revery was built to power a text editor - which involves custom controls and interactions. Even elements as simple as scrollbars get re-implemented in that space.<p>I've been continually amazed at the ingenuity of the React ecosystem - so many intricate, well-designed custom controls - I believe if you have the write set of primitives, that community can make amazing things happen. So I'm hopeful and optimistic that we can at least get a subset of decent controls. But agree it's a challenge!<p>There are some cases (like text input) that are just so hard to get right - and can even change between OS versions - so we're looking at native support for some of those pieces.<p>Also, there is another project, similar in spirit to Revery, called Brisk [1] that uses platform-native widgets entirely. We're actually working closely together with them.<p>[1] <a href="https://github.com/briskml/brisk" rel="nofollow">https://github.com/briskml/brisk</a></p>
]]></description><pubDate>Fri, 25 Jan 2019 15:19:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=18998650</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18998650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18998650</guid></item><item><title><![CDATA[New comment by bryanphe in "Revery – Native, high-performance, cross-platform desktop apps"]]></title><description><![CDATA[
<p>The use case for Revery was to drive development of a text editor - and it turns out a lot of UI is custom in that case. And if you look at the landscape of Electron apps - Spotify, Discord, Code, Slack, etc - most of them are highly customized experiences that are mostly identical across platforms. It seems that style is "in fashion" these days.<p>I agree 100% that it isn't always the proper trade-off, though - there's another ReasonML project called Brisk [1] that is similar in spirit to Revery, but with platform widgets.<p>In fact, we're working together on several infrastructure pieces (the core 'reconciler' - the native React-like piece - is  actually developed by the Brisk team). So if you're interested in ReasonML + native app development - that might be one to follow!<p>We see the potential too for some exciting hybrid approaches - perhaps you prototype a cross-platform app in Revery, but then switch to Brisk for platform-specific projects, etc. Or even embed Revery in Brisk.<p>[1] <a href="https://github.com/briskml/brisk" rel="nofollow">https://github.com/briskml/brisk</a></p>
]]></description><pubDate>Fri, 25 Jan 2019 15:12:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=18998589</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18998589</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18998589</guid></item><item><title><![CDATA[New comment by bryanphe in "Show HN: Esy – fast and simple package management for native ReasonML/OCaml"]]></title><description><![CDATA[
<p>Just wanted to say thank you for all your work on this, Andrey!<p>I've been using for developing native projects with ReasonML / OCaml (on Windows!) - a framework called Revery [1] (a fast, native alternative to Electron) and a re-write for our Oni [2] text editor using this platform. It really wouldn't have been possible to pursue these paths without esy.<p>We're also starting to see other cross-platform Reason-native projects pop-up that I'm very excited about, like Brisk (native OSX UI w/ Reason/OCaml) [3] and Fastpack (native JS bundler - a faster webpack) [4].<p>Some of my favorite features are the following:<p>- Esy gives the convenience of NPM / Yarn, but for native development. Importantly, it <i>works great cross-platform</i> - OSX/Linux/Windows. IMO The ease of cross-platform development is one of the JS+Node+NPM workflows greatest strengths, and esy provides this for native development.<p>- Esy gets faster as you use it. It has smart caching for compiled artifacts - taking into account the full set of transitive dependencies.<p>- The linking / resolution workflow is incredibly useful for native development. For Revery, we'd often need to try fixes across our GLFW/Fontkit stack, and the link feature made this simple.<p>I'm biased as I've contributed a little bit to the esy, but I've found the approach to development really interesting architecturally - esy is like a 'React' for dependency management - treating the dependency tree as a "pure function" of (dependency tree -> lock -> build environment) with "memoization" to re-use compiled artifacts.<p>These are tough problems to solve in native... and I'm really impressed with your work Andrey! Thank you!<p>- [1] <a href="https://github.com/revery-ui/revery" rel="nofollow">https://github.com/revery-ui/revery</a><p>- [2] <a href="https://github.com/onivim/oni" rel="nofollow">https://github.com/onivim/oni</a><p>- [3] <a href="https://github.com/briskml/brisk" rel="nofollow">https://github.com/briskml/brisk</a><p>- [4] <a href="https://github.com/fastpack/fastpack" rel="nofollow">https://github.com/fastpack/fastpack</a></p>
]]></description><pubDate>Tue, 22 Jan 2019 17:10:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=18969914</link><dc:creator>bryanphe</dc:creator><comments>https://news.ycombinator.com/item?id=18969914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=18969914</guid></item></channel></rss>