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.
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.
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.
--- 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.
![bg], seus tamanhos e filtros, fundos divididos e as palavras-chave de imagem que o Marp entende.
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.
default, gaia e uncover, selecionados com theme: como no Marp.
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.
{{ .title }} lê o front matter, e o mapeamento data: dele guarda o que mais a apresentação precisar.
Um {{ range }} que emite --- é um gerador de slides: um slide por item, por palestrante, por release.
{{ page }} e {{ total }} só são conhecidos depois que a apresentação é dividida, e são preenchidos nesse momento.
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.
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.
title, section, content e blank, cada um redefinível.
No kinds: do front matter, ou em um arquivo YAML de kinds que todas as apresentações de uma equipe nomeiam.
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.
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.
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.
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.
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 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.
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.
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í.
slides notes imprime as notas do apresentador; slides kinds e slides themes listam o que uma apresentação pode nomear.
Um arquivo de configuração para uma pasta de apresentações: kinds e temas compartilhados, dados de template, opções de HTML e idioma.
--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, 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, 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.
$…$ e $$…$$ compostos pelo go-tex, código delimitado destacado pelo go-rouge — na página HTML, nas imagens e no PDF.
--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).
# <!-- fit --> Title ocupa toda a largura do slide em uma linha, na página e em todas as exportações.
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 →
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 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 →
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.
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.
--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.
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 →
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 →
```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 →
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 →
 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 →
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 →
 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 →
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 →
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.
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 →
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 →
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.
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.
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 →