Svelte Stockholm · 20 Oct 2026

Slides from the garden

A presentation framework grown inside stanislav.garden

Stanislav Khromov Stanislav Khromov stanislav.garden
Stanislav Khromov

Stanislav Khromov

Software engineer at Schibsted · Stockholm

  • Svelte Ambassador and core team member
  • WordPress core contributor
  • Open-source packages with Svelte and Bun
  • github.com/khromov
  • bsky.app/profile/khromov.se
  • youtube.com/@StanislavKhromov
  • khromov.se/blog

Part one

Templates

Seven layouts and a code slide, a few looks each

Title · meadow

Sunflowers for footlights

Centred, for a talk that opens on one idea

Stanislav Khromov stanislav.garden

Title · card

The green card, full bleed

The home page’s contact card, as a cover

Stanislav Khromov stanislav.garden

Section · sky

Swifts across the top of the stage

Section · sky-image

The swifts again, with a picture

Section · panel

Birches stand at the right edge

Stanislav Khromov

Stanislav Khromov

Software engineer at Schibsted · Stockholm

I build open-source packages and side projects with Svelte, Bun, and friends.

  • github.com/khromov
  • bsky.app/profile/khromov.se
  • youtube.com/@StanislavKhromov
  • khromov.se/blog

Hello

my name is

Stanislav Khromov

Stanislav

Software engineer at Schibsted · Stockholm

  • github.com/khromov
  • bsky.app/profile/khromov.se
  • youtube.com/@StanislavKhromov
  • khromov.se/blog

List · bullets

Bullets printed by hand

  • Every dot is baked on the server
  • Two drums, slightly out of register
  • Builds ink in one at a time

List · numbered

Four steps to a deck

  1. Write a .svelte file One file per deck in src/talks/
  2. Register it Title, event, date and theme in registry.ts
  3. Pick templates Seven layouts, a few presets each
  4. Press P Presenter view, notes and a timer

List · cards

What every deck gets

  • A real stage Scaled to any screen
  • Presenter view Notes, next slide, timer
  • Riso art Cropped for every slide
Stanislav Khromov

Split · photo

Half the stage for a picture

A rounded print sits on the art, served through a Mochi image transform at slide size.

Runner beans picked, kg246JunJulAug4.8 kgSepOct
printed on the server

Split · framed

A print with its plates showing

Two plates sit behind the frame, the way a riso proof misses its marks.

Stanislav Khromov

Split · garden

A face beside the point

  • A round medallion on the left
  • Points build one per Next
  • Leave out the image for text only
Write slides the way you write pages.
Statement · quote
Every slide is one more print run.
Statement · card

Questions?

stanislav.garden/talks/framework-tour

@khromov

Part two

Code

Highlighted at build time, morphed in the browser

Code · panel

Runes, one at a time

Counter.svelte
<script lang="ts">
let count = 0;
</script>

<button>{count}</button>

Plain markup, rendered once

$state makes it reactive

$derived follows along

$effect reaches outside

Code · full Islands, not apps
<script lang="ts">
import LatestPosts from './LatestPosts.svelte';
import ThemeToggle from './ThemeToggle.svelte';
</script>

<h1>stanislav.garden</h1>
<LatestPosts />
<ThemeToggle />

Server-rendered, no JavaScript

Slow data streams in after first paint

…or only once it scrolls into view

Hydrate only what people click

Code · split

Two routes per deck

  1. One page, one route
  2. An index of talks
  3. Two routes for every deck
  4. A handle inlines the boot scripts
index.ts
await Mochi.serve({
routes: {
'/': Mochi.page('./src/Home.svelte'),
},
});

Writing a deck

This deck, in miniature

my-talk.svelte
<script lang="ts">
import { Deck, Title } from '../components/talks';
</script>

<Deck>
<Title />
</Deck>

A deck is one .svelte file

Templates are slides

Code is highlighted at build time

Notes only reach the presenter

03

Beyond templates

Freeform slides, riso and the presenter

Freeform slide

Anything can build

Ink lands with a misregistered ghost.

Rise lifts in from below.

Fade is the default.

None simply appears.

Transitions

Slip, fade or cut

Neighbours slip along their own misregistration. This slide fades in instead, and C turns every move into a cut.

Keys

Driving the deck

  • → or Space Next build, then the next slide
  • O Overview of every slide
  • T Flip the theme in both windows
  • P then F Presenter, then fullscreen

Before the talk

Presenting checklist

  1. Open the deck, then P The presenter opens in a popup
  2. Warm all Fonts and images, ready offline
  3. F on the audience Fullscreen on the projector

Part four

Live

Four ways to hear back from the room, on every phone

Poll

Which template will you reach for first?

  1. Title
  2. Code
  3. Statement
  4. Split

Join on your phone

Poll

Where does your JavaScript run?

  1. Node
  2. Bun
  3. Deno
  4. Workers
  5. Browser only

Join on your phone

Thumbs

Tabs or spaces?

Spaces
Tabs

Join on your phone

Thumbs

Would you deploy on a Friday?

Ship it
Never

Join on your phone

Word cloud

What grows in your garden?

Join on your phone

Ask anything about the framework

Questions land here as they come in.

Join on your phone

Thank you

  • github.com/khromov
  • bsky.app/profile/khromov.se
  • youtube.com/@StanislavKhromov
  • khromov.se/blog

stanislav.garden/talks/framework-tour