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:
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.
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)
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).Credentials page (https://console.cloud.google.com/apis/credentials) and click + CREATE CREDENTIALS (https://console.cloud.google.com/auth/clients/create) at the top.OAuth client ID type of credentials.Desktop app.${XDG_DATA_HOME:-~/.local/share}/deck/credentials.json.If you're setting up deck for automated workflows (GitHub Actions, CI/CD pipelines), see Service Account Setup Guide.
deck doctorYou can verify if deck is ready to use and diagnose any configuration issues with the deck doctor command.
deck newdeck requires two main components:
xxxxxXXXXxxxxxXXXXxxxxxxxxxx from the URL https://docs.google.com/presentation/d/xxxxxXXXXxxxxxXXXXxxxxxxxxxx/edit)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.
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.
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]
deckfully 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.
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.
deck apply$ deck apply deck.md
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
--watchflag cannot be used together with the--pageflag.
deck openYou can open your Google Slides presentation in your default web browser:
$ deck open deck.md
deckThe Markdown used by deck consists of YAML frontmatter and a body section.
deck accepts YAML frontmatter at the beginning of your markdown file.
---
presentationID: xxxxxXXXXxxxxxXXXXxxxxxxxxxx
title: Talk about deck
---
# First Slide
Content...
The frontmatter must be:
--- delimiterscamelCase for fields used in deck settingspresentationID (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.deck supports CommonMark and selected GitHub Flavored Markdown extensions. For comprehensive documentation, see Markdown Support Documentation.
Key supported features:
**bold** )*italic* __italic__ )~~strikethrough~~ )- * )1. 1) )Link (https://example.com) )!Image )> block quote ), , , , , , , , , , , , , , , , , )deck provides configurable line break behavior through the breaks setting:
breaks: false): Single line breaks become spaces (per CommonMark/GFM specs)breaks: true: Line breaks are preserved (GitHub-style rendering)Example with breaks: true:
---
breaks: true
---
Text with
line breaks
preserved
HTML comments `` are used for speaker notes or page configuration.
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.
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.
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.
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.
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.
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.