GithubHelp home page GithubHelp logo

alexxnica / elm-native-ui Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ohanhi/elm-native-ui

0.0 0.0 0.0 10.12 MB

WIP experiment: Build mobile apps in Elm using React Native.

License: BSD 3-Clause "New" or "Revised" License

JavaScript 23.40% Elm 76.60%

elm-native-ui's Introduction

Elm Native UI Build Status

Experimental support for writing native iOS and Android applications in the beautiful functional Elm language. This project builds on Facebook's React Native, using it as the JavaScript environment for Elm.

Frequently Asked Questions

Is This Production Ready?

No. This is all very experimental and work in progress.

Why React Native?

Mobile applications are expected to look and feel at home on the device and the OS it is running. This goal cannot really be achieved with a WebView-based solution (such as Cordova). React Native applications use the same pieces of UI as an app built with Objective-C or Java, choosing the platform-specific native variant of the UI feature for you.

Will it always be React Native?

In the long term, not necessarily. The ultimate goal would be for Elm Native UI to be a standalone project, complete with the mobile platform groundwork that has been put into React Native already. It has not been fully assessed how much work this would in reality entail.

Get it running

Caution: Experimental software!

The newest version of Elm Native UI is using an alpha release of Elm, but it no longer depends on a modified compiler and core.

Actually getting it running

Install React Native following their guide. Check that you can create a new project:

$ react-native init MyAppName --version 0.44.3

and try running it on a real or virtual device.

Once that works, clone this repository in the same directory where you ran react-native init in. You should have a directory structure similar to this:

│
├── elm-native-ui
└── MyAppName

Go ahead and copy the files from the examples/Counter folder into your React Native app directory now.

Now try to compile the Elm code with

$ npm run compile

This will create the elm-package.json and elm-stuff for you, even though it won't compile yet.

Edit the index.*.js files' last lines in case your React Native app is not called 'MyAppName' at this point. You may also need to rename the project in the package.json file.

We will then use elm_self_publish to publish the Elm Native UI package into our project.

Assuming we're in the parent directory where elm-native-ui reside:

$ python path/to/elm_self_publish.py ./elm-native-ui ./MyAppName

Now we are ready to rock! 🤘🎸

Just to list out the basics:

# install dependencies
$ npm install
# compile Elm with
$ npm run compile
# run app on iOS
$ react-native run-ios
# or run on Android
$ react-native run-android

When you make changes to the code, you only need to recompile Elm and press Cmd-R on the Simulator (iOS) or refresh the emulator (Android).

If you wish, you can also start a file watcher for *.elm files, which will recompile whenever you make a change:

$ npm start

React native versions

If you use the package.json files from the example projects, you'll get the react native version that has been tested and known to be working with the examples.

That is currently react-native 0.44.3

Later versions of react native may work, however, specifically in the subsequent react native 0.45.x release the "Navigation Experimental" module was depricated and moved to an external library, so the Navigation Example will not work. The intention is to port this to "React Navigation", which is now the accepted approach for react apps. The counter app still works, so if you don't use navigation your app should work with more recent versions.

How it works

This section was outdated, but for an overview of the older structure, read this blog post: Elm Native UI: Writing a React Native app in Elm

You can also watch this ElmCast Live episode, where @ohanhi explains some of the differences between the old and the new versions. (You can safely skip the first 5 minutes, as we had technical issues in the beginning.)

Screenshots

iOS Android

To Do

  • Basic PoC
    • Show something from Elm
    • Make basic VTree work
    • Add some kind of event handlers
  • Library
  • Styles
    • Basic types for styles
    • Support object type styles - transform styles and shadowOffset
    • Make enum type styles safer
    • Allow the StyleSheet.create method for styles
  • Props
    • Improved event handlers
    • Support props besides styles and event handlers
    • Unify syntax for styles, handlers and other props
  • Core features
    • Navigation (NavigationExperimental)
    • Tasks (HTTP calls, storage)
    • UIExplorer / Component examples

License

BSD (3-clause)

elm-native-ui's People

Contributors

ahstro avatar benansell avatar craigambrose avatar eeue56 avatar gabrielperales avatar gtdev87 avatar iancanderson avatar jaischeema avatar janiczek avatar joe-loco avatar jsteiner avatar kyasu1 avatar mitchellvitez avatar mk avatar ohanhi avatar opsb avatar paulyoung avatar robertkluin avatar staltz avatar twinn avatar yusefnapora avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.