Tecton: CSS in PureScript

Tecton is a domain-specific language for authoring CSS using PureScript. At a basic level, it could be compared to CSS preprocessors such as Sass and LESS. However, where these preprocessors aim to add expressivity to CSS, Tecton offers the full expressive power of its host language along with a high degree of type safety. It also unlocks a number of secondary benefits, such as reuse of existing PureScript knowledge and seamless colocation with related markup. If you're ready to write masterful CSS with Tecton, let's get started.

Installation

Local installation

The preferred installation method is Spago:

spago install tecton

Try PureScript

Alternatively, to evaluate Tecton without installing anything locally, you can use Try PureScript. Throughout the documentation, look for buttons like this one to launch the corresponding code example in the Try PureScript app:

Open with Try PureScript

You can give this a try now with the following example.

"Hello world" example

This example serves as a good starting point for experimenting with Tecton. Simply update the styleSheet function with your own rules to see Tecton's CSS output.

module Example.StyleSheet where import Color (rgb) import Data.Tuple.Nested ((/\)) import Tecton import Tecton.Rule as Rule styleSheet :: CSS styleSheet = do universal &. ClassName "hello-world" ? Rule.do width := px 400 height := px 200 backgroundColor := rgb 0 5 56 color := rgb 232 199 148 display := flex alignItems := center justifyContent := center fontFamily := "Lexend" /\ sansSerif fontSize := px 32 fontWeight := 700

Open with Try PureScript

API documentation

API documentation is available on Pursuit.

Troubleshooting

If you encounter an error that is difficult to understand, please try the following resources:

  • The test suite may offer an example of what you are trying to achieve.
  • The W3C publishes the CSS specifications that guide the design of this library.

Support

If you get stuck, help is available in the PureScript Discord chat or on the PureScript Discourse forum.

Contributing

Contributions are welcome. Please see the Contributing guide for more information.