Qrose
Styled QR code and Barcode generation library for Compose Multiplatform and Jetpack Compose.
View on GitHubDocumentation
QRose
Barcode generation library for Compose Multiplatform
Why QRose?
- Lightweight - doesn't contain any dependencies except of
compose.ui; - Flexible - high customization ability that is open for extension;
- Efficient - declare and render codes synchronously right from the composition in 60+ fps;
- Scalable - no raster bitmaps, only scalable vector graphics;
- Multiplatform - supports all the targets supported by Compose Multiplatform.
- Multiformat - multiple formats supported:
QR,UPC,EAN,Code 128/93/39,Codabar,ITF.
Installation
dependencies {
// For QR codes
implementation("io.github.alexzhirkevich:qrose:<latest_version>")
// For single-dimension barcodes (UPC,EAN, Code128, ...)
implementation("io.github.alexzhirkevich:qrose-oned:<latest_version>")
}
Usage
Basic
You can create code right in composition using rememberQrCodePainter, rememberBarcodePainter.
Or use QrCodePainter, BarcodePainter to create it outside of Compose.
Image(
painter = rememberQrCodePainter("https://example.com"),
contentDescription = "QR code referring to the example.com website"
)
Image(
painter = rememberBarcodePainter("9780201379624", BarcodeType.EAN13),
contentDescription = "EAN barcode for some product"
)
Design
QR codes have flexible styling options, for example:
val qrcodePainter = rememberQrCodePainter(
data = "https://example.com",
ballShape = QrBallShape.circle(),
darkPixelShape = QrPixelShape.roundCorners(),
frameShape = QrFrameShape.roundCorners(.25f),
darkBrush = QrBrush.brush {
Brush.linearGradient(
0f to Color.Red,
1f to Color.Blue,
end = Offset(it, it)
)
},
frameBrush = QrBrush.solid(Color.Black),
logoPainter = rememberQrCodePainter("123"),
logoPadding = QrLogoPadding.Natural(.1f),
logoShape = QrLogoShape.circle(),
logoSize = 0.2f,
)
Or with DSL constructor:
val logoPainter : Painter = painterResource("logo.png")
val qrcodePainter : Painter = rememberQrCodePainter("https://example.com") {
logo {
painter = logoPainter
padding = QrLogoPadding.Natural(.1f)
shape = QrLogoShape.circle()
size = 0.2f
}
shapes {
ball = QrBallShape.circle()
darkPixel = QrPixelShape.roundCorners()
frame = QrFrameShape.roundCorners(.25f)
}
colors {
dark = QrBrush.brush {
Brush.linearGradient(
0f to Color.Red,
1f to Color.Blue,
end = Offset(it, it)
)
}
frame = QrBrush.solid(Color.Black)
}
}
Customize
You can create your own shapes for each QR code part, for example:
class MyCircleBallShape : QrBallShape {
override fun Path.path(size: Float, neighbors: Neighbors): Path = apply {
addOval(Rect(0f,0f, size, size))
}
}
Note
A path here usesPathFillType.EvenOddthat cannot be changed.
Data types
QR codes can hold various payload types: Text, Wi-Fi, E-mail, vCard, etc.
QrData object can be used to perform such encodings, for example:
val wifiData : String = QrData.wifi(ssid = "My Network", psk = "12345678")
val wifiCode = rememberQrCodePainter(wifiData)
Export
QR codes can be exported to PNG, JPEG and WEBP formats using toByteArray function:
val painter : Painter = QrCodePainter(
data = "https://example.com",
options = QrOptions {
colors {
//...
}
}
)
val bytes : ByteArray = painter.toByteArray(1024, 1024, ImageFormat.PNG)
Similar Libraries
Compose Icons
Compose icons is a pack of libraries that provide well known Icon Packs to use in Jetpack Compose Multiplatform.
bonsai
:deciduous_tree: A multiplatform tree view for Jetpack Compose
rebugger
A simple Compose Multiplatform library designed to print the reason for recomposition in your console/Logcat window."
Circuit
⚡️ A Compose-driven architecture for Kotlin and Android applications.
Browse by Category

