Faça um fork no GitHub

Apresentações em Markdown,
renderizadas em Go puro.

slides lê o Markdown que o Marp lê — diretivas, --- entre os slides, fundos ![bg], notas do apresentador, os temas embutidos — e acrescenta duas coisas que o Marp não tem: templates Go dentro da apresentação, e kinds de slide, para que um slide diga o que ele é em vez de repetir a sua aparência.

v0.20.2 — lançadaHTML, expand, PNG/JPEG, PDF vetorial e acessível, PPTX e ODP editáveis, matemática e emoji vetoriais, código com números de linha e chamadas, HCL, watch, serve, uma visão do apresentador e uma visão geral hojesem Chrome headless
talk.md
---
marp: true
paginate: true
footer: {{ .talk }}
data:
  talk: Pure Go slides
  topics: [Why, How, Next]
---

<!-- _kind: title -->
# {{ .talk }}

{{ range .topics }}
---

# {{ . }}
{{ end }}
Uma organização, 5 repositórios
Compatibilidade

Uma apresentação Marp é uma apresentação go-slides.

A sintaxe é a do Marpit e do Marp Core, não um dialeto dela. Uma apresentação escrita para o Marp é lida do mesmo jeito aqui, e slides expand devolve Markdown Marp simples, então nada escrito com os dois acréscimos abaixo fica preso.

➗

Slides e diretivas

--- divide os slides. Diretivas globais, locais e pontuais (_class), no front matter ou em comentários HTML, com a herança do Marp de um slide para o seguinte.

🖼️

Imagens e fundos

![bg], seus tamanhos e filtros, fundos divididos e as palavras-chave de imagem que o Marp entende.

🗒️

Ao redor do slide

Cabeçalho, rodapé e paginação; notas do apresentador a partir de comentários; listas fragmentadas; <style scoped> para o CSS de um único slide.

🎨

Os temas embutidos

default, gaia e uncover, selecionados com theme: como no Marp.

O primeiro acréscimo

Templates Go, dentro da apresentação.

A apresentação é um text/template, avaliado antes de o Markdown ser analisado — assim um template pode gerar slides, e uma apresentação pode ser dados mais um layout.

🔤

Valores

{{ .title }} lê o front matter, e o mapeamento data: dele guarda o que mais a apresentação precisar.

🔁

Slides a partir de dados

Um {{ range }} que emite --- é um gerador de slides: um slide por item, por palestrante, por release.

#️⃣

Página e total

{{ page }} e {{ total }} só são conhecidos depois que a apresentação é dividida, e são preenchidos nesse momento.

🧾

O código é deixado em paz

Blocos delimitados e código em linha não são avaliados por padrão, então um slide sobre templates Go pode mostrar um. include traz outro arquivo.

O segundo acréscimo

Um slide diz o que ele é.

kind: section nomeia um conjunto predefinido de diretivas locais — cabeçalho, rodapé, paginação, classe, fundo. kind: vale para o slide e os seguintes, _kind: para um só slide. As diretivas escritas no slide continuam prevalecendo.

🏷️

Embutidos

title, section, content e blank, cada um redefinível.

📁

Definidos uma vez, compartilhados

No kinds: do front matter, ou em um arquivo YAML de kinds que todas as apresentações de uma equipe nomeiam.

🧹

Nada vaza

Trocar de kind limpa o que o anterior definiu, de modo que uma classe ou um rodapé não o acompanha até a próxima seção.

Experimente

Uma apresentação no seu navegador.

O Playground é o próprio go-slides, compilado para WebAssembly: escreva à esquerda, os slides acompanham à direita. Nada é instalado e nada é enviado a um servidor. A interface do próprio Playground segue o idioma da página.

⚡

Ao vivo

Os slides são renderizados em um worker enquanto você digita, a pré-visualização rola junto com o editor, um minimapa e uma coluna de miniaturas dos slides a acompanham, e a apresentação de slides tem suas transições. Present abre a visão do apresentador, com as suas notas e um cronômetro, em uma segunda janela.

💡

Ajuda embutida

Autocompletar e explicações para diretivas, kinds e funções de template; problemas marcados na própria linha; apresentações de exemplo, com matemática, imagens e fundos (solte um arquivo de imagem no editor); links para a documentação. Um painel de arquivos guarda o projeto: seus temas, kinds e arquivos de dados, e a mídia que você solta, no layout que o comando slides constrói. Uma aba Format escreve o Markdown para você, com Undo: negrito, itálico, sublinhado, listas, uma tabela a partir de uma grade, o alinhamento do texto do slide e links. Todos os painéis são redimensionáveis.

🔗

Compartilhe, salve, mantenha

Um link carrega a própria apresentação, compactada no seu #. Salve-a como HTML, PDF vetorial, ou uma apresentação PowerPoint ou OpenDocument editável, tudo feito no seu navegador, ou baixe o projeto inteiro como um .zip. O seu rascunho sobrevive a uma recarga, somente no seu navegador.

O que ele faz

HTML primeiro. O resto sem um navegador para controlar.

