Skip to main content
The shortkit Client SDK delivers production-grade short-form video feeds to your mobile and web applications. It handles video playback, adaptive streaming, engagement tracking, and ad integration while providing extensive customization options.

Capabilities

Video playback

Custom media pipelines with adaptive bitrate streaming, intelligent prefetch, and near-instant playback on swipe.

Feed UI

Configurable vertical or horizontal scrolling feeds with smooth transitions and gesture handling.

Engagement tracking

Automatic collection of impressions, watch time, completions, and interactions for analytics and personalization.

Ad integration

Native in-feed advertising via Google IMA SDK with configurable frequency and styling.

Theming

Full control over colors, fonts, and control styling to match your brand.

Extensibility

Custom overlay components, interaction hooks, and metadata pass-through for deep integration.

Supported platforms

PlatformLanguageDistributionMinimum Version
iOSSwiftSwift Package ManageriOS 14.0+
AndroidKotlinMavenAndroid 7.0+ (API 24)
React NativeTypeScriptnpmRN 0.70+
ExpoTypeScriptnpmExpo SDK 49+
WebTypeScriptnpm, CDNModern browsers

Player architecture

shortkit uses custom media pipelines optimized for short-form video performance:
Built on low-level AVFoundation APIs (AVSampleBufferDisplayLayer, AudioToolbox) rather than AVPlayer. This enables:
  • DASH protocol support - Not available with standard AVPlayer
  • Multi-codec ABR - AV1 + H.264 quality selection
  • Granular buffer control - Precise prefetch and read-ahead management
  • Frame-accurate seeking - Instant scrubber response
This architecture matches what companies like YouTube and Netflix use for their iOS players.

Protocol support

ProtocoliOSAndroidWeb
HLSYesYesYes
DASHYesYesYes
Progressive MP4YesYesYes
For very short content (under 15 seconds), the SDK may use progressive MP4 instead of segmented streaming. The overhead of HLS/DASH segment negotiation can exceed the cost of downloading a small file outright.

Initialization

The SDK follows a consistent initialization pattern across platforms:
shortkit.initialize({
  apiKey: 'pk_live_your_publishable_key',
  config: FeedConfig,
  environment: 'production' | 'staging' | 'development',
  remoteConfigTTL: 300,      // Cache TTL in seconds (default: 5 min)
  remoteConfigTimeout: 2000  // Fetch timeout in ms (default: 2s)
});
Initialization is non-blocking. The feed begins rendering immediately with code-level defaults while remote configuration is fetched in the background.

Post-initialization methods

// Associate user identity for personalization
shortkit.setUserId('user_12345');

// Clear identity on logout (generates new anonymous ID)
shortkit.clearUserId();

Configuration hierarchy

The SDK uses a layered configuration model where each layer overrides the previous:
  1. Code-level config - Passed at initialization, serves as baseline and fallback
  2. Remote config overlay - Fetched from server, contains only overridden fields
  3. A/B variants - Experiment-specific overrides included in remote config
If remote config fetch fails, the SDK gracefully falls back to cached config (if available) or code-level defaults. The feed never blocks waiting for configuration.

Feed rendering

Display the feed using platform-appropriate components:
import shortkit
import SwiftUI

struct VideoTab: View {
    var body: some View {
        ShortkitFeedView()
            .edgesIgnoringSafeArea(.all)
    }
}

Platform guides

Configuration guides