GenericJam

GenericJam

Is there any interest in a mobile framework for Elixir akin to React Native or Flutter?

I am really interested but not sure about the right approach. I’ve done the steps here (this post is 5 years old so they have to be adapted a bit) to get Erlang working on an Android device although it’s currently only working through adb shell as the phone isn’t rooted which is the only way I can see I could run it with Termux. Not sure what the next step would be to get Elixir running on top of that but that’s the plan.

Maybe for graphics, etc we could look at Scenic.

I also thought about dissecting the build systems of Flutter or React Native to see if we could use a similar approach.

In the end I would like to have a component based systems similar to RN and Flutter. It makes sense to use something like Phoenix Templates for this.

I think Elixir as a language makes a lot of sense for mobile given its superior take on concurrency.

If I dare to dream I think we could think about things like code push in the future as well.

Does anyone have experience with getting beyond just building Erlang for mobile? I’d be interested to know what worked.

Showing Posts 1 to 10

amnu3387

amnu3387

I have no experience in this, nor any suggestions nor anything useful, but if I had a way of deploying a scenic app in mobile (both android and iOS) in a legit way as well as win/linux/macs I would have definitively gone that route for the game I’m building. I think that for a whole range of games that aren’t frame rate frenzy advanced 3d (tabletops, card games, strategy, even some rpgs and such) scenic could be a great fit. Instead I went for the final prototype as an Elixir backend, vue (static nuxt) for the frontend and pixi.js. The complexity is abysmal (but it only needs a compliant browser which is the reason why I opted for it).

kokolegorille

kokolegorille

Maybe lumen is a good fit for mobile?

But I don’t think it’s ready yet.

Dusty

Dusty

I think @boydm has commented in the past that Scenic is only aimed at devices with known/fixed screen dimensions. Given the variety of mobile devices you’d be targeting, that could be a major issue, but perhaps Boyd can clarify.

Given the amount of low-level work that goes into making these cross-platform mobile frameworks successful (and maintaining compatibility with the moving targets), I think you might be most successful if you piggyback on existing efforts. For example, writing an Elixir to Dart transpiler and supplying libraries that make the relationship to Flutter conventions transparent.

I am enthusiastic about the option to write any type of native code in Elixir, but I also see a trend in the other direction. People are weary of being chained to app stores, so there is more motivation than ever before to improve PWAs, the mobile web, etc.

boydm

boydm

Creator of Scenic

Hey there.

It isn’t that Scenic is only aimed a fixed size devices… Is more that it doesn’t have a built-in auto layout engine.

You can query the size of the screen when your scene starts. You can also dynamically change the scale factors and other things. It’s just that there are all sorts of compromises and tuning you would want in order to get your UI to look good under a variety of aspect ratios. Any attempt to build a generic auto-layout tool is both difficult and would need to make a set of decisions that didn’t feel like they would be optimal for all cases.

Having said that, you could make an auto-layout engine, and in fact, people are working on just that.

So… If you are looking Scenic on phones where you are effectively running a single app on a variety of screen aspect ratios, you need to think through how to reposition things to keep it looking good. Or just have a lookup table that that picks on of serveral nice pre-made layouts.

GenericJam

GenericJam OP

Hi Boyd! Thanks for chipping in. I really like Scenic. Kudos for that.

I know in Android and iOS you can query the OS for the screen size so this is kind of what I’m counting on. I’d be over the moon if this was the biggest hurdle. I suspect just getting it to work (reliably) will be perhaps the most difficult.

@boydm Where would you start with getting it to work? I see some positive indications using Android NDK as well as being able to use imported C libs (possible to bring the BEAM in?) in Android and iOS. There are also cross platform build tools like Boden.

boydm

boydm

Creator of Scenic

Well… there are two hurdles. I think the harder one is just getting the BEAM running at all. Although I haven’t paid too much attention over the past year (been working on a different port)…

After that …

I have a feeling the glfw driver might just work. Maybe? Decent odds of it

eahanson

eahanson

You could look at the approach that RubyMotion took. It’s a complete Ruby implementation on top of iOS and Android and compiles down to native code. You can use all the iOS or Android SDK and third-party libraries (depending on which platform your app is running on) plus all the Ruby standard library functions that were ported over, plus any cross-platform RubyMotion-specific third-party gems. I’ve written iOS apps in Objective-C, Android apps in Java, and iOS+Android apps in RubyMotion and I definitely prefer RubyMotion.

If you have a lot of time, you could try doing the same with Elixir :slight_smile:

ityonemo

ityonemo

I think if you built an elixir equivalent of React Native, a very many people would be interested! I would say the best approach (for now) is don’t try to get the BEAM on these devices, just take the LiveView approach; and figure out how to handle the “no-connection” situation later.

derek-zhou

derek-zhou

So if I don’t need to change aspect ratio, can I dynamically change the scaling factor and center the scene and live with letterboxing or scrolling now?

GenericJam

GenericJam OP

I was in touch with someone that used to be involved in RubyMotion. Here’s their contribution:

I think the challenges are:

  1. Exposing the native APIs (ObjC/Swift for iOS and Java/Kotlin for Android) to Elixir/Erlang. For that, you might need the ability to interface at the C level from Erlang, and be able to export the native APIs (for the case of Java, you could do that using JNI, this is how I did for RubyMotion/Android). You will need a way to tell the native world in case you start subclassing things from Erlang. In RubyMotion, I fixed that by reusing the native object system to Ruby (so that a Ruby class would always be an ObjC/Java class), if you use an existing Erlang runtime you will need to work on a bridge.

  2. Being able to package the binary so that it can be submitted to the app stores. In the case of iOS, you will need the ability to code sign, and also you will need an Erlang runtime that does not JIT; last time I looked the official runtime has a simple interpreter? (So it might not be an issue.)

  3. Probably other things that I can’t think of right now.

If I had to do it, I would look for an Erlang runtime that’s not too big and can be embedded; I believe I saw a few projects but you surely know more. I would also look for a runtime that I can easily tweak, so that I could interface it with ObjC/Swift and Java (through JNI).

Seems doable albeit not easy.

Where Next? Top

Trending in Discussions Top

AstonJ
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
2977 91898 914
New
AstonJ
The obligatory hello world thread! Who are you and where are you from? :stuck_out_tongue:
4616 55835 594
New
caslu
I want to open this thread for you all to discuss and help those who really like Ash but are still hesitant to use it in a real project. ...
New
arcanemachine
I was working on an Ecto migration and I needed a timestamp. So, for the nth time, I looked up the different data types for timestamps, a...
New
alexslade
Fly’s CEO posted this recently - Turn And Face The Strange · The Fly Blog It says that Fly is going all-in on sprites, which is a worry ...
New
Herve37
We’re evaluating API mocking tools for OpenAPI-based projects and would love to hear what other teams are using. We’re particularly inte...
New
matt-savvy
Is there a word for the ~> symbol used in Version strings? Do you also just call it a Squiggle Arrow™ ?!
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews