YARC - Yet Another Rapid Compose - build Jetpack Compose layouts effortlessly with an intelligent shorthand generator.
YARC is an Android Studio plugin that transforms concise abbreviations into full Jetpack Compose component trees instantly. Stop writing boilerplate — focus on the UI structure.
Heavily inspired by Emmet. Kudos to the creators for the brilliant syntax concept.
High-res demo.
- Open Android Studio -> Settings/Preferences.
- Go to Plugins -> Marketplace.
- Search for "YARC".
- Click Install.
If you want to install a specific version manually:
- Download the latest
yarc-x.x.x.zipfrom the Releases page. - Open Settings/Preferences in Android Studio.
- Go to Plugins, click the Gear Icon (⚙️) in the top right.
- Select "Install Plugin from Disk...".
- Choose the downloaded ZIP file.
- Instant Expansion: Type short codes like
colorrowand expand them into valid Compose blocks. - Nested Layouts: Use
/to define hierarchy in a single line (e.g.,box/txt).
/(Child): Nest components inside each other.*(Multiplication): Repeat an element N times.,(Siblings): Place components side-by-side (at the same level).;(Step Up): Close the current container to add components to the parent.
TODO
| Abbreviation | Component |
|---|---|
comp |
@Composable\nfun MyComponent() {\n%CONTENT%\n} |
scfld |
Scaffold(modifier = Modifier) { /* innerPadding -> */\n%CONTENT%\n} |
col |
Column(modifier = Modifier) {\n%CONTENT%\n} |
clmn |
Column(modifier = Modifier) {\n%CONTENT%\n} |
row |
Row(modifier = Modifier) {\n%CONTENT%\n} |
box |
Box(modifier = Modifier) {\n%CONTENT%\n} |
txt |
Text(%ARGUMENT%) |
img |
Image(painter = , contentDescription = ) |
btn |
Button(onClick = {}) { Text(\"Click\") } |
spcr |
Spacer(modifier = Modifier) |
Type your abbreviation string and press the hotkey:
- Windows/Linux: Ctrl + Alt + E
- macOS: Cmd + Opt + E
Multiplication (*):
Create 5 text elements in a row.
// Input
row / txt * 5
// Output
Row {
Text(text = "")
Text(text = "")
// ... (3 more)
}Siblings (,): Define elements at the same hierarchy level.
// Input
row / img, txt, btn
// Output
Row {
Image(...)
Text(...)
Button(...) { }
}Stepping Up (;): Use ; to exit the current container (Row) and continue adding to the parent (Column).
// Input
col / row / txt; btn
// Output
Column {
Row {
// Txt is inside Row
Text(text = "")
}
// Btn is inside Column, but after Row (because of ;)
Button(onClick = {}) { }
}Need to use a component that isn't in the list? Just type its name! If YARC doesn't recognize an abbreviation, it treats it as a custom Composable function.
// Input
col / UserProfileCard
// Output
Column {
UserProfileCard()
}Have an idea for a new feature or a missing abbreviation? Please open an issue to suggest improvements.
Encountering issues while using YARC? Check out the troubleshooting section for common problems
and solutions. If you still need assistance, feel free to reach out to the YARC community
for support.
I welcome contributions from the community to help improve YARC. Whether you want to report a bug,
suggest a new feature, or submit a pull request, follow the contribution guidelines outlined in the
project's repository. Together, we can make YARC even better.
MIT License
Copyright (c) [2026] [Andrew Malitchuk]
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

