Deck Download

CLI tool for creating presentations using Markdown and Google Slides featuring continuous deck building, content/design separation, OAuth/service account setup, Markdown frontmatter with presentationID/title, CommonMark/GFM support (bold/italic/lists/links/code/images/tables/HTML), deck new/apply/open/ls commands, --watch mode, and MIT license.

⭐ 1,092 stars on GitHub
Latest Release: v1.21.6

About Software

deck is a tool for creating deck using Markdown and Google Slides. Key concept: continuous deck building (generate and modify deck iteratively), separate content and design (Markdown for content, Google Slides for design). Installation via Homebrew (brew install deck), go install (github.com/k1LoW/deck/cmd/deck@latest), or manual download from releases page. Setup: get OAuth client credentials from Google Cloud Console, create developer project, enable Google Slides API and Google Drive API, create OAuth client ID (Desktop app type), download credentials to ${XDG_DATA_HOME:-~/.local/share}/deck/credentials.json, add email as test user. For CI/CD automation, use Service Account Setup Guide. Check setup with 'deck doctor' to verify configuration.

Usage: deck requires presentation ID (unique identifier from Google Slides URL) and Markdown file. deck new creates new presentation (deck new deck.md --title 'Talk about deck'), reuses theme with --base flag or default basePresentationID in config.yml. For existing presentations, use 'deck ls' to list all presentations (supports Google Shared Drives). Write slides in Markdown with YAML frontmatter (presentationID, title, breaks, codeBlockToImageCommand, defaults), use three/more hyphens (---) as slide separators. Supports CommonMark/GFM: bold/italic/strikethrough, lists, links, code, images, tables, raw HTML (br, b, i, strong, em, u, s, strike, mark, ruby, rt, rp, sub, sup, ins, del). deck apply applies Markdown to Slides (deck apply deck.md), --watch flag for continuous monitoring. deck open opens presentation in browser. Configurable line breaks via 'breaks' setting (default false renders line breaks as spaces, true preserves them). HTML comments for speaker notes/page configuration. MIT license. Topics: deck, google-slides, markdown, slide.

Use Cases:

  • CLI tool for creating presentations using Markdown and Google Slides with continuous deck building and content/design separation
  • OAuth client setup with Google Slides API & Drive API, service account support for CI/CD automation, deck doctor for configuration diagnosis
  • Markdown frontmatter with presentationID/title, supports CommonMark/GFM (bold, italic, strikethrough, lists, links, code, images, tables, raw HTML)
  • deck new creates presentations with --base for theme reuse, deck apply applies Markdown to Slides (--watch for continuous monitoring), deck open in browser
  • Homebrew (brew install deck), go install, manual install from releases, supports breaks setting, code-to-image conversion, conditional defaults via CEL

Downloads

