scrolly
Compile a JSON5 deck into a single, self-contained, scrollable 2D-canvas HTML presentation.
Liked by humans; understood by agents.
Why it's different
- A 2D canvas you fly around, not a linear reel. Slides sit on an integer grid connected by edges; readers zoom out to a deck map and zoom into any slide to scroll through it.
- Scroll-driven keyframe animation. Element properties (position, size, opacity, scale, angle) interpolate as the reader scrolls — no timeline, no autoplay.
- One self-contained HTML file. A default build inlines every
asset into a single
index.htmlwith zero external loads — open it by double-clicking, host it anywhere, email it. - Agent-friendly. The CLI exposes full help, input schemas, deck introspection, and numbered error codes, so agentic coding tools immediately understand how to author and debug scrolly decks.
Installation
pip install scrolly # or: uv tool install scrolly
Quickstart
scrolly init my-deck # scaffold a starter deck
scrolly build my-deck/deck.deck.json --out out --force # compile to one HTML file
open out/index.html # double-click anywhere
A deck is a .deck.json manifest plus one .slide.json per slide (both
parsed as JSON5):
// deck.deck.json
{
title: "My Deck",
slides: [
{ id: "intro", position: [0, 0], source: "slides/intro.slide.json" },
],
edges: [],
}
// slides/intro.slide.json
{
title: "My Deck",
elements: [
{ markdown: "# My Deck\n\nWelcome to your new presentation." },
],
}
Elements
Slides hold elements of six types — markdown, image, image_sequence,
mermaid, html, and iframe — each animatable via scroll-driven
keyframes. See the element reference
for fields and examples.
Learn more
- Documentation — guided walkthrough, concepts, authoring, and the full reference, with a live interactive deck right on the homepage.
- Examples — including the stacked-diffs hero deck.
- Changelog.
License
MIT.
Metadata
Release files for scrolly 0.3.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| scrolly-0.3.5.tar.gz | 1.1 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scrolly-0.3.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.2 MB
Release files / scrolly-0.3.5.tar.gz
| Download URL | scrolly-0.3.5.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cb3a520a0ec83532bbe62f87ba8bca6ce5d8f6df48e13870867e9d5ce9686f47
|
|
BLAKE2b-256 checksum How to use checksums |
da3f3b8b9c7c6c564e6e60216cbfed9b37dbb1cd05917b216bcd94bfc1bbe14d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 12, 2026.
Transparency logRelease files / scrolly-0.3.5-py3-none-any.whl
| Download URL | scrolly-0.3.5-py3-none-any.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
acb0994c3ef0a1e474d825c407b50f4a696231725be41e14d534f81462e22ebb
|
|
BLAKE2b-256 checksum How to use checksums |
d988ee60f8b83076d87c98dcac9688a2d9860521b03536be66368f7cfc7a50ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 12, 2026.
Transparency log