# googleworkspace/md2googleslides architecture

> Architecture diagram of the GitHub repository googleworkspace/md2googleslides, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/googleworkspace/md2googleslides
- Repository: https://github.com/googleworkspace/md2googleslides

## Overview

md2gslides converts Markdown/HTML into Google Slides presentations, through either its CLI or embeddable generator API. The main workflow parses slide content, prepares images, selects layouts, builds Slides API requests, and updates or reloads a deck. README-documented capabilities include rich text, code highlighting, tables, notes, videos, images, custom layouts, and append/erase behavior. Some subsystem links reflect documented features and tree paths; unsampled implementation wiring is omitted where uncertain.

Main entry points: [`src/slide_generator.ts`](https://github.com/googleworkspace/md2googleslides/blob/main/src/slide_generator.ts) (Slide generator), [`src/parser/extract_slides.ts`](https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/extract_slides.ts) (Slide extraction), [`bin/md2gslides.js`](https://github.com/googleworkspace/md2googleslides/blob/main/bin/md2gslides.js) (CLI), [`src/auth.ts`](https://github.com/googleworkspace/md2googleslides/blob/main/src/auth.ts) (OAuth authorizer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry points"]
  node_cli["CLI<br/>[md2gslides.js]"]
  node_api_entry["Library API<br/>[index.js]"]
  node_auth["OAuth authorizer<br/>[auth.ts]"]
  node_tokens[("Token store<br/>[auth.ts]")]
end

subgraph group_parse["Content parsing"]
  node_extract["Slide extraction<br/>[extract_slides.ts]"]
  node_markdown["Markdown parser<br/>[parser.ts]"]
  node_context["Parse context<br/>[env.ts]"]
  node_css["Style parsing<br/>[css.ts]"]
  node_syntax["Code highlighting"]
  node_slide_types["Slide definitions<br/>[slides.ts]"]
end

subgraph group_render["Slide rendering"]
  node_generator["Slide generator<br/>[slide_generator.ts]"]
  node_layout_match["Layout selection<br/>[match_layout.ts]"]
  node_layout["Request building<br/>[generic_layout.ts]"]
  node_layout_helpers["Presentation helpers"]
  node_images["Image generation<br/>[generate.ts]"]
  node_mathjax["Math rendering<br/>[mathjax.ts]"]
  node_svg["SVG conversion<br/>[svg.ts]"]
  node_probe["Image sizing<br/>[probe.ts]"]
  node_upload["Local image upload<br/>[upload.ts]"]
end

subgraph group_integrations["External services"]
  node_google_auth["Google OAuth"]
  node_slides_api["Google Slides API"]
  node_fileio["File.io"]
  node_image_sources["Image sources"]
end

node_user(("Author"))

node_user -->|"provides input"| node_cli
node_user -->|"supplies content"| node_api_entry
node_cli -->|"authorizes"| node_auth
node_auth -->|"reads/writes"| node_tokens
node_auth -->|"requests tokens"| node_google_auth
node_cli -->|"configures"| node_generator
node_api_entry -->|"exports"| node_generator
node_generator -->|"parses content"| node_extract
node_extract -->|"tokenizes"| node_markdown
node_extract -->|"builds slide data"| node_context
node_extract -->|"parses styles"| node_css
node_extract -->|"highlights code"| node_syntax
node_extract -->|"creates definitions"| node_slide_types
node_generator -->|"processes slides"| node_slide_types
node_generator -->|"generates images"| node_images
node_generator -->|"probes dimensions"| node_probe
node_probe -->|"reads dimensions"| node_image_sources
node_generator -->|"uploads local images"| node_upload
node_upload -.->|"uploads image"| node_fileio
node_images -->|"renders math"| node_mathjax
node_mathjax -->|"converts SVG"| node_svg
node_generator -->|"selects layouts"| node_layout_match
node_layout_match -->|"creates renderer"| node_layout
node_layout -->|"finds placeholders"| node_layout_helpers
node_generator -->|"creates/updates decks"| node_slides_api
node_generator -->|"loads presentation"| node_slides_api
node_cli -->|"copies deck"| node_slides_api
node_slides_api -->|"returns presentation"| node_user

click node_cli "https://github.com/googleworkspace/md2googleslides/blob/main/bin/md2gslides.js"
click node_api_entry "https://github.com/googleworkspace/md2googleslides/blob/main/index.js"
click node_auth "https://github.com/googleworkspace/md2googleslides/blob/main/src/auth.ts"
click node_tokens "https://github.com/googleworkspace/md2googleslides/blob/main/src/auth.ts"
click node_generator "https://github.com/googleworkspace/md2googleslides/blob/main/src/slide_generator.ts"
click node_extract "https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/extract_slides.ts"
click node_markdown "https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/parser.ts"
click node_context "https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/env.ts"
click node_css "https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/css.ts"
click node_syntax "https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/syntax_highlight.ts"
click node_slide_types "https://github.com/googleworkspace/md2googleslides/blob/main/src/slides.ts"
click node_layout_match "https://github.com/googleworkspace/md2googleslides/blob/main/src/layout/match_layout.ts"
click node_layout "https://github.com/googleworkspace/md2googleslides/blob/main/src/layout/generic_layout.ts"
click node_layout_helpers "https://github.com/googleworkspace/md2googleslides/blob/main/src/layout/presentation_helpers.ts"
click node_images "https://github.com/googleworkspace/md2googleslides/blob/main/src/images/generate.ts"
click node_mathjax "https://github.com/googleworkspace/md2googleslides/blob/main/src/images/mathjax.ts"
click node_svg "https://github.com/googleworkspace/md2googleslides/blob/main/src/images/svg.ts"
click node_probe "https://github.com/googleworkspace/md2googleslides/blob/main/src/images/probe.ts"
click node_upload "https://github.com/googleworkspace/md2googleslides/blob/main/src/images/upload.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_api_entry,node_auth,node_tokens toneBlue
class node_extract,node_markdown,node_context,node_css,node_syntax,node_slide_types toneAmber
class node_generator,node_layout_match,node_layout,node_layout_helpers,node_images,node_mathjax,node_svg,node_probe,node_upload toneMint
class node_google_auth,node_slides_api,node_fileio,node_image_sources toneRose
class node_user toneIndigo
```

## Components

### Entry points

- [CLI](https://github.com/googleworkspace/md2googleslides/blob/main/bin/md2gslides.js): `bin/md2gslides.js`
- [Library API](https://github.com/googleworkspace/md2googleslides/blob/main/index.js): `index.js`
- [OAuth authorizer](https://github.com/googleworkspace/md2googleslides/blob/main/src/auth.ts): `src/auth.ts`
- [Token store](https://github.com/googleworkspace/md2googleslides/blob/main/src/auth.ts): `src/auth.ts`

### Content parsing

- [Slide extraction](https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/extract_slides.ts): `src/parser/extract_slides.ts`
- [Markdown parser](https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/parser.ts): `src/parser/parser.ts`
- [Parse context](https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/env.ts): `src/parser/env.ts`
- [Style parsing](https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/css.ts): `src/parser/css.ts`
- [Code highlighting](https://github.com/googleworkspace/md2googleslides/blob/main/src/parser/syntax_highlight.ts): `src/parser/syntax_highlight.ts`
- [Slide definitions](https://github.com/googleworkspace/md2googleslides/blob/main/src/slides.ts): `src/slides.ts`

### Slide rendering

- [Slide generator](https://github.com/googleworkspace/md2googleslides/blob/main/src/slide_generator.ts): `src/slide_generator.ts`
- [Layout selection](https://github.com/googleworkspace/md2googleslides/blob/main/src/layout/match_layout.ts): `src/layout/match_layout.ts`
- [Request building](https://github.com/googleworkspace/md2googleslides/blob/main/src/layout/generic_layout.ts): `src/layout/generic_layout.ts`
- [Presentation helpers](https://github.com/googleworkspace/md2googleslides/blob/main/src/layout/presentation_helpers.ts): `src/layout/presentation_helpers.ts`
- [Image generation](https://github.com/googleworkspace/md2googleslides/blob/main/src/images/generate.ts): `src/images/generate.ts`
- [Math rendering](https://github.com/googleworkspace/md2googleslides/blob/main/src/images/mathjax.ts): `src/images/mathjax.ts`
- [SVG conversion](https://github.com/googleworkspace/md2googleslides/blob/main/src/images/svg.ts): `src/images/svg.ts`
- [Image sizing](https://github.com/googleworkspace/md2googleslides/blob/main/src/images/probe.ts): `src/images/probe.ts`
- [Local image upload](https://github.com/googleworkspace/md2googleslides/blob/main/src/images/upload.ts): `src/images/upload.ts`

### External services

- **Google OAuth**
- **Google Slides API**
- **File.io**
- **Image sources**

### Other components

- **Author**

## Connections

- Author → CLI: provides input
- Author → Library API: supplies content
- CLI → OAuth authorizer: authorizes
- OAuth authorizer → Token store: reads/writes
- OAuth authorizer → Google OAuth: requests tokens
- CLI → Slide generator: configures
- Library API → Slide generator: exports
- Slide generator → Slide extraction: parses content
- Slide extraction → Markdown parser: tokenizes
- Slide extraction → Parse context: builds slide data
- Slide extraction → Style parsing: parses styles
- Slide extraction → Code highlighting: highlights code
- Slide extraction → Slide definitions: creates definitions
- Slide generator → Slide definitions: processes slides
- Slide generator → Image generation: generates images
- Slide generator → Image sizing: probes dimensions
- Image sizing → Image sources: reads dimensions
- Slide generator → Local image upload: uploads local images
- Local image upload → File.io: uploads image
- Image generation → Math rendering: renders math
- Math rendering → SVG conversion: converts SVG
- Slide generator → Layout selection: selects layouts
- Layout selection → Request building: creates renderer
- Request building → Presentation helpers: finds placeholders
- Slide generator → Google Slides API: creates/updates decks
- Slide generator → Google Slides API: loads presentation
- CLI → Google Slides API: copies deck
- Google Slides API → Author: returns presentation
