😋 Bro ⚡ A super fast stylesheet language for cool kids!
👑 Written in Nim language
API reference | Download (not yet)
SASS
-like Syntax Learn Bro in 5 minutesstrings
, arrays
, objects
, math
, regex
, os
) Check the manualvar
& const
[]
Arrays{}
Objectsif
& case
Conditionals for
Loop Statementsfn
Functions & mix
MixinsCSS
to BASS
AST with include some.css
BASS
imports using import std/[strings, math]
json("some.json")
, yaml("some.yml")
HTML
, JSON
Documentation GeneratorNAPI
Warnings
=> Unused VariablesWarnings
=> Unused Mixins, Functions, Empty selectorsErrors
=> invalid properties/values or typos!.bass
[!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
Install Bro as a standalone CLI application. Get it from Releases or build it from source using Nim & Nimble.
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{...
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{...
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{...
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
if
, elif
, else
, and case
)for $x in $y
variables
, functions
var
instead of --
&
and backtickswatch
for live changesbuild
BASS code to CSSmap
ast
command for generating binary ASTdoc
command for generating documentation websiteBro Language LGPLv3 license.Made by Humans from OpenPeeps.
Copyright © 2024 OpenPeeps & Contributors — All rights reserved.