O marp-cli renderiza imagens e PDF controlando um Chrome headless. Aqui, as próprias bibliotecas Go da frota fazem isso. Imagens e PDF chegaram na v0.1.0, PPTX, matemática e destaque na v0.2.0, ODP, títulos ajustados e HCL na v0.3.0, o PDF vetorial (com o texto selecionável) e emoji na v0.4.0; na v0.5.0 o PPTX e o ODP se tornaram editáveis, enquanto o PPTX do marp-cli são imagens; a v0.6.0 acrescenta watch, serve, transições e as opções do marp-cli, a v0.7.0 a visão do apresentador — veja a documentação.

HTML v0.1.0

Uma página por apresentação, do jeito que o Marp a renderiza: cada slide é uma <section> emoldurada em SVG que se ajusta à janela, com o CSS do tema e um visualizador com teclado.

slides expand v0.1.0

A apresentação, com os templates avaliados e os kinds convertidos em diretivas pontuais, reescrita como Markdown Marp simples — qualquer ferramenta Marp pode continuar a partir daí.

notes, kinds, themes v0.1.0

slides notes imprime as notas do apresentador; slides kinds e slides themes listam o que uma apresentação pode nomear.

slides.yaml v0.1.0

Um arquivo de configuração para uma pasta de apresentações: kinds e temas compartilhados, dados de template, opções de HTML e idioma.

PNG / JPEG v0.1.0

--images png|jpeg escreve uma imagem por slide (deck.001.png, …), --image o primeiro slide. Renderizado pelo go-webengine, um motor de navegador em Go — não um Chrome headless. --image-scale 2 renderiza com o dobro da densidade.

PDF v0.1.0

--pdf, ou -o deck.pdf: uma página por slide no tamanho do slide, com um sumário de slides e títulos, escrito pelo go-pdfkit. As fontes são incorporadas; nada toca a rede. Desde a v0.4.0, as páginas são vetoriais: texto selecionável, formas nítidas, 758 KiB para 100 slides contra 837 KiB do marp-cli (--pdf-raster mantém uma imagem por página).

PPTX v0.2.0

--pptx, ou -o deck.pptx: com as notas do apresentador e os metadados da apresentação, escrito pelo go-ooxml. Desde a v0.5.0, os slides são editáveis — caixas de texto nas fontes da própria apresentação (incorporadas), formas, gradientes, imagens armazenadas uma única vez — enquanto os do marp-cli são imagens (--pptx-raster as mantém). 100 slides: 348 ms e 760 KiB, contra 7,8 s e 7,2 MiB do marp-cli.

Matemática e destaque v0.2.0

$…$ e $$…$$ compostos pelo go-tex, código delimitado destacado pelo go-rouge — na página HTML, nas imagens e no PDF.

ODP v0.3.0

--odp, ou -o deck.odp: uma apresentação OpenDocument com as notas do apresentador — editável desde a v0.5.0, como o PPTX (--odp-raster para uma imagem por slide).

Títulos ajustados v0.3.0

# <!-- fit --> Title ocupa toda a largura do slide em uma linha, na página e em todas as exportações.

Emoji v0.4.0

Os shortcodes :smile: e os emoji Unicode (😄 👩‍💻 🇫🇷) viram imagens Twemoji exatamente como o Marp Core as escreve — mas incorporadas a partir do go-icons/twemoji em vez de carregadas de um CDN, então não precisam de rede e são desenhadas na página, nas imagens, no PDF, no PPTX e no ODP. Emoji →

HCL v0.3.0

HCL2 onde quer que uma apresentação aceite YAML — um front matter ---hcl, slides.hcl, arquivos de kinds e de dados — para expressões e funções: footer = "${upper(data.company)} · ${page()}/${total()}". slides expand reescreve o front matter como YAML. HCL →

Watch, serve, pré-visualização v0.6.0

--watch constrói de novo o que muda e recarrega as páginas abertas; --server dir serve uma pasta de apresentações — deck.md como página, deck.md?pdf, ?pptx, ?png, ?notes convertidos sob demanda — em 127.0.0.1, verificando Host e Origin, sem nunca sair da pasta; --preview abre o navegador. As rotas e a recarga ao vivo do marp-cli, sem a porta aberta dele. Linha de comando →

Várias apresentações v0.6.0

slides -I decks/ -o site/ converte cada apresentação sob uma pasta e espelha a árvore; vários arquivos, uma pasta ou um padrão de uma vez, -P em paralelo.

Transições v0.6.0

O <!-- transition: fade 1s --> do marp-cli, com as suas 33 transições embutidas, executadas pela View Transition API do navegador; um controle na tela; --template bare. As exportações para PDF, PPTX e ODP também as levam, no slide seguinte, e as listas fragmentadas viram animações por clique no PPTX e no ODP (--pdf-fragments escreve uma página de PDF por passo). Desde a v0.18.0; verificado apenas no LibreOffice, não no PowerPoint.

Notas no PDF, metadados, opções do marp-cli v0.6.0

