Giter VIP home page Giter VIP logo

cljs-ultralight's Introduction

The problem: you have a static site and you want to add a sprinkle of interactivity, using Clojure, without bloating your build.

With cljs-ultralight we try to achieve this dream:

  • sub-1k build sizes.
  • Concise functions for common UI operations.
  • Clojure language & tooling (live-reload, editor integration, repl etc.)

cljs-ultralight is a group of functions to help you keep your cljs builds tiny when building simple UIs. You can easily keep your bundle size under 1k uncompressed with this.

Here is a blog post about making ClojureScript UIs in 500 bytes.

Usage

Install Clojure dep

{:deps {io.github.chr15m/cljs-ultralight {:git/tag "LATEST-GIT-TAG" :git/sha "LATEST-GIT-SHA"}}}

Install with npm

Alternatively you can use npm to install it into node_modules.

npm i cljs-ultralight

You'll have to manually add the sources in your shadow-cljs.edn if you use npm to install it.

:source-paths [... "node_modules/cljs-ultralight/src"]

Quick example

(ns myapp.core
  (:require [ultralight.core :as u]))

(-> (u/$$ "#my-button")
    (u/evt "click"
           #(js/alert "Clicked!")))

Documentation

The source code is so small as to be self-documenting. ๐Ÿ˜… When this changes I will add more documentation.

Examples

Check out the demo for more examples.

  • npm run build to build it.
  • npm run size to see the build size (will automatically build first).
  • npm run watch to develop on it.

Tips

To get tiny build sizes cljs-ultralight tries to use native JS constructs where ever possible. You should do the same if you want those small build sizes. Including a single equality operator for example will balloon a basic build size from 1k to 94k. Here are some rules to follow to avoid this:

  • Use #js {}, #js [], etc. instead of Clojure data types.
  • Use coercive-= instead of =.
  • Use (.concat string-1 string-2) instead of (str string-1 string-2).
  • Use (.map #js [1 2 3] (fn [i] ...)) etc. instead of (map (fn [i] ...) [1 2 3]).
  • Use #(... %) instead of partial.
  • Use js/console.log instead of print.

The library applied-science/js-interop works well too.

cljs-ultralight's People

Contributors

chr15m avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  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.