[HN Gopher] Hyperview: Native mobile apps, as easy as creating a... ___________________________________________________________________ Hyperview: Native mobile apps, as easy as creating a website Author : ksec Score : 158 points Date : 2022-12-26 13:17 UTC (9 hours ago) (HTM) web link (hyperview.org) (TXT) w3m dump (hyperview.org) | replwoacause wrote: | Can this be used to create a web app too? | adamstep wrote: | Theoretically yes. Since Hyperview uses React Native, you can | use React Native for Web to render a Hyperview app in the web | browser. However, the resulting web app won't feel at home, the | same way a webview-wrapped web app doesn't right on mobile. A | better approach is to share the same backend, but have requests | return Hyperview or HTML responses based on the client. | recursivedoubts wrote: | Hyperview is an amazing piece of technology, bringing the | hypermedia architecture to a native mobile environment in a way | that HTML just can't. The crux of the system is that it provides | not only a mobile hypermedia that takes advantage of mobile- | specific features, but also it provides _a client_. | | This client is key because it is what allows the uniform | interface of HXML to function properly. I didn't appreciate how | important the browser was (it's often forgotten in discussions | around hypermedia on the web) until I saw how well Hyperview | works and thought about why. | noveltyaccount wrote: | This is neat, but why does it need a new XML schema? Why not bind | a subset of HTML controls to native controls? | robmccoll wrote: | Cool - extend this to just be a new browser that supports | Content-Type: text/html and Content-Type: text/hyperview or | something rendering either using a Web View or a Hyperview. Allow | links between Hyperview documents within and across domains. Add | user-driver permissions per domain for native APIs. It's been | time to have a better alternative to HTML/JS for building rich | applications on the web that still fit as web technologies. | adamstep wrote: | I've been thinking about adding something like this to the | Hyperview client: if a response uses HTML content type, we can | render the screen in a web view. | paradite wrote: | Is this a new DSL reinventing WeChat's Mini Apps / Mini Programs? | | https://web.dev/mini-apps/ | | https://github.com/apelegri/wechat-mini-program-wiki | | https://developers.weixin.qq.com/miniprogram/en/dev/framewor... | marstall wrote: | reminded me more of Expo, but looks like it might be friendlier | to newer devs, designers who want to make an app, or just | someone who knows their app will stay within certain | boundaries. | | Another option I like, which takes some minimal custom native | programming, is to use Android/IOS native WebViews load your | mobile-web app and use it as a mobile app. | paradite wrote: | I use Expo everyday. Expo is more like a supercharged React | Native + SaaS. This is apparently also built with React | Native but somehow does not expose RN to user (didn't look | into docs too much)? | novok wrote: | If it's too obvious that your app is just a web-app shell, | you risk rejection from the iOS app store at least, and | they'll tell you to just use the 'bookmark website as app' | thing. Needs to still feel like a native app, which is | possible but more work. | personjerry wrote: | What's the difference between this and a PWA? | kitsunesoba wrote: | Looks like this uses the native UI toolkits under the hood, | making it closer to something like React Native, whereas a PWA | is just a chromeless webview with a home screen icon loading a | web app. | personjerry wrote: | So many options under that spectrum now. I'm not sure how to | decide what to use in the future, hmm. | adamstep wrote: | That's right. Under the hood, the Hyperview client is built | on top of React Native. That means it can be easily extended | by creating new RN components, and mapping them to a new XML | tag: https://hyperview.org/docs/reference_custom_elements | samora wrote: | This is great! I think Facebook Lite already uses something like | this. Great work. | | https://engineering.fb.com/2016/03/09/android/how-we-built-f... | ivanstojic wrote: | How does this differ from XUL? | adamstep wrote: | Hyperview incorporates ideas from HTMX to make it easy to | create dynamic apps without the need for developers to write | client-side JS. | luckymate wrote: | Won't it cause problems with Google/Apple stores? | jtsiskin wrote: | No, this isn't shipping native code dynamically, just content. | Crudely, will the fetched bytes go into executable or non- | executable memory? If non-executable, Google/Apple are usually | lax | adamstep wrote: | That's right, no native code is shipped dynamically. The | dynamic part is the layout of components and styling. Many | apps use this approach and refer to it as Server-driven UI | (SDUI). | _448 wrote: | Other similar projects: | | 0. DivKit by Yandex https://github.com/divkit/divkit | | 1. AdaptiveCards by Microsoft | https://github.com/microsoft/AdaptiveCards | | 2. dynamic_widget(https://github.com/dengyin2000/dynamic_widget) | and json_dynamic_widget(https://github.com/peiffer- | innovations/json_dynamic_widget)f... Flutter | darkteflon wrote: | This is so elegant. It has that rare quality of making you go: | "Aha! This is the obviously correct paradigm". Web and Electron | apps are inevitably marked out by distinctive UX jank. In the iOS | ecosystem - just the one I'm most familiar with - I always felt | that Apple was pushing them more as a sop to App Store regulators | than because they are a real, viable alternative to native. | thecupisblue wrote: | Wasn't basically this just posted under | https://news.ycombinator.com/item?id=34134545? | singpolyma3 wrote: | I'm a bit curious why invent a new XML format rather than a | subset of HTML+HTMX | adamstep wrote: | XML, as the name implies, is extensible. An important aspect of | Hyperview is that developers can create their own high-quality | UI elements that can then be referenced by the backend using | XML tags. These are things we can't do with a subset of HTML. | In the Hypermedia Systems book, I showed examples of extending | the XML format to add things like swipeable rows and toast | messages: https://hypermedia.systems/book/extending-the- | hypermedia-cli... | gorbypark wrote: | Seems interesting and is apparently built on top of React Native. | Obviously this is billed as a "server side streaming UI", but | it's already possible to chunk the React Native bundle and | deliver portions on demand (per route/screen, for example). Of | course that's a bit different than generating the XML for the | screen on the fly, but more or less gives most of the benefits | this would offer in terms of small initial downloads and OTA | updates. | aatd86 wrote: | It's often known as Server-Driven UI. | | It's basically a generalization of Server-Side rendering. | | I'm interested in knowing the limitations of that approach | besides the connectivity requirement. | | Are complex data-based interactions easily implementable? | adamstep wrote: | Local interactions can be achieved with this approach by | building custom components. However, a limitation of Server- | driven UI is supporting interactions that update state across | the entire app. For example, I wouldn't use Hyperview or HTMX | to implement a spreadsheet, where changing the value in one | cell would trigger recalculations across the sheet. | JoeyJoJoJr wrote: | I wonder if there is some mechanism that could achieve app | wide state updates by performing a "refresh" after a | mutation, and hyperview/HTMX handles the integration of the | the changeset. | sibeliuss wrote: | Q: Since this is built on React Native, is it possible to | build pages using Hyperview and then supplement them with | stateful UI component trees using common RN libraries (eg, | Redux)? Like, mix approaches? | adamstep wrote: | It is possible. We've built apps this way (integrating | Hyperview into an existing RN app). With custom | behaviors, you can have actions in Hyperview screens | trigger Redux actions: | https://hyperview.org/docs/reference_custom_behaviors | tessela wrote: | Reminds me of https://jasonette.com (also AMP, sigh) | christiangenco wrote: | I used to love jasonette! I think the project was abandoned a | while ago but in digging into it from this comment it looks | like it was forked just for iOS and is now actively maintained | at https://jasonelle.com/ | adamstep wrote: | Yes, Hyperview was definitely inspired by Jasonette. Like | others have mentioned, Jasonette is not maintained, and | Jasonelle has moved away from the server-driven paradigm. Check | out Hyperview if you enjoyed Jasonette! | jacobra2 wrote: | How does login/auth work with Hyperview if there's no local | storage? | adamstep wrote: | There is session storage much like in a web browser. So you can | use the same cookie-based auth techniques. | dr_kiszonka wrote: | Does it have any limitations wrt accessing Android's API? For | example, can I create a Hyperview password manager that would | draw over other apps and fill out fields using Android | Accessibility features? Can you access sensor information or list | running processes? | NoahKAndrews wrote: | Looks like you have do that via React Native components: | https://hyperview.org/docs/reference_custom_behaviors | adamstep wrote: | Hyperview probably isn't the best fit for apps with deep | platform integration. Given that it's designed to be cross- | platform and server-rendered, I think this use case would be | better served writing code directly against the Android SDK. | a9h74j wrote: | It does seem imaginable to have Android-specific browsers | support a common superset of the "nominal/desktop" browser js | api. Reference to Hyperview not specifically required, but an | enabler for such. | | Security issues of course, so specific pages/sites might need | permissions, as with webserial etc. | ckluis wrote: | TLDR: Serve XML from a server and get "dynamic" native apps | Cyberdog wrote: | So it's a web app with new syntax. | | People who use the term "native app" incorrectly like this | should... face difficult circumstances. | Kiro wrote: | It is native though. You misunderstand what this is. | Cyberdog wrote: | My perspective is that if an app is not directly using a | platform's APIs, it is not native to that platform. Feel | free to explain to me and others how this take is wrong and | how something written in XML could be a native app on, say, | iOS. | Kiro wrote: | It is using the platform's API directly and renders | native components. The XML is just an abstraction layer | on top of that and not a web wrapper like you're | implying. It's not using any WebView. | adamstep wrote: | "Native" in this case refers to the fact that the interface is | rendered using the system UI libraries. So you get a native | feel for things like scrolling, navigation, gestures, etc. This | isn't possible (or really difficult) using web technologies | (HTML and JS) | dickersnoodle wrote: | This is the same B.S. definition-stretching that you see in a | bunch of React Native posts. | ljlolel wrote: | "Dynamic" "native" apps | leephillips wrote: | Are there any example apps that I can point the Expo client at to | try out? I mean ones with servers running, not the example that I | can develop myself. | adamstep wrote: | There is not, but the Github repo comes with a kitchen-sink | demo app that you can try: | https://github.com/instawork/hyperview#2-start-the-demo-app | solardev wrote: | Doesn't mean that every trivial UI update has to load over the | wire? Can you do client-side processing at all, like browsing or | filtering a downloaded list of items on the client itself? And | can you download new data without new UI code? | adamstep wrote: | Trivial UI updates can be handled client-side without hitting | the server. Some things can be done with the standar feature if | Hyperview, like hiding/showing elements. For filtering a list | of items, this is possible using Hyperview's support for custom | components. We've built apps that do this, and I'd be happy to | share our approach if you're interested! | akudha wrote: | Not you parent comment, please share more details. Thank you | [deleted] | LAC-Tech wrote: | Makes sense for B2C where discovery is done through app stores I | guess. But no B2B decision maker is idly browsing google play for | expensive SAAS products to use on a whim. Best there to focus on | a web app that does everything well until you get into time/cost | luxuries like mobile app - unless you really do need something | only native can do. ___________________________________________________________________ (page generated 2022-12-26 23:00 UTC)