/elm-node

Node support for Elm

Primary LanguageElmMIT LicenseMIT

Elm Node

This project is a temporary monolith. Ideally getting broken into multiple packages. But for the sake of progress development its a cluster.

This project is split into 2 halves, Low Level for Native bindings, and High Level for framework API's.

Completed Low Level Bindings

  • Streams
  • File System
  • Process
  • Zlib

In Progress

  • Network
  • Http
  • DNS

See more about current status of Native bindings here

Exposed Modules

Currently exposed modules you can try out right now:

  • Network
  • Network.Socket
  • Streams.Types
  • Streams.String
  • Streams.Buffer
  • Streams.Chunk
  • Streams
  • Process
  • Process.Types
  • Process.User
  • Process.Streams
  • FileSystem.Streams.Read
  • FileSystem.Streams.Write
  • FileSystem.Types
  • FileSystem.Write.String
  • FileSystem.Write.String.Descriptor
  • FileSystem.Write.Buffer
  • FileSystem.Write.Buffer.Descriptor
  • FileSystem.Write.Chunk
  • FileSystem.Descriptor
  • FileSystem.Watch
  • FileSystem.Read
  • FileSystem
  • DomainNameService
  • Chunk
  • Chunk.Types
  • Compression
  • Compression.Types
  • Console
  • Console.Color
  • Http.Types
  • Http.StatusCode
  • Http.Agent
  • Http.Agent.TLS
  • Http.Server
  • Http.Server.TLS

Goals

High Level API to node things

(pure flavors most likely as IO builders, that consumers must eventually run : pureFlavor -> Task x ())

  • Streams
    • Either a pure flavor that is really a list kinda like streams
    • Or a higher level bindings that is still impure like the popular io-streams
  • Pure File System
    • FS as a type, coupled with runFS : FS FSError () -> Task FSError ()
  • Basic server abstraction
    • Marshall-able pure Request and Response types
    • Server side code as Request -> Response
    • Startapp flavor to based on foldp on routes
    • Sinatra style routing abstraction
      • param capture
    • Elm as a Response constructor
  • Shared Mailbox between the client and server backed with web-sockets.

Not on the table right now (but maybe later)

  • SQLlite bindings
  • Mongo DB persistence and querying around native Elm types. General purpose node bindings

Examples

sh examples/<someexample>/run.sh