A PowerPoint viewer for your native app
Don't render PPTX on-device or bounce users to an Office viewer. Convert decks server-side into self-contained HTML5 packages, cache them in your app, and show them in a webview — offline, animations intact, no Microsoft anything.
Why a webview beats the alternatives
Rendering the PPTX format natively is an enormous undertaking — shapes, text layout, charts, SmartArt and a full animation model. Embedding Microsoft's online viewer means every view needs a network connection and hands your users' content to a third party. Exporting slides as images throws away animations, selectable text and sharpness on high-DPI screens.
A converted SlideKiln package sidesteps all three: it's real web content — vector shapes, real fonts, the full animation runtime — rendered by the webview your platform already ships. See what survives conversion for the fidelity details.
The integration, end to end
Convert server-side
Your backend POSTs the .pptx (or a source URL) to the SlideKiln API and passes an externalId so results correlate to your content.
Cache the package
On the success webhook, download the zip and store it in your own storage or CDN — it is a plain static folder with no license or runtime tie to SlideKiln.
Render in a webview
The app downloads the package once, unzips it locally, and loads index.html in WKWebView or Android WebView. From then on the deck works offline.
Loading the package in a webview
Packages reference their assets with relative URLs, so they load straight from local storage — no embedded web server needed:
// iOS — WKWebView, package unzipped into packageDir
webView.loadFileURL(
packageDir.appendingPathComponent("index.html"),
allowingReadAccessTo: packageDir
)
// Android — serve the folder through WebViewAssetLoader
val assetLoader = WebViewAssetLoader.Builder()
.addPathHandler("/deck/", WebViewAssetLoader.InternalStoragePathHandler(context, packageDir))
.build()
webView.loadUrl("https://appassets.androidplatform.net/deck/index.html")If assets ever load over HTTP but not from a file URL, use the asset-loader approach — that's a webview file-access quirk, not a package limitation. Publishing decks to the web too? The same package embeds in a website unchanged.
Frequently asked questions
Can users view decks with no network connection?
Yes. The converted package is a folder of static HTML, SVG, CSS and JS with no runtime dependency on SlideKiln — once your app has downloaded and cached it, the deck renders entirely offline in a webview.
Do my users need Microsoft Office or an Office 365 account?
No. Nothing Microsoft is involved at view time: the deck is plain web content rendered by the platform webview. There is also no PowerPoint or LibreOffice in SlideKiln's conversion pipeline — the PPTX file format is parsed directly.
How do I display the package in WKWebView or Android WebView?
Load the package's index.html from local storage: on iOS use WKWebView's loadFileURL(_:allowingReadAccessTo:) pointed at the package folder; on Android serve the folder through WebViewAssetLoader (or load the file URL directly). Assets are referenced with relative URLs, so no web server is required.
Do animations and Morph transitions play inside a webview?
Yes. The animation runtime ships inside the package as ordinary JavaScript, so entrances, emphasis, exits, motion paths and slide transitions — including Morph — play back as authored, with tap-through navigation.
Can my app control playback and know which slide is showing?
Yes. Every package exposes a stable window.SlideKiln API — next(), prev(), goTo(n), current and count — plus slidekiln:ready and slidekiln:slidechange events (and a postMessage channel for iframes). Your host can drive the deck and update a progress bar or sync narration without polling. You can also deep-link to a slide with index.html#3. See the Player API section of the docs.
How do I keep package size down for mobile?
Embedded video is usually the bulk of a package. Each conversion job accepts video options — x264 CRF quality and a maximum resolution cap — so you can transcode media down for mobile bandwidth and storage.
How should my backend hand packages to the app?
Convert via the REST API, receive the HMAC-signed webhook when the job succeeds, download the zip promptly and store it in your own storage or CDN. SlideKiln's download URLs are time-limited and source files are deleted after the retention window (24 hours by default), so the copy your app serves should always be your own.
Decks in your app, working offline.
Convert a .pptx, unzip the package into your app and watch it play in a webview — 2 free conversions a month, no credit card.
Start converting free