Skip to content

Repository files navigation

Compose Markdown

Maven Central Version License

Kotlin Multiplatform Markdown parser and Compose renderer for append-only streaming output.

This library is under development.

Install

libs.versions.toml

[versions]
compose-markdown = "0.1.4"

[libraries]
compose-markdown-core = { module = "com.adamglin.compose.markdown:markdown-core", version.ref = "compose-markdown" }
compose-markdown-compose = { module = "com.adamglin.compose.markdown:markdown-compose", version.ref = "compose-markdown" }

build.gradle.kts

implementation(libs.compose.markdown.compose)

Example

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.sp
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import com.adamglin.compose.markdown.compose.Markdown
import com.adamglin.compose.markdown.compose.MarkdownStyle
import com.adamglin.compose.markdown.compose.MarkdownThemeDefaults
import com.adamglin.compose.markdown.compose.ProvideMarkdownTheme
import com.adamglin.compose.markdown.core.api.MarkdownEngine
import com.adamglin.compose.markdown.core.model.MarkdownSnapshot

@Composable
fun Message(content: String) {
    val engine = remember { MarkdownEngine() }
    engine.reset()
    val snapshot = engine.append(content).snapshot
    val colors = MarkdownThemeDefaults.LightColors.copy(accent = Color(0xFF0A7A5C))
    val baseTypography = MarkdownThemeDefaults.typography(colors)
    val typography = baseTypography.copy(
        bodyLarge = baseTypography.bodyLarge.copy(lineHeight = 26.sp),
    )

    Markdown(
        snapshot = snapshot,
        style = MarkdownStyle(
            colors = colors,
            typography = typography,
        ),
    )
}

@Composable
fun Thread(snapshot: MarkdownSnapshot) {
    val colors = MarkdownThemeDefaults.DarkColors.copy(accent = Color(0xFF7EC7A2))

    ProvideMarkdownTheme(colors = colors) {
        Markdown(snapshot = snapshot)
    }
}

Modules

  • markdown-core - incremental Markdown engine with streaming-friendly snapshots
  • markdown-compose - Compose renderer built around stable block identity

Notes

  • presets: ChatFast, CommonMarkCore, GfmCompat
  • good fit: chat UIs, streaming previews, Compose apps
  • out of scope: raw HTML, arbitrary in-place editing, full CommonMark parity
  • docs: docs/compatibility-report.md, docs/known-limitations.md

License

MIT

About

Compose Markdown is a Kotlin Multiplatform library for incremental Markdown parsing and Compose rendering, built for append-only streaming interfaces like chat and live previews.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages