# awesome-purescript

> A curated list of delightful libraries, tools and other shiny things for PureScript.

## Build Tooling

- pulp
- psvm-js - PureScript Version Manager
- purescript-psa - A pretty, flexible error/warning reporting frontend for `psc`
- grunt-purescript
- gulp-purescript
- purs-loader for webpack
- psc-package - A package manager for PureScript based on package sets
- spago - PureScript package manager and build tool powered by Dhall and package-sets

## Preludes

- purescript-prelude - The standard Prelude.
- purescript-batteries - A PureScript prelude with more features.

## UI Libraries

CSS:

- purescript-css - A clean, type-safe library for describing, manipulating and rendering CSS.

React-based:

- purescript-thermite - A simple wrapper for ReactJS inspired by `react-blaze`.
- purescript-react - React bindings for PureScript
- purescript-react-basic - An opinionated set of bindings to the React library, optimizing for the most basic use cases.
- purescript-react-basic-hooks - An alternative way to define React components using React’s “hooks” APIs. Compatible with `purescript-react-basic`.
- purescript-pux - Build type-safe web apps with PureScript.
- purescript-spork - Elm-like for PureScript.
- purescript-concur - Concur UI framework. React backend, but can use others.
- purescript-presto - Write Apps like Mathematical Equations!
- purescript-optic-ui - Write single page web user interfaces declaratively and concisely with the help of lenses and traversals.
- purescript-react-explor - Experiments with comonads for modelling React UIs.

Virtual-DOM based:

- purescript-halogen - A declarative, type-safe UI library.
- purescript-hedwig - Hedwig is a fast, type safe, declarative PureScript library for building web applications.
- purescript-flame - Flame is a fast & simple framework for building web applications in PureScript inspired by purescript-hedwig and Elm

Signals/Behaviors/FRP:

- purescript-flare - Applicative-style reactive user interfaces built on top of purescript-signal.
- purescript-turbine - Purely functional frontend framework powered by FRP.
- purescript-outwatch - A functional and reactive UI framework based on Rx and VirtualDom.
- purescript-panda - What would TEA look like if we had no VDOM?
- purescript-specular - A Reflex-Dom inspired UI library for PureScript.
- purescript-sdom - An experiment in replacing the virtual DOM and avoiding diffing.
- purescript-purview - A UI library based on the incremental lambda calculus.

## URL Routers

- purescript-routing - A clean, type-safe routing library for PureScript.
- purescript-cofree-react-router - React-Router implemented in PureScript as Cofree Comonad for the Array functor.
- purescript-trout - Type-level routing for PureScript.
- purescript-boomboom - Never hard code your urls again. Boomboom them all!
- purescript-routing-duplex - Simple bidirectional parser/printers for your routing data types.

## Components

- purescript-halogen-formless - A renderless component for building painless forms in Halogen
- purescript-halogen-select - Building blocks for common selection user interfaces like dropdowns, typeaheads, image pickers, and calendars.
- purescript-halogen-echarts - A Halogen integration for the popular ECharts charting library
- purescript-halogen-day-picker - A day picker for Halogen
- purescript-halogen-menu - Interactive menus in Halogen

## Asynchronicity and Parallelism

- purescript-aff - An asynchronous effect monad for PureScript.
- purescript-affjax - An asynchronous AJAX library built using Aff.
- purescript-queue - An asynchronous queue library for PureScript.
- purescript-signal - An asynchronous signal library for PureScript, similar to Elm.
- purescript-zeta - An alternative signal implementation in PureScript.

## Effect Management

- purescript-eff - The Eff monad, for handling native side effects.
- purescript-effect - The Effect monad, for handling native side effects in PureScript v0.12.x.

## Json Serialization

- purescript-argonaut - Json encoding and decoding typeclasses.
- purescript-simple-json - Json encoding and decoding through Generics.

## Binary Serialization

- purescript-arraybuffer - Bindings to the ArrayBuffer JavaScript type.
- purescript-arraybuffer-class - Typeclasses for ArrayBuffer encoding and decoding.
- purescript-arraybuffer-builder - Builder for serializing ArrayBuffer
- purescript-parsing-dataview - Parser for deserializing ArrayBuffer
- purescript-protobuf - Google Protocol Buffers

## Testing

- purescript-test-unit - An asynchronous unit test runner for PureScript.
- purescript-quickcheck - An implementation of QuickCheck in PureScript.
- purescript-quickcheck-laws - Law tests for core classes.
- purescript-benchotron - Straightforward benchmarking for PureScript/JavaScript.

## Learning Resources

- Video - “PureScript (Maybe This Time We Get JavaScript Right)” by Bodil Stokke
- Book - “PureScript by Example” by Phil Freeman
- Book (ish) - Jordan’s Purescript Reference
- PureScript for Haskellers by Dennis Gosnell
- Podcast - Functional Geekery Episode 22
- Podcast - JSJ 189
- Course (egghead.io) - Functional Programming Concepts in Purescript
- Guide - Real World Halogen

## Discovery

- Module Linker - Extension that lets you browse docs by just clicking on `import` declarations on GitHub.
- Pursuit

## Editor and IDE Plugins

See Editor and tool support

## Community

- `/r/purescript` subreddit
- `#purescript` on Freenode
- Stack Overflow `purescript` tag
- Google Group

## More Resources

- Purescript Ecosystem - Ranked list of popular libraries.

## Contribute

Contributions welcome! Read the contribution guidelines first.

## License

To the extent possible under law, Pascal Hartig has waived all copyright and related or neighboring rights to this work.

purescript.md Github