{"id":50908927,"url":"https://github.com/cordx56/slideck","last_synced_at":"2026-06-16T08:01:37.991Z","repository":{"id":359786700,"uuid":"1247497715","full_name":"cordx56/slideck","owner":"cordx56","description":"A slide editor you write in YAML.","archived":false,"fork":false,"pushed_at":"2026-05-30T15:20:05.000Z","size":11482,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T17:11:19.661Z","etag":null,"topics":["deck","slide","web"],"latest_commit_sha":null,"homepage":"https://slideck.56.ax","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cordx56.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-23T11:53:46.000Z","updated_at":"2026-05-30T15:20:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cordx56/slideck","commit_stats":null,"previous_names":["cordx56/slideck"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cordx56/slideck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cordx56%2Fslideck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cordx56%2Fslideck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cordx56%2Fslideck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cordx56%2Fslideck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cordx56","download_url":"https://codeload.github.com/cordx56/slideck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cordx56%2Fslideck/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34396429,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deck","slide","web"],"created_at":"2026-06-16T08:01:34.286Z","updated_at":"2026-06-16T08:01:37.983Z","avatar_url":"https://github.com/cordx56.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eslideck\u003c/h1\u003e\n  \u003cp\u003e\n    \u003cimg src=\"packages/web/public/slideck-ogp.png\"\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\nWrite slides declaratively in YAML and author, edit, present, and export them to\nPDF — entirely in the browser, or headlessly from the command line.\n\nslideck compiles a YAML project through a compiler-style intermediate\nrepresentation so that the **SVG renderer** (used for live preview and\npresentation) and the **PDF renderer** (with embedded, subsetted fonts) consume\nexactly the same layout. What you see in the editor is what you get in the PDF.\n\n## Features\n\n- **Frontend-complete**: the web app needs no server and can be hosted as static\n  files (GitHub Pages, etc.).\n- **Three-layer IR** (HIR -\u003e MIR -\u003e LIR): the SVG and PDF renderers share the\n  same lowered primitives, so layout, line wrapping, and font metrics (via\n  fontkit) match across outputs.\n- **Declarative YAML**: bases (composable layers), variables, absolute\n  positioning, groups, and auto-layout. Themes and overlays are unified into\n  **Bases** (`always: true` applies to every slide, `use:` selects per slide).\n  System variables such as `${slideNumber}` are available.\n- **Bases inheritance**: a base file can `extends:` another.\n- **Colors as variables**: `colors:` are injected into the variable scope and\n  referenced as `${name}`; color fields accept a `${var}` or a literal.\n- **Lists**: `ul` / `ol` with `items` (same shape as a group's children).\n- **Inline Markdown**: bold, italic, inline `code`, ~~strikethrough~~, and links.\n  Links are rendered as real clickable annotations in PDF and `\u003ca\u003e` in SVG.\n- **Inline math**: `$...$` is rendered with MathJax into native vector paths, so\n  formulas render identically in the SVG preview, the exported SVG, and the PDF\n  (no browser or external CSS required at view time).\n- **Fonts**: TrueType embedding with subsetting and ToUnicode (selectable /\n  extractable text in the PDF). TTC collections are supported (`index:`).\n- **Images**: intrinsic size is parsed from the file header (PNG/JPEG/GIF/WebP/\n  BMP), so aspect ratio is correct in every environment, including headless.\n\n## CLI (`@slideck/cli`)\n\nInstall globally:\n\n```bash\nnpm install -g @slideck/cli\n```\n\n```bash\n# Scaffold a new sample project into ./my-deck (defaults to ./my-deck)\nslideck new my-deck\n\n# Open a project on disk in the edit server (a browser opens automatically)\nslideck serve ./my-deck          # defaults to the current directory\nslideck serve ./my-deck --port 4321 --no-open\n\n# Render a YAML project to PDF (and optionally per-slide SVG)\nslideck export ./my-deck/deck.yaml -o out.pdf --svg ./svg-out\n```\n\n`serve` hosts the bundled web editor and saves edits straight to disk over an\nHTTP VFS API + SSE; edits made outside the editor are reflected in the browser as\nwell. Internal state such as the file-tree expansion is kept under `.slideck/`.\n\n## Project structure\n\nA slideck project is a directory:\n\n```\nmy-deck/\n  deck.yaml            # entry: slides\n  theme.yaml           # a base (theme/overlay), one or more\n  overlays/footer.yaml\n  fonts/...            # .ttf / .ttc\n  img/...              # images\n```\n\nRelative paths are resolved from the file that references them.\n\n## Development\n\n```bash\npnpm install\npnpm dev          # web dev server (= pnpm --filter @slideck/web dev)\npnpm test         # all packages (vitest)\npnpm check        # type-check all packages\npnpm build        # build web + cli (the cli bundles the web build)\npnpm build:web    # web only (for static hosting)\n```\n\nThe sample project lives in `packages/web/public/examples/basic/`; pick it from\nthe web app's start screen.\n\n## Deploy (web)\n\n`packages/web/dist/` is fully static. For sub-path hosting, set `VITE_BASE`:\n\n```bash\nVITE_BASE=/slideck/ pnpm --filter @slideck/web build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcordx56%2Fslideck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcordx56%2Fslideck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcordx56%2Fslideck/lists"}