# Stevia **Repository Path**: code-li-yw/Stevia ## Basic Information - **Project Name**: Stevia - **Description**: :leaves: Concise Autolayout code - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-29 - **Last Updated**: 2025-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README  [](https://freshos.github.io/SteviaDocs/) [](https://developer.apple.com/swift)   [](https://app.bitrise.io/app/4478e29045c5f12e) [](https://codebeat.co/projects/github-com-freshos-stevia-master) [](https://github.com/s4cha/Stevia/blob/master/LICENSE) [](https://github.com/freshos/Stevia/graphs/contributors) []()
Winner of Hacking with Swift Recommended award
## You + Stevia = π¦ - [x] π‘ Write **concise**, **readable** layouts - [x] π **Reduce** your **maintenance** time - [x] π¨ **Compose** your styles, **CSS-like** - [x] π΄ Plug **Live reload** and **boost** your iteration cycles [Reason](#-reason) - [Example](#login-view-example) - [Live Reload](#-live-reload) - [Installation](#οΈ-installation) - [Documentation](#-documentation) ### πΌ Visual Layout Api ```swift layout { 100 |-email-| ~ 80 10% |-password-forgot-| ~ 80 >=20 |login| ~ 80 0 } ``` ### β Chainable Api ```swift email.top(100).left(8).right(8).width(200).height(44) alignHorizontally(password, forgot) image.fillContainer() button.centerInContainer().size(50%) equalWidths(email, password) image.width(>=80) ``` ### π Equation-Based Api ```swift email.Top == 100 password.CenterY == forgot.CenterY login.Top >= password.Bottom + 20 login.Width == 75 % Width (image.Height == 100).priority = UILayoutPriority(rawValue: 999) ``` All Generate **native** NSLayoutConstraints π ### π¨βπ¬Try it! Stevia is part of [freshOS](https://github.com/freshOS) iOS toolset. Try it in an example App ! Download Starter Project ### π‘ Reason Because **nothing holds more truth than pure code** π€ Xibs and storyboards are **heavy, hard to maintain, hard to merge.** They split the view concept into 2 separate files making debugging a **nightmare** *There must be a better way* #### How By creating a tool that makes Auto layout code finally **readable by a human being**. By coupling it with live code injection such as *[injectionForXcode](http://johnholdsworth.com/injection.html)* we can **design views in real time** View layout becomes **fun**, **concise**, **maintainable** and dare I say, *beautiful* β€οΈ ### Login View Example In the project folder, you can find an example of a typical login view laid out in both native and Stevia for you to understand and compare the two approaches. As a spoiler alert, the **number of characters** goes from 2380 to 1239 **( ~ divided by 2)** Write **Half the code** that is actually **10X more expressive and maintainable** ! ### π΄ Live Reload Live reload enables you to develop your views live without relaunching the app everytime. Stevia + [InjectionForXcode](http://johnholdsworth.com/injection.html) = #WhoNeedsReactNative?? π
*Just `Cmd+S` and you can dev live in the simulator !*
Learn more about how to set up live reload [here](https://freshos.github.io/SteviaDocs/liveReload/).
### βοΈ Installation
`Stevia` is installed via the official [Swift Package Manager](https://swift.org/package-manager/).
Select `Xcode`>`File`> `Swift Packages`>`Add Package Dependency...`
and add `https://github.com/freshOS/Stevia`.
*The Swift Package Manager (SPM) is now the official way to install `stevia`. The other package managers are now deprecated as of `4.8.0` and won't be supported in future versions.
For Carthage/Cocoapods support (legacy versions) see documentation [here](https://freshos.github.io/SteviaDocs/installation/).*
### π Documentation
The following will teach you the gist of Stevia in one minute.
To go further, you can refer to the full documentation [here](https://freshos.github.io/SteviaDocs/).
Stevia enables you to write readable Auto Layout code. It does so by tackling the 3 main components of layout: **view hierarchy**, **layout** and **styling**.
#### 01 - View hierarchy
```swift
email.translatesAutoresizingMaskIntoConstraints = false
password.translatesAutoresizingMaskIntoConstraints = false
login.translatesAutoresizingMaskIntoConstraints = false
addSubview(email)
addSubview(password)
addSubview(login)
```
becomes
```swift
subviews {
email
password
login
}
```
#### 02 - Layout
```swift
email.topAnchor.constraint(equalTo: topAnchor, constant: 100).isActive = true
email.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true
email.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true
email.heightAnchor.constraint(equalToConstant: 80).isActive = true
password.topAnchor.constraint(equalTo: email.bottomAnchor, constant: 8).isActive = true
password.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true
password.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true
password.heightAnchor.constraint(equalToConstant: 80).isActive = true
login.topAnchor.constraint(lessThanOrEqualTo: password.bottomAnchor, constant: 20).isActive = true
login.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
login.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
login.heightAnchor.constraint(equalToConstant: 80).isActive = true
login.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 0).isActive = true
```
becomes
```swift
layout {
100
|-email-| ~ 80
8
|-password-| ~ 80
>=20
|login| ~ 80
0
}
```
#### 03 - Styling
```swift
email.borderStyle = .roundedRect
email.autocorrectionType = .no
email.keyboardType = .emailAddress
email.font = UIFont(name: "HelveticaNeue-Light", size: 26)
```
becomes
```swift
email.style { f in
f.borderStyle = .roundedRect
f.autocorrectionType = .no
f.keyboardType = .emailAddress
f.font = UIFont(name: "HelveticaNeue-Light", size: 26)
f.returnKeyType = .next
}
```
### π¨βπ» Contributors
[YannickDot](https://github.com/YannickDot), [S4cha](https://github.com/S4cha), [Damien](https://github.com/damien-nd),
[Snowcraft](https://github.com/Snowcraft), [Mathieu-o](https://github.com/Mathieu-o),
[Blaz Merela](https://github.com/b1az),
[Theophane Rupin](https://github.com/trupin),
[Jason Liang](https://github.com/jyliang),
[liberty4me](https://github.com/liberty4me),
[Scott Bates](https://github.com/cowgp),
[Sai](https://github.com/sai-prasanna),
[Mike Gallagher](https://github.com/mgallagher),
[WaterNotWords](https://github.com/waternotwords),
[Mick MacCallum](https://github.com/0x7fffffff),
[Onur Genes](https://github.com/onurgenes)
### π₯ Backers
Like the project? Offer coffee or support us with a monthly donation and help us continue our activities :)
### π² Apps using Stevia
Many top-notch Apps with millions of users use Stevia to write better Auto Layout code:
[