v1.21.6 October 29, 2025
deck_1.21.6-1_amd64.apkapk
deck_1.21.6-1_amd64.debdeb
deck_1.21.6-1_arm64.apkapk
deck_1.21.6-1_arm64.debdeb
v1.21.5 September 14, 2025
deck_1.21.5-1_amd64.apkapk
deck_1.21.5-1_amd64.debdeb
deck_1.21.5-1_arm64.apkapk
deck_1.21.5-1_arm64.debdeb
v1.21.4 September 07, 2025
deck_1.21.4-1_amd64.apkapk
deck_1.21.4-1_amd64.debdeb
deck_1.21.4-1_arm64.apkapk
deck_1.21.4-1_arm64.debdeb
v1.21.3 September 05, 2025
deck_1.21.3-1_amd64.apkapk
deck_1.21.3-1_amd64.debdeb
deck_1.21.3-1_arm64.apkapk
deck_1.21.3-1_arm64.debdeb
v1.21.2 September 04, 2025
deck_1.21.2-1_amd64.apkapk
deck_1.21.2-1_amd64.debdeb
deck_1.21.2-1_arm64.apkapk
deck_1.21.2-1_arm64.debdeb
v1.21.1 September 04, 2025
deck_1.21.1-1_amd64.apkapk
deck_1.21.1-1_amd64.debdeb
deck_1.21.1-1_arm64.apkapk
deck_1.21.1-1_arm64.debdeb
v1.21.0 September 03, 2025
deck_1.21.0-1_amd64.apkapk
deck_1.21.0-1_amd64.debdeb
deck_1.21.0-1_arm64.apkapk
deck_1.21.0-1_arm64.debdeb
v1.20.0 September 02, 2025
deck_1.20.0-1_amd64.apkapk
deck_1.20.0-1_amd64.debdeb
deck_1.20.0-1_arm64.apkapk
deck_1.20.0-1_arm64.debdeb
v1.19.2 September 01, 2025
deck_1.19.2-1_amd64.apkapk
deck_1.19.2-1_amd64.debdeb
deck_1.19.2-1_arm64.apkapk
deck_1.19.2-1_arm64.debdeb
v1.19.1 August 31, 2025
deck_1.19.1-1_amd64.apkapk
deck_1.19.1-1_amd64.debdeb
deck_1.19.1-1_arm64.apkapk
deck_1.19.1-1_arm64.debdeb
v1.19.0 August 30, 2025
deck_1.19.0-1_amd64.apkapk
deck_1.19.0-1_amd64.debdeb
deck_1.19.0-1_arm64.apkapk
deck_1.19.0-1_arm64.debdeb
v1.18.1 August 30, 2025
deck_1.18.1-1_amd64.apkapk
deck_1.18.1-1_amd64.debdeb
deck_1.18.1-1_arm64.apkapk
deck_1.18.1-1_arm64.debdeb
v1.18.0 August 29, 2025
deck_1.18.0-1_amd64.apkapk
deck_1.18.0-1_amd64.debdeb
deck_1.18.0-1_arm64.apkapk
deck_1.18.0-1_arm64.debdeb
v1.17.3 August 29, 2025
deck_1.17.3-1_amd64.apkapk
deck_1.17.3-1_amd64.debdeb
deck_1.17.3-1_arm64.apkapk
deck_1.17.3-1_arm64.debdeb
v1.17.2 August 25, 2025
deck_1.17.2-1_amd64.apkapk
deck_1.17.2-1_amd64.debdeb
deck_1.17.2-1_arm64.apkapk
deck_1.17.2-1_arm64.debdeb
v1.17.1 August 24, 2025
deck_1.17.1-1_amd64.apkapk
deck_1.17.1-1_amd64.debdeb
deck_1.17.1-1_arm64.apkapk
deck_1.17.1-1_arm64.debdeb
v1.17.0 August 24, 2025
deck_1.17.0-1_amd64.apkapk
deck_1.17.0-1_amd64.debdeb
deck_1.17.0-1_arm64.apkapk
deck_1.17.0-1_arm64.debdeb
v1.16.1 August 20, 2025
deck_1.16.1-1_amd64.apkapk
deck_1.16.1-1_amd64.debdeb
deck_1.16.1-1_arm64.apkapk
deck_1.16.1-1_arm64.debdeb
v1.16.0 August 20, 2025
deck_1.16.0-1_amd64.apkapk
deck_1.16.0-1_amd64.debdeb
deck_1.16.0-1_arm64.apkapk
deck_1.16.0-1_arm64.debdeb
v1.15.3 August 19, 2025
deck_1.15.3-1_amd64.apkapk
deck_1.15.3-1_amd64.debdeb
deck_1.15.3-1_arm64.apkapk
deck_1.15.3-1_arm64.debdeb
v1.15.2 August 19, 2025
deck_1.15.2-1_amd64.apkapk
deck_1.15.2-1_amd64.debdeb
deck_1.15.2-1_arm64.apkapk
deck_1.15.2-1_arm64.debdeb
v1.15.1 August 18, 2025
deck_1.15.1-1_amd64.apkapk
deck_1.15.1-1_amd64.debdeb
deck_1.15.1-1_arm64.apkapk
deck_1.15.1-1_arm64.debdeb
v1.15.0 August 16, 2025
deck_1.15.0-1_amd64.apkapk
deck_1.15.0-1_amd64.debdeb
deck_1.15.0-1_arm64.apkapk
deck_1.15.0-1_arm64.debdeb
v1.14.0 August 15, 2025
deck_1.14.0-1_amd64.apkapk
deck_1.14.0-1_amd64.debdeb
deck_1.14.0-1_arm64.apkapk
deck_1.14.0-1_arm64.debdeb
v1.13.1 August 13, 2025
deck_1.13.1-1_amd64.apkapk
deck_1.13.1-1_amd64.debdeb
deck_1.13.1-1_arm64.apkapk
deck_1.13.1-1_arm64.debdeb
v1.13.0 August 13, 2025
deck_1.13.0-1_amd64.apkapk
deck_1.13.0-1_amd64.debdeb
deck_1.13.0-1_arm64.apkapk
deck_1.13.0-1_arm64.debdeb
v1.12.1 August 12, 2025
deck_1.12.1-1_amd64.apkapk
deck_1.12.1-1_amd64.debdeb
deck_1.12.1-1_arm64.apkapk
deck_1.12.1-1_arm64.debdeb
v1.12.0 August 12, 2025
deck_1.12.0-1_amd64.apkapk
deck_1.12.0-1_amd64.debdeb
deck_1.12.0-1_arm64.apkapk
deck_1.12.0-1_arm64.debdeb
v1.11.0 August 10, 2025
deck_1.11.0-1_amd64.apkapk
deck_1.11.0-1_amd64.debdeb
deck_1.11.0-1_arm64.apkapk
deck_1.11.0-1_arm64.debdeb
v1.10.1 August 09, 2025
deck_1.10.1-1_amd64.apkapk
deck_1.10.1-1_amd64.debdeb
deck_1.10.1-1_arm64.apkapk
deck_1.10.1-1_arm64.debdeb