--notes escreve as notas do apresentador como texto, --pdf-notes as coloca nas páginas do PDF, --pdf-outlines os marcadores dele; --title, --author, --keywords, --url, --og-image, --theme; o .marprc e o --config-file (JSON, YAML) do marp-cli são lidos.

Visão geral v0.8.0

Pressione o: todos os slides em uma grade, as setas escolhem um, Enter ou um clique vai até ele — sobre a página ou sobre a visão do apresentador, com as URLs e a sincronização do marp-cli, sem rede. Os slides são rotulados e focalizáveis; a visão fechada é inerte. Linha de comando →

Visão do apresentador v0.7.0

Pressione p na página: o slide atual, o próximo passo, as suas notas (escapadas, nunca lidas pelo leitor de tela do público), um relógio e um cronômetro, em uma segunda janela que acompanha a primeira e é acompanhada por ela — URLs e sincronização do marp-cli, via localStorage, sem servidor e sem rede. Cerca de 10 KB por página. Linha de comando →

Números de linha e chamadas de código v0.8.0

```go {lineNumbers} numera as linhas de um bloco de código ({lineNumbers=10} começa em 10); um marcador em comentário no fim de uma linha (// <1>) seguido de uma lista numerada coloca um disco numerado na linha e na sua nota — na página, nas imagens, no PDF, no PPTX e no ODP. Os números e os discos não são copiados com o código. Matemática e código →

Pacotes de tema v0.18.0

Um tema em um único arquivo .gsta.xz: um arquivo tar compactado com xz, com um theme.hcl que o nomeia e lista o seu CSS, fontes, recursos e kinds. slides theme pack|verify|install|list|remove gerenciam os pacotes, e --theme aceita um. Os arquivos compactados são entrada não confiável: links, caminhos inseguros, bombas de descompressão e checksums inválidos são recusados com erros codificados. Pacotes de tema →

Gravações de terminal v0.18.0

![cast](demo.cast) incorpora uma gravação do asciinema: ela é reproduzida em um player embutido na página HTML, sem script de terceiros e pausada quando há preferência por movimento reduzido; no PDF, no PPTX e no ODP, a tela em um instante escolhido (#t=12.5) é desenhada como texto vetorial. Gravações de terminal →

Animações nas exportações v0.18.0

As transições do Marp viram transições de slide no PPTX e no ODP, e as listas fragmentadas viram fades a cada clique; cada página do PDF recebe uma transição /Trans, e --pdf-fragments escreve uma página por passo de fragmento. Linha de comando →

Vídeo v0.19.0

![video](clip.mp4#t=12.5) incorpora um vídeo: o navegador o reproduz na página HTML, nunca com som por conta própria e pausado quando há preferência por movimento reduzido; o PDF mostra o quadro de capa em um instante escolhido com um link para o arquivo, e o PPTX e o ODP incorporam o vídeo. Vídeo →

SVG animado v0.20.0

Uma imagem SVG que se anima sozinha é reproduzida na página HTML. No PPTX e no ODP cada elemento animado é uma forma com sua própria animação (movimento, rotação, escala, opacidade, cor) que começa com o slide, ou um GIF animado onde estes não conseguem expressá-la; o PDF e as imagens mostram o estado inicial. Uma imagem local bloqueada sem --allow-local-files agora é avisada, não descartada. SVG animado →

A organização

Repositórios

slides v0.20.2

O comando slides e a sua biblioteca: o Markdown do Marp analisado e renderizado em Go, com templates Go e kinds de slide por cima. Lançada como v0.20.2: go install github.com/go-slides/slides/cmd/slides@latest.

docs v0.20

A documentação (Hugo + Hextra), que descreve a v0.20.2: primeiros passos, compatibilidade com o Marp, templates, kinds e a linha de comando. Código-fonte →

vscode v0.5.0

A extensão do VS Code, como o Marp for VS Code é do Marp: apresentações pré-visualizadas na pré-visualização de Markdown do VS Code pelo go-slides compilado para WebAssembly (sem binário, funciona no vscode.dev), rolagem sincronizada com o editor mesmo através de templates, erros no painel Problems, autocompletar de diretivas, kinds e funções de template, uma visão geral e uma visão do apresentador ao lado do editor, exportação por meio do slides, com um PDF acessível e etiquetado. Instale o .vsix anexado à release do GitHub; a publicação no Marketplace e no Open VSX está preparada, mas ainda não foi feita. VS Code →

brand pronto

A marca — um slide em seu suporte, no índigo da família de documentos — e todos os seus formatos: SVG, PNG, JPG, ICO, ICNS, avatar e imagem social.

gitd v0.1.1

slides-gitd, o backend git auto-hospedado do playground do go-slides: as credenciais da forja ficam no servidor, cada usuário é isolado e ele roda atrás do oauth2-proxy. Go puro.

Parte da família de documentos.

Com go-richdoc, go-ooxml, go-tex e go-docutils: documentos lidos, compostos e escritos em Go, sem C em lugar nenhum.

A organização no GitHub →