25 releases (12 breaking)

0.12.1 May 6, 2025
0.11.2 Mar 6, 2025
0.11.1 Dec 9, 2024
0.11.0 Oct 21, 2024
0.1.2 Nov 1, 2023

#154 in Web programming

Download history 642/week @ 2025-02-26 1110/week @ 2025-03-05 1124/week @ 2025-03-12 806/week @ 2025-03-19 1092/week @ 2025-03-26 1135/week @ 2025-04-02 1056/week @ 2025-04-09 1033/week @ 2025-04-16 955/week @ 2025-04-23 1361/week @ 2025-04-30 1355/week @ 2025-05-07 1446/week @ 2025-05-14 1635/week @ 2025-05-21 1338/week @ 2025-05-28 949/week @ 2025-06-04 1006/week @ 2025-06-11

5,044 downloads per month
Used in 7 crates (5 directly)

MIT license

275KB
7K SLoC

Malva is a configurable, smart and fast CSS, SCSS, Sass and Less formatter.

Basic Usage

You can format source code string by using format_text function.

use malva::{config::FormatOptions, format_text, Syntax};

let options = FormatOptions::default();
assert_eq!("a {
  color: red;
}
", &format_text("a{color:red}", Syntax::Css, &options).unwrap());

For detailed documentation of configuration, please refer to Configuration on GitHub.

If there're syntax errors in source code, it will return Err:

use malva::{config::FormatOptions, format_text, Syntax};

let options = FormatOptions::default();
assert!(format_text("a{", Syntax::Css, &options).is_err());

Print AST

If you have already parsed the AST with Raffia, you can use print_stylesheet to print it.

Please note that though you have AST, you still need to provide comments and specify syntax, also create LineBounds manually.

use malva::{config::FormatOptions, print_stylesheet, LineBounds, Syntax};
use raffia::{ast::Stylesheet, ParserBuilder};

let input = "a{color:red}";
let mut comments = vec![];
let mut parser = ParserBuilder::new(input)
    .syntax(Syntax::Css)
    .comments(&mut comments)
    .build();
let stylesheet = parser.parse::<Stylesheet>().unwrap();

let options = FormatOptions::default();
let line_bounds = LineBounds::new(input);
assert_eq!("a {
  color: red;
}
", &print_stylesheet(&stylesheet, &comments, Some(input), line_bounds, Syntax::Css, &options));

Dependencies

~1.9–2.7MB
~54K SLoC