Package Info

Last Updated
Oct 29, 2025
Latest Version
v1.21.6
License
MIT
Total Versions
30

README

deck

build (https://github.com/k1LoW/deck/actions/workflows/ci.yml/badge.svg) !Coverage (https://raw.githubusercontent.com/k1LoW/octocovs/main/badges/k1LoW/deck/coverage.svg) !Code to Test Ratio (https://raw.githubusercontent.com/k1LoW/octocovs/main/badges/k1LoW/deck/ratio.svg) Ask DeepWiki (https://deepwiki.com/badge.svg)

deck is a tool for creating deck using Markdown and Google Slides.

Key concept

  • Continuous deck building
    • Generate and modify deck iteratively.
  • Separate content and design
    • Markdown for content, Google Slides for design.

Installation

Homebrew:

$ brew install deck

go install:

$ go install github.com/k1LoW/deck/cmd/deck@latest

Manual installation:

Download the binary from the releases page (https://github.com/k1LoW/deck/releases)

Usage

Setup

Get and set your OAuth client credentials

  • Create (or reuse) a developer project at https://console.cloud.google.com.
  • Enable Google Slides API (https://console.cloud.google.com/apis/library/slides.googleapis.com) and Google Drive API (https://console.cloud.google.com/apis/library/drive.googleapis.com) at the API & Services page (https://console.cloud.google.com/apis/dashboard).
  • Go to the Credentials page (https://console.cloud.google.com/apis/credentials) and click + CREATE CREDENTIALS (https://console.cloud.google.com/auth/clients/create) at the top.
  • Create an OAuth client ID type of credentials.
  • Choose the type Desktop app.
    • Since there is no need to publish the app, add your email address as a test user from Google Auth Platform / Audience (https://console.cloud.google.com/auth/audience).
  • Download the credentials file to ${XDG_DATA_HOME:-~/.local/share}/deck/credentials.json.

For CI/CD automation (Service Account)

If you're setting up deck for automated workflows (GitHub Actions, CI/CD pipelines), see Service Account Setup Guide.

Check your setup with deck doctor

You can verify if deck is ready to use and diagnose any configuration issues with the deck doctor command.

Prepare presentation ID and markdown file with deck new

deck requires two main components:

  • Presentation ID: A unique identifier for your Google Slides presentation (e.g., xxxxxXXXXxxxxxXXXXxxxxxxxxxx from the URL https://docs.google.com/presentation/d/xxxxxXXXXxxxxxXXXXxxxxxxxxxx/edit)
  • Markdown file: Your slide content written in markdown format

When creating a new presentation

You can create a new presentation with the deck new command:

$ deck new deck.md --title "Talk about deck"
Applied frontmatter to deck.md
xxxxxXXXXxxxxxXXXXxxxxxxxxxx

This will create (or update) the given markdown file with frontmatter containing the presentation ID and title.

Reusing theme from an existing presentation

To reuse the theme from an existing presentation, you have two options:

Option 1: Use the --base flag

$ deck new deck.md --base yyyyyyyYYYYyYYYYYYYyyyyyyyyy --title "Talk about deck"
xxxxxXXXXxxxxxXXXXxxxxxxxxxx

Option 2: Set a default base presentation in your configuration file

# ~/.config/deck/config.yml
basePresentationID: "yyyyyyyYYYYyYYYYYYYyyyyyyyyy"

With this configuration, you can reuse the theme from the base presentation without using the --base flag. If both the configuration and --base flag are present, the --base flag takes precedence.

When using an existing presentation

Get the presentation ID you want to work with. You can list all presentations with deck ls.

$ deck ls
xxxxxXXXXxxxxxXXXXxxxxxxxxxx    My Presentation
yyyyyYYYYyyyyyYYYYyyyyyyyyyy    Team Project Slides

[!NOTE] deck fully supports Google Shared Drives (Team Drives). Presentations stored in shared drives are automatically included in listings and can be operated on just like personal drive presentations.

To use this presentation, specify it with the --presentation-id flag or add it to your markdown file's frontmatter as presentationID.

Write your slides in markdown

Edit your markdown file with your favorite editor. Among horizontal rule syntaxes, three or more consecutive hyphens at the beginning of a line (e.g. ---) are treated as slide page separators. See Markdown file format for deck for details.

Apply markdown content to Google Slides with deck apply

$ deck apply deck.md

Watch mode

You can use the --watch flag to continuously monitor changes to your markdown file and automatically apply them to the presentation:

$ deck apply --watch deck.md

This is useful during the content creation process as it allows you to see your changes reflected in the presentation in real-time as you edit the markdown file.

[!NOTE] The --watch flag cannot be used together with the --page flag.

Open presentation in your browser with deck open

You can open your Google Slides presentation in your default web browser:

$ deck open deck.md

Markdown file format for deck

The Markdown used by deck consists of YAML frontmatter and a body section.

YAML Frontmatter

deck accepts YAML frontmatter at the beginning of your markdown file.

---
presentationID: xxxxxXXXXxxxxxXXXXxxxxxxxxxx
title: Talk about deck
---

# First Slide

Content...

The frontmatter must be:

  • At the very beginning of the file
  • Enclosed between --- delimiters
  • Valid YAML syntax
  • Use camelCase for fields used in deck settings

Available fields

  • presentationID (string): Google Slides presentation ID. When specified, you can use the simplified command syntax.
  • title (string): The title of the presentation. When specified, you can use the simplified command syntax.
  • breaks (boolean): Control how line breaks are rendered. Default (false or omitted) renders line breaks as spaces. When true, line breaks in markdown are rendered as actual line breaks in slides. Can also be configured globally in config.yml.
  • codeBlockToImageCommand (string): Command to convert code blocks to images. When specified, code blocks in the presentation will be converted to images using this command. Can also be configured globally in config.yml.
  • defaults (array): Define conditional actions using CEL (Common Expression Language) expressions. Actions are automatically applied to pages based on page structure and content. Only applies to pages without explicit page configuration. Can also be configured globally in config.yml.

Supported Markdown syntax

deck supports CommonMark and selected GitHub Flavored Markdown extensions. For comprehensive documentation, see Markdown Support Documentation.

Key supported features:

  • Bold ( **bold** )
  • Italic ( *italic* __italic__ )
  • Strikethrough ( ~~strikethrough~~ )
  • List ( - * )
  • Ordered list ( 1. 1) )
  • Link ( Link (https://example.com) )
  • Angle bracket autolinks ( `` )
  • Code ( `code` )
  • `` (for newline)
  • Image (!Image )
  • Block quote ( > block quote )
  • Table (GitHub Flavored Markdown tables)
  • RAW inline HTML (e.g., , , , , , , , , , , , , , , , , , )

Line break handling

deck provides configurable line break behavior through the breaks setting:

  • Default (breaks: false): Single line breaks become spaces (per CommonMark/GFM specs)
  • With breaks: true: Line breaks are preserved (GitHub-style rendering)
  • For explicit breaks: Use hard line break syntax (two spaces at line end per CommonMark standard) or `` tag

Example with breaks: true:

---
breaks: true
---
Text with
line breaks
preserved

Comments

HTML comments `` are used for speaker notes or page configuration.

Related Software

Tuboshu

Convert websites into desktop apps with Electron. Features multi-account support, global hotkey switching, custom JavaScript injection and portable packaging for Windows, macOS and Linux.

⭐ 1,291

Pluely

Open-source AI meeting assistant built with Tauri at 10MB. Features real-time transcription with OpenAI Whisper, GPT-4, Claude, Gemini and Grok support, translucent overlay, and undetectable in video calls.

⭐ 1,274ai-assistant, claude, cluely-alternative

Fluent M3 U8

Cross-platform M3U8/MPD video downloader built with PySide6 and QFluentWidgets featuring multi-threaded downloads, task management, fluent design GUI, FFmpeg and N_m3u8DL-RE integration, Python 3.11 conda environment, and deployment support for Windows/macOS/Linux with GPL-3.0 license.

⭐ 1,267fluent, m3u8, m3u8-downloader

Xiaozhi Android Client

Flutter AI voice assistant for Android and iOS with real-time conversation, Live2D characters, echo cancellation, multi-service support for Xiaozhi, Dify and OpenAI, and image messaging.

⭐ 1,252ai, chat, chatgpt

Github Stars Manager

GitHub starred repository manager with AI-powered auto-sync, semantic search, automatic categorization, release tracking, one-click downloads, smart asset filters, bilingual wiki integration, and cross-platform Electron client for Windows/macOS/Linux with 100% local data storage and MIT license.

⭐ 1,224

Observer

Build local AI agents that observe your screen, microphone and clipboard, process with local LLMs, and react with notifications, screen recording and memory. All data stays private. Works with Ollama and OpenAI.

⭐ 1,216