MCPcopy Index your code
hub / github.com/bschwind/yoga-rs

github.com/bschwind/yoga-rs @0.5.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.5.0 ↗ · + Follow
943 symbols 12,405 edges 62 files 1 documented · 0% updated 17mo ago0.5.0 · 2025-01-16★ 1612 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Yoga-rs

Build Status

A Rust wrapper for Facebook's Yoga layout library.

You may also want to check out taffy (a revived fork of the abandoned stretch) as it is a pure Rust implementation.

Dependencies

  • cargo
  • rustc
  • libc++-dev (LLVM’s libc++)

Build

$ cargo build --release

Run Example

$ cargo run --release --example layout

Format Code

$ cargo +nightly fmt

Example Code

#[macro_use]
extern crate yoga;

use yoga::prelude::*;
use yoga::Node;
use yoga::StyleUnit::{Auto, UndefinedValue};

fn main() {
    let mut node = Node::new();

    let mut child = Node::new();
    let mut other_child = Node::new();

    node.insert_child(&mut child, 0);
    node.insert_child(&mut other_child, 1);

    style!(node,
        Margin(10 pt),
        MarginLeft(Auto),
        PaddingHorizontal(4 pt),
        Left(16 %),
        Bottom(UndefinedValue)
    );

    let child_styles = make_styles!(
        Width(32 pt),
        Height(32 pt),
        FlexGrow(1.0),
        Margin(Auto)
    );

    child.apply_styles(&child_styles);
    other_child.apply_styles(&child_styles);

    node.calculate_layout(512.0, 512.0, yoga::Direction::LTR);

    println!("Layout is {:#?}", child.get_layout());
}

Testing

The unit tests are automatically generated based on upstream fixtures and should not be edited manually.

$ cargo test

To generate the test cases: Download the ChromeDriver binary and put it somewhere in your $PATH. Linux/MacOS example:

$ cp chromedriver /usr/local/bin

Then run the following

$ cd gentest
$ bundle install # Install the required ruby gems
$ ruby gentest/gentest.rb # Generate the tests
$ cargo +nightly fmt # Format the tests for consistency

Extension points exported contracts — how you extend this code

Percent (Interface)
(no doc) [2 implementers]
src/traits.rs
Point (Interface)
(no doc) [2 implementers]
src/traits.rs

Core symbols most depended-on inside this repo

set_width
called by 2040
src/lib.rs
insert_child
called by 1979
src/lib.rs
set_height
called by 1754
src/lib.rs
calculate_layout
called by 1456
src/lib.rs
set_padding
called by 777
src/lib.rs
set_position_type
called by 762
src/lib.rs
set_border
called by 645
src/lib.rs
set_margin
called by 637
src/lib.rs

Shape

Function 790
Method 139
Class 10
Enum 2
Interface 2

Languages

Rust97%
TypeScript3%

Modules by API surface

src/lib.rs125 symbols
tests/align_contenttest.rs64 symbols
tests/static_positiontest.rs62 symbols
tests/flex_directiontest.rs55 symbols
tests/box_sizingtest.rs48 symbols
tests/margin_test.rs34 symbols
tests/absolute_positiontest.rs34 symbols
tests/gap_test.rs33 symbols
tests/aspect_ratio_test.rs33 symbols
tests/justify_contenttest.rs30 symbols
tests/align_itemstest.rs30 symbols
tests/percentage_test.rs29 symbols

For agents

$ claude mcp add yoga-rs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact