palette

Design system delivering UI components, modifiers, and themes — interactive media controls, shader-driven visual effects (color-split, pixelate, noise, warp), plus a browsable catalog app.

Android JVMJVMKotlin/NativeWasm
GitHub stars0
Open issues11
LicenseApache License 2.0
Creation date5 months ago

Last activity2 months ago
Latest release0.0.109 (about 2 months ago)

Palette is an experimental Compose Multiplatform design library. It contains a set of component, modifier, and theme libraries.

Catalog App

The catalog app is available on Android, iOS, desktop, and web.

app demo

Source

Components

Source

Media Control Sheet

Media Control Sheet is an interactive component that shows simple media information when collapsed and large-scale media artwork when expanded. It's inspired by similar components in the YouTube and YouTube Music apps.

Media Control Sheet demo

Media Control Bar

0% 50% 100%
Media Control Bar - 0% Media Control Bar - 50% Media Control Bar - 100%

Modifiers

Runtime Shaders enable detailed control over how individual pixels are rendered on the screen. Below are shaders I've written, ported, or adapted as Modifiers that can be applied to any Composable that accepts a Modifier.

On Android, these shaders are powered by the RuntimeShader library and the Android Graphics Shader Language (AGSL). On non-Android platforms, the shaders are powered by Skiko and the Skia Shader Language (SkSL).

Source

Color Split

Color Split allows individual color channels (e.g. red, green, blue) of the target to be shifted by variable amounts across the X and Y axes.

[0.0, 0.0] [0.1, 0.0] [0.2, 0.0] [0.0, 0.1] [0.0, 0.2] [0.2, 0.2]
Color Split 0, 0 Color Split 0.1, 0.0 Color Split 0.2, 0.0 Color Split 0.0, 0.1 Color Split 0.0, 0.2 Color Split 0.2, 0.2
Color Split 0, 0 Color Split 0.1, 0.0 Color Split 0.2, 0.0 Color Split 0.0, 0.1 Color Split 0.0, 0.2 Color Split 0.2, 0.2

Pixelate

The Pixelate shader assigns the color of all pixels in a region to that of a sample point within the region. Below is the effect with an increasing number of additional pixels in each region.

0 5 10 25 50 100
Pixelate - 0 subdivisions Pixelate - 5 subdivisions Pixelate - 10 subdivisions Pixelate - 25 subdivisions Pixelate - 50 subdivisions Pixelate - 100 subdivisions
Pixelate - 0 subdivisions Pixelate - 5 subdivisions Pixelate - 10 subdivisions Pixelate - 25 subdivisions Pixelate - 50 subdivisions Pixelate - 100 subdivisions

Noise

A simple noise effect with increasing levels of opacity.

0% 20% 50% 100%
Noise - 0% Noise - 20% Noise - 50% Noise - 100%
Noise - 0% Noise - 20% Noise - 50% Noise - 100%

Warp

Warp pixels towards or away from a radius.

0% 20% 50% 100%
Warp - 0% Warp - 20% Warp - 50% Warp - 100%
Warp - 0% Warp - 20% Warp - 50% Warp - 100%

Screenshot Tests

With the exception of the GIFs, the images above were captured as gold files for automated screenshot tests of the library. Screenshots are generated for each Pull Request and compared against these gold files to ensure UI changes are made intentionally and with review. These screenshot tests are powered by Paparazzi and TestParameterInjector.

Component Tests

Modifier Tests

Android JVMJVMKotlin/NativeWasm
GitHub stars0
Open issues11
LicenseApache License 2.0
Creation date5 months ago

Last activity2 months ago
Latest release0.0.109 (about 2 months ago)

Palette is an experimental Compose Multiplatform design library. It contains a set of component, modifier, and theme libraries.

Catalog App

The catalog app is available on Android, iOS, desktop, and web.

app demo

Source

Components

Source

Media Control Sheet

Media Control Sheet is an interactive component that shows simple media information when collapsed and large-scale media artwork when expanded. It's inspired by similar components in the YouTube and YouTube Music apps.

Media Control Sheet demo

Media Control Bar

0% 50% 100%
Media Control Bar - 0% Media Control Bar - 50% Media Control Bar - 100%

Modifiers

Runtime Shaders enable detailed control over how individual pixels are rendered on the screen. Below are shaders I've written, ported, or adapted as Modifiers that can be applied to any Composable that accepts a Modifier.

On Android, these shaders are powered by the RuntimeShader library and the Android Graphics Shader Language (AGSL). On non-Android platforms, the shaders are powered by Skiko and the Skia Shader Language (SkSL).

Source

Color Split

Color Split allows individual color channels (e.g. red, green, blue) of the target to be shifted by variable amounts across the X and Y axes.

[0.0, 0.0] [0.1, 0.0] [0.2, 0.0] [0.0, 0.1] [0.0, 0.2] [0.2, 0.2]
Color Split 0, 0 Color Split 0.1, 0.0 Color Split 0.2, 0.0 Color Split 0.0, 0.1 Color Split 0.0, 0.2 Color Split 0.2, 0.2
Color Split 0, 0 Color Split 0.1, 0.0 Color Split 0.2, 0.0 Color Split 0.0, 0.1 Color Split 0.0, 0.2 Color Split 0.2, 0.2

Pixelate

The Pixelate shader assigns the color of all pixels in a region to that of a sample point within the region. Below is the effect with an increasing number of additional pixels in each region.

0 5 10 25 50 100
Pixelate - 0 subdivisions Pixelate - 5 subdivisions Pixelate - 10 subdivisions Pixelate - 25 subdivisions Pixelate - 50 subdivisions Pixelate - 100 subdivisions
Pixelate - 0 subdivisions Pixelate - 5 subdivisions Pixelate - 10 subdivisions Pixelate - 25 subdivisions Pixelate - 50 subdivisions Pixelate - 100 subdivisions

Noise

A simple noise effect with increasing levels of opacity.

0% 20% 50% 100%
Noise - 0% Noise - 20% Noise - 50% Noise - 100%
Noise - 0% Noise - 20% Noise - 50% Noise - 100%

Warp

Warp pixels towards or away from a radius.

0% 20% 50% 100%
Warp - 0% Warp - 20% Warp - 50% Warp - 100%
Warp - 0% Warp - 20% Warp - 50% Warp - 100%

Screenshot Tests

With the exception of the GIFs, the images above were captured as gold files for automated screenshot tests of the library. Screenshots are generated for each Pull Request and compared against these gold files to ensure UI changes are made intentionally and with review. These screenshot tests are powered by Paparazzi and TestParameterInjector.

Component Tests

Modifier Tests