openpeeps / bro

Bro - A super fast stylesheet language for cool kids! Alternative to SassC, DartSass SassJS and Less.
https://openpeeps.github.io/bro/theindex.html
GNU Lesser General Public License v3.0
21 stars 0 forks source link
awesome-nim bro bro-lang css css-compiler csstree dart-sass developer-tools development-tools front-end-development frontend hacktoberfest javascript nim nim-lang nodejs sass scss stylesheet-language webdevelopment

Bro aka NimSass
😋 Bro ⚡ A super fast stylesheet language for cool kids!
👑 Written in Nim language

API reference | Download (not yet)
Github Actions Github Actions

😍 Key Features

[!WARNING]
Bro is still under development. Expect bugs and incomplete features.

[!NOTE] Since Bro is written in native code, anti-virus software can sometimes incorrectly flag it as a virus

Bro CLI

Install Bro as a standalone CLI application. Get it from Releases or build it from source using Nim & Nimble.

Bro 💛 Nim

Integrate Bro in your Nim application

import bro

let stylesheet = """
$colors = [blue, yellow, orchid]
for $color in $colors:
  .bg-{$color}
    background: $color 
"""

var
  p: Parser = parseStylesheet(stylesheet)
  c: Compiler = newCompiler(p.getStylesheet, minify = true)
echo c.getCSS # .bg-blue{background:blue}.bg-yellow{...

Bro 💖 Bun & Node.js

Integrate the most powerful CSS pre-processor in your Node.js/Bun app. Bro is available as a native addon module

let stylesheet = `
$colors = [blue, yellow, orchid]
for $color in $colors:
  .bg-{$color}
    background: $color
`
const bro = require("bro.node")
bro.compile(stylesheet) // .bg-blue{background:blue}.bg-yellow{...

Bro in Browser via Wasm

Build complex real-time web-apps using Bro + WebAssembly

<style type="text/bro" id="stylesheet">
$colors = [blue, yellow, orchid]
for $color in $colors:
  .bg-{$color}
    background: $color
</style>
<script src="https://github.com/openpeeps/bro/raw/main/bro.min.js"></script>
bro.compile('#stylesheet') // .bg-blue{background:blue}.bg-yellow{...

Benchmarks

DartSass, SassC, Bro, BroJS (via NAPI w/ Node & Bun), Sass (JS w/ Node & Bun)

1.572.876 lines of

.btn
  background: yellow
Benchmark 1: ./dart sass.snapshot test.sass:test.css --no-source-map --style=compressed
  Time (abs ≡):         4.925 s               [User: 6.060 s, System: 0.263 s]

Benchmark 2: bro test.sass test.css --min
  Time (abs ≡):        441.7 ms               [User: 422.3 ms, System: 19.9 ms]

Benchmark 3: sassc test.sass test.css --style=compressed
  Time (abs ≡):         5.757 s               [User: 5.346 s, System: 0.400 s]

Benchmark 4: bun bro.js
  Time (abs ≡):        679.0 ms               [User: 616.0 ms, System: 24.0 ms]

Benchmark 5: node bro.js
  Time (abs ≡):        653.7 ms               [User: 625.8 ms, System: 32.3 ms]

Benchmark 6: node sass.js
  Time (abs ≡):        12.783 s               [User: 19.640 s, System: 1.185 s]

Benchmark 7: bun sass.js
  Time (abs ≡):        10.485 s               [User: 20.422 s, System: 1.030 s]

Summary
  'bro test.sass test.css --min' ran
    1.48 times faster than 'node bro.js'
    1.54 times faster than 'bun bro.js'
   11.15 times faster than './dart sass.snapshot test.sass:test.css --no-source-map --style=compressed'
   13.03 times faster than 'sassc test.sass test.css --style=compressed'
   23.74 times faster than 'bun sass.js'
   28.94 times faster than 'node sass.js'

Check Benchmarks page for more numbers

Benchmarks made with hyperfine on
Ubuntu 22.04 LTS / Ryzen 5 5600g 3.9GHz × 12 / RAM 32 GB 3200MHz / SSD M.2

TODO

0.2.x

❤ Contributions & Support

🎩 License

Bro Language LGPLv3 license.Made by Humans from OpenPeeps.
Copyright © 2024 OpenPeeps & Contributors — All rights reserved.