{"id":1273,"url":"https://github.com/freshOS/Stevia","last_synced_at":"2025-08-06T13:32:48.091Z","repository":{"id":2829954,"uuid":"37456574","full_name":"freshOS/Stevia","owner":"freshOS","description":":leaves: Concise Autolayout code","archived":false,"fork":false,"pushed_at":"2025-06-16T14:51:27.000Z","size":1264,"stargazers_count":3411,"open_issues_count":23,"forks_count":219,"subscribers_count":57,"default_branch":"master","last_synced_at":"2025-07-30T20:01:59.389Z","etag":null,"topics":["auto","autolayout","carthage","cocoapods","constraints","dsl","freshos","interface","ios","layout","layouts","nslayoutconstraints","stevia","storyboard","swift","ui","view","visual-format-language","xcode","xib"],"latest_commit_sha":null,"homepage":"https://freshos.github.io/SteviaDocs/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/freshOS.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"open_collective":"freshos","github":"s4cha"}},"created_at":"2015-06-15T09:41:48.000Z","updated_at":"2025-07-25T06:54:27.000Z","dependencies_parsed_at":"2024-04-15T09:22:11.377Z","dependency_job_id":"2e31ecef-1424-4c50-91a2-b3103ba96c49","html_url":"https://github.com/freshOS/Stevia","commit_stats":{"total_commits":399,"total_committers":31,"mean_commits":"12.870967741935484","dds":0.1578947368421053,"last_synced_commit":"74ea064b11ffd21d25c0dc49f0f1d667220b8ec0"},"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"purl":"pkg:github/freshOS/Stevia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freshOS%2FStevia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freshOS%2FStevia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freshOS%2FStevia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freshOS%2FStevia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/freshOS","download_url":"https://codeload.github.com/freshOS/Stevia/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/freshOS%2FStevia/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268815378,"owners_count":24311567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-04T02:00:09.867Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto","autolayout","carthage","cocoapods","constraints","dsl","freshos","interface","ios","layout","layouts","nslayoutconstraints","stevia","storyboard","swift","ui","view","visual-format-language","xcode","xib"],"created_at":"2024-01-05T20:15:42.684Z","updated_at":"2025-08-06T13:32:47.742Z","avatar_url":"https://github.com/freshOS.png","language":"Swift","readme":"![Stevia](https://raw.githubusercontent.com/s4cha/Stevia/master/banner.png)\n\n[![Documentation](https://img.shields.io/badge/Read_the-Docs-67ad5c.svg)](https://freshos.github.io/SteviaDocs/)\n[![Language: Swift 2, 3, 4, 5 and 6](https://img.shields.io/badge/language-swift%206-f48041.svg?style=flat)](https://developer.apple.com/swift)\n![Platform: iOS 8+](https://img.shields.io/badge/platform-iOS%20|%20tvOS-blue.svg?style=flat)\n![Swift](https://github.com/freshOS/Stevia/workflows/Swift/badge.svg)\n[![Build Status](https://app.bitrise.io/app/4478e29045c5f12e/status.svg?token=pti6g-HVKBUPv9mIR3baIw)](https://app.bitrise.io/app/4478e29045c5f12e)\n[![codebeat badge](https://codebeat.co/badges/5b81e292-552c-4cf1-9ccc-89d333ec8b79)](https://codebeat.co/projects/github-com-freshos-stevia-master)\n[![License: MIT](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat)](https://github.com/s4cha/Stevia/blob/master/LICENSE)\n[![GitHub contributors](https://img.shields.io/github/contributors/freshos/Stevia.svg)](https://github.com/freshos/Stevia/graphs/contributors)\n[![GitHub tag](https://img.shields.io/github/release/freshos/Stevia.svg)]()\n\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.hackingwithswift.com/articles/9/best-alternatives-to-auto-layout\"\u003e\n        \u003cimg src=\"https://www.hackingwithswift.com/uploads/recommended@2x.png\" alt=\"Drawing\" width=\"300px;\" /\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.hackingwithswift.com/articles/9/best-alternatives-to-auto-layout\"\u003e\n        Winner of Hacking with Swift Recommended award\n    \u003c/a\u003e\n\u003c/p\u003e\n\n## You + Stevia = 🦄\n- [x] 💡 Write **concise**, **readable** layouts\n- [x] 🏖 **Reduce** your **maintenance** time\n- [x] 🎨 **Compose** your styles, **CSS-like**\n- [x] 🔴 Plug **Live reload** and **boost** your iteration cycles\n\n\n[Reason](#-reason) - [Example](#login-view-example) - [Live Reload](#-live-reload) - [Installation](#️-installation) - [Documentation](#-documentation)\n\n\n### 🖼 Visual Layout Api\n```swift\nlayout {\n    100\n    |-email-| ~ 80\n    10%\n    |-password-forgot-| ~ 80\n    \u003e=20\n    |login| ~ 80\n    0\n}\n```\n### ⛓ Chainable Api\n```swift\nemail.top(100).left(8).right(8).width(200).height(44)\nalignHorizontally(password, forgot)\nimage.fillContainer()\nbutton.centerInContainer().size(50%)\nequalWidths(email, password)\nimage.width(\u003e=80)\n```\n\n### 📐 Equation-Based Api\n```swift\nemail.Top == 100\npassword.CenterY == forgot.CenterY\nlogin.Top \u003e= password.Bottom + 20\nlogin.Width == 75 % Width\n(image.Height == 100).priority = UILayoutPriority(rawValue: 999)\n```\n\nAll Generate **native** NSLayoutConstraints 🎉\n\n### 👨‍🔬Try it!\n\nStevia is part of [freshOS](https://github.com/freshOS) iOS toolset. Try it in an example App ! \u003ca class=\"github-button\" href=\"https://github.com/freshOS/StarterProject/archive/master.zip\" data-icon=\"octicon-cloud-download\" data-style=\"mega\" aria-label=\"Download freshOS/StarterProject on GitHub\"\u003eDownload Starter Project\u003c/a\u003e\n\n### 💡 Reason\nBecause **nothing holds more truth than pure code** 🤓  \nXibs and storyboards are **heavy, hard to maintain, hard to merge.**  \nThey split the view concept into 2 separate files making debugging a **nightmare**    \n*There must be a better way*\n\n#### How\nBy creating a tool that makes Auto layout code finally **readable by a human being**.  \nBy coupling it with live code injection such as *[injectionForXcode](http://johnholdsworth.com/injection.html)* we can **design views in real time**  \nView layout becomes **fun**, **concise**, **maintainable** and dare I say, *beautiful* ❤️\n\n### Login View Example\nIn 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.\n\nAs a spoiler alert, the **number of characters** goes from 2380 to 1239 **( ~ divided by 2)**\n\nWrite **Half the code** that is actually **10X more expressive and maintainable** !\n\n### 🔴 Live Reload\n\nLive reload enables you to develop your views live without relaunching the app everytime.\n\nStevia + [InjectionForXcode](http://johnholdsworth.com/injection.html) = #WhoNeedsReactNative?? 🚀\n\n\u003cimg src=\"http://g.recordit.co/i6kQfTMEpg.gif\" height=\"300\" width=\"360\" /\u003e\n\n*Just `Cmd+S` and you can dev live in the simulator !*\n\nLearn more about how to set up live reload [here](https://freshos.github.io/SteviaDocs/liveReload/).\n\n\n### ⚙️ Installation\n\n`Stevia` is installed via the official [Swift Package Manager](https://swift.org/package-manager/).  \n\nSelect `Xcode`\u003e`File`\u003e `Swift Packages`\u003e`Add Package Dependency...`  \nand add `https://github.com/freshOS/Stevia`.\n\n*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.  \nFor Carthage/Cocoapods support (legacy versions) see documentation [here](https://freshos.github.io/SteviaDocs/installation/).*\n\n### 📖 Documentation\nThe following will teach you the gist of Stevia in one minute.  \nTo go further, you can refer to the full documentation [here](https://freshos.github.io/SteviaDocs/).\n\n\nStevia enables you to write readable Auto Layout code. It does so by tackling the 3 main components of layout: **view hierarchy**, **layout** and **styling**.\n\n#### 01 - View hierarchy\n\n```swift\nemail.translatesAutoresizingMaskIntoConstraints = false\npassword.translatesAutoresizingMaskIntoConstraints = false\nlogin.translatesAutoresizingMaskIntoConstraints = false\naddSubview(email)\naddSubview(password)\naddSubview(login)\n```\nbecomes\n\n```swift\nsubviews {\n    email\n    password\n    login\n}\n```\n\n#### 02 - Layout\n```swift\nemail.topAnchor.constraint(equalTo: topAnchor, constant: 100).isActive = true\nemail.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true\nemail.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true\nemail.heightAnchor.constraint(equalToConstant: 80).isActive = true\n\npassword.topAnchor.constraint(equalTo: email.bottomAnchor, constant: 8).isActive = true\npassword.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true\npassword.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true\npassword.heightAnchor.constraint(equalToConstant: 80).isActive = true\n\nlogin.topAnchor.constraint(lessThanOrEqualTo: password.bottomAnchor, constant: 20).isActive = true\nlogin.leftAnchor.constraint(equalTo: leftAnchor).isActive = true\nlogin.rightAnchor.constraint(equalTo: rightAnchor).isActive = true\nlogin.heightAnchor.constraint(equalToConstant: 80).isActive = true\nlogin.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 0).isActive = true\n```\n\nbecomes\n\n```swift\nlayout {\n    100\n    |-email-| ~ 80\n    8\n    |-password-| ~ 80\n    \u003e=20\n    |login| ~ 80\n    0\n}\n```\n\n#### 03 - Styling\n\n```swift\nemail.borderStyle = .roundedRect\nemail.autocorrectionType = .no\nemail.keyboardType = .emailAddress\nemail.font = UIFont(name: \"HelveticaNeue-Light\", size: 26)\n```\nbecomes\n```swift\nemail.style { f in\n    f.borderStyle = .roundedRect\n    f.autocorrectionType = .no\n    f.keyboardType = .emailAddress\n    f.font = UIFont(name: \"HelveticaNeue-Light\", size: 26)\n    f.returnKeyType = .next\n}\n```\n\n\n### 👨‍💻 Contributors\n\n[YannickDot](https://github.com/YannickDot),  [S4cha](https://github.com/S4cha),  [Damien](https://github.com/damien-nd),\n[Snowcraft](https://github.com/Snowcraft), [Mathieu-o](https://github.com/Mathieu-o),\n[Blaz Merela](https://github.com/b1az),\n[Theophane Rupin](https://github.com/trupin),\n[Jason Liang](https://github.com/jyliang),\n[liberty4me](https://github.com/liberty4me),\n[Scott Bates](https://github.com/cowgp),\n[Sai](https://github.com/sai-prasanna),\n[Mike Gallagher](https://github.com/mgallagher),\n[WaterNotWords](https://github.com/waternotwords),\n[Mick MacCallum](https://github.com/0x7fffffff),\n[Onur Genes](https://github.com/onurgenes)\n\n### 👥 Backers\nLike the project? Offer coffee or support us with a monthly donation and help us continue our activities :)\n\n### 📲 Apps using Stevia\n\nMany top-notch Apps with millions of users use Stevia to write better Auto Layout code:\n\n[\u003cimg src=\"https://is4-ssl.mzstatic.com/image/thumb/Purple113/v4/4d/c1/70/4dc17011-3ca7-bf9a-5326-70db722686ca/AppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-85-220.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/cn/app/mobike-smart-bike-sharing/id1044535426?l=en)\n[\u003cimg src=\"https://is1-ssl.mzstatic.com/image/thumb/Purple113/v4/ac/38/7a/ac387a00-893c-66c4-8595-856ad9907c84/AppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/id1001688546)\n[\u003cimg src=\"https://is2-ssl.mzstatic.com/image/thumb/Purple113/v4/60/90/af/6090afc0-f2b1-40e7-d74f-78fd4f7309eb/AppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/nerdwallet/id1174471607)\n[\u003cimg src=\"https://is2-ssl.mzstatic.com/image/thumb/Purple123/v4/30/0c/1c/300c1c5c-2ded-02bc-a073-14c2287509e4/AppIcon-0-1x_U007emarketing-0-0-85-220-0-7.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/in/app/yatra-flights-hotels-cabs/id730234679)\n[\u003cimg src=\"https://is1-ssl.mzstatic.com/image/thumb/Purple113/v4/b5/a1/1d/b5a11d97-1982-6346-fab9-056ab6c55512/AppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/yummypets-pets/id527910229)\n[\u003cimg src=\"https://is5-ssl.mzstatic.com/image/thumb/Purple123/v4/8b/a0/64/8ba064be-c665-db32-9e63-5751c56dfb84/AppIcon-0-1x_U007emarketing-0-85-220-0-7.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/invitation-maker-ecard/id1446598881)\n[\u003cimg src=\"https://is5-ssl.mzstatic.com/image/thumb/Purple113/v4/94/ed/1c/94ed1cc6-dc70-9458-5ee1-f42d89d97e50/AppIcon-0-1x_U007emarketing-0-85-220-0-7.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/logo-maker-create-design/id1455008435)\n[\u003cimg src=\"https://is5-ssl.mzstatic.com/image/thumb/Purple123/v4/76/bf/ab/76bfabcd-d607-b944-c7ce-433ffbbd09c0/AppIconFREE-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/smart-cleaner-clean-storage/id1194582243)\n[\u003cimg src=\"https://is5-ssl.mzstatic.com/image/thumb/Purple49/v4/dd/54/b5/dd54b556-b289-ce8f-4a21-d7d5fb688a69/pr_source.png/230x0w.png\" height=\"80px\"/\u003e](https://apps.apple.com/us/app/tuner-eclipse-free-guitar-tuner/id1086479185)\n\n- [Mobike](https://apps.apple.com/cn/app/mobike-smart-bike-sharing/id1044535426?l=en) - The world’s first and largest bike sharing system.\n- [Brightspace Pulse](https://apps.apple.com/us/app/id1001688546) - Education app\n- [NerdWallet](https://apps.apple.com/us/app/nerdwallet/id1174471607) - Credit Score, Budget, Finance\n- [Yatra](https://apps.apple.com/in/app/yatra-flights-hotels-cabs/id730234679) - Flights, Hotels \u0026 Cabs\n- [Yummypets](https://apps.apple.com/us/app/yummypets-pets/id527910229) - The world's cutest social network for pet lovers\n- [Invitation Maker](https://apps.apple.com/us/app/invitation-maker-ecard/id1446598881) - Greetings, Invite \u0026 Wishes\n- [Logo Maker](https://apps.apple.com/us/app/logo-maker-create-design/id1455008435) - Create \u0026 Design 10,000+ Professional Logos\n- [Smart Cleaner](https://apps.apple.com/us/app/smart-cleaner-clean-storage/id1194582243) - Delete Phone Photos, Contacts\n- [Tuner Eclipse](https://apps.apple.com/us/app/tuner-eclipse-free-guitar-tuner/id1086479185) - Free Guitar Tuner\n- and many more...\n\nYou are using Stevia ? Please let me know @[sachadso@gmail.com](sachadso@gmail.com) and I'll add you to the list 😍!\n\n\n\u003ca href=\"https://opencollective.com/freshos/backer/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/backer/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/backer/29/avatar.svg\"\u003e\u003c/a\u003e\n\n### 🏅 Sponsors\nBecome a sponsor and get your logo on our README on Github with a link to your site :)\n\n\u003ca href=\"https://opencollective.com/freshos/sponsor/0/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/1/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/2/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/3/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/4/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/5/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/6/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/7/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/8/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/9/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/9/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/10/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/10/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/11/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/11/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/12/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/12/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/13/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/13/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/14/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/14/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/15/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/15/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/16/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/16/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/17/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/17/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/18/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/18/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/19/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/19/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/20/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/20/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/21/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/21/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/22/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/22/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/23/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/23/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/24/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/24/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/25/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/25/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/26/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/26/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/27/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/27/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/28/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/28/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/freshos/sponsor/29/website\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/freshos/sponsor/29/avatar.svg\"\u003e\u003c/a\u003e\n\n### Swift Version\n\n- Swift 2 -\u003e [v**2.3.0**](https://github.com/freshOS/Stevia/releases/tag/2.3.0)\n- Swift 3 -\u003e [v**3.2.0**](https://github.com/freshOS/Stevia/releases/tag/3.2.0)\n- Swift 4 -\u003e [v**4.2.0**](https://github.com/freshOS/Stevia/releases/tag/4.2.0)\n- Swift 4.1 -\u003e [v**4.3.2**](https://github.com/freshOS/Stevia/releases/tag/4.3.2)\n- Swift 4.2 -\u003e [v**4.4.4**](https://github.com/freshOS/Stevia/releases/tag/4.4.4)\n- Swift 5.0 -\u003e [v**4.5.0**](https://github.com/freshOS/Stevia/releases/tag/4.5.0)\n- Swift 5.1 -\u003e [v**4.7.2**](https://github.com/freshOS/Stevia/releases/tag/4.7.2)\n- Swift 5.1.2 -\u003e [v**4.7.3**](https://github.com/freshOS/Stevia/releases/tag/4.7.3)\n","funding_links":["https://opencollective.com/freshos","https://github.com/sponsors/s4cha","https://opencollective.com/freshos/backer/0/website","https://opencollective.com/freshos/backer/1/website","https://opencollective.com/freshos/backer/2/website","https://opencollective.com/freshos/backer/3/website","https://opencollective.com/freshos/backer/4/website","https://opencollective.com/freshos/backer/5/website","https://opencollective.com/freshos/backer/6/website","https://opencollective.com/freshos/backer/7/website","https://opencollective.com/freshos/backer/8/website","https://opencollective.com/freshos/backer/9/website","https://opencollective.com/freshos/backer/10/website","https://opencollective.com/freshos/backer/11/website","https://opencollective.com/freshos/backer/12/website","https://opencollective.com/freshos/backer/13/website","https://opencollective.com/freshos/backer/14/website","https://opencollective.com/freshos/backer/15/website","https://opencollective.com/freshos/backer/16/website","https://opencollective.com/freshos/backer/17/website","https://opencollective.com/freshos/backer/18/website","https://opencollective.com/freshos/backer/19/website","https://opencollective.com/freshos/backer/20/website","https://opencollective.com/freshos/backer/21/website","https://opencollective.com/freshos/backer/22/website","https://opencollective.com/freshos/backer/23/website","https://opencollective.com/freshos/backer/24/website","https://opencollective.com/freshos/backer/25/website","https://opencollective.com/freshos/backer/26/website","https://opencollective.com/freshos/backer/27/website","https://opencollective.com/freshos/backer/28/website","https://opencollective.com/freshos/backer/29/website"],"categories":["Layout","Libs","Swift","HarmonyOS","Layout [🔝](#readme)","OOM-Leaks-Crash"],"sub_categories":["Other Hardware","Layout","Other free courses","Windows Manager","AutoLayout"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FfreshOS%2FStevia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FfreshOS%2FStevia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FfreshOS%2FStevia/lists"}