Opinion is a bug.
Data is the fix.
Pit two versions against each other. Watch real users pick the winner. Ship the result. In hours, not quarters.
1import { Split } from 'split-sdk'23const client = Split.init({4 apiKey: 'sk_live_••••••••••••',5 environment: 'production'6})78const variant = await client.getVariant(9 'checkout_button_color', { userId }10)1112// variant → "teal" | "orange" // 50/50 split
One snippet. Unlimited experiments.
Browse what teams are testing.
Hover any card to see live results. Every archetype runs in minutes.
Headline Duel
Which headline gets more clicks? Test messaging without a redesign.
CTA Color Showdown
Green vs orange. One word, two colors, real conversion difference.
Pricing Table Swap
Monthly-first vs annual-first. Where you anchor changes what people pick.
Onboarding Flow Fork
Guided wizard vs blank canvas. Activation rates tell the story.
Checkout Flow Test
One-page checkout vs multi-step. Cart abandonment drops when friction does.
Social Proof Placement
Logo wall above fold vs testimonials inline. Trust signals have optimal positions.
Works where your stack lives.
Hover to see the exact code for your platform. Copy it. Ship it.
Next.js
App Router & Pages Router. Works with Server and Client Components.
// app/page.tsximport { getVariant } from 'split-sdk/server';export default async function Page() {const variant = await getVariant('hero_headline', { userId })return <Hero variant={variant} />}
Shopify
Theme app extensions. Test product pages, cart flows, checkout.
// theme.liquid{% assign variant = split.get_variantexperiment: 'product_page_layout'user_id: customer.id%}{% if variant == 'grid' %}{% render 'product-grid' %}{% else %}{% render 'product-list' %}{% endif %}
Ruby on Rails
ActiveRecord integration. Variant assignment persisted per user.
# app/controllers/home_controller.rbclass HomeController < ApplicationControllerdef index@variant = Split.get_variant('pricing_table_order',current_user.id)endend
Flutter
Dart SDK for iOS & Android. Remote config with instant rollout.
// lib/main.dartfinal variant = await SplitClient.instance.getVariant(experimentKey: 'onboarding_flow',userId: user.id,);if (variant == 'guided') {Navigator.push(context,GuidedOnboarding.route());}
React
useExperiment hook. Works with any React meta-framework.
// components/PricingCTA.tsximport { useExperiment } from 'split-sdk/react';export function PricingCTA() {const { variant } = useExperiment('cta_button_text')return (<Button>{variant === 'a'? 'Start free trial': 'Get started free'}</Button>)}
Python
Django & FastAPI support. Works in any Python 3.8+ environment.
# views.pyfrom split_sdk import SplitClientclient = SplitClient(api_key=API_KEY)def checkout_view(request):variant = client.get_variant('checkout_flow',user_id=request.user.id)template = f'checkout_{variant}.html'return render(request, template)
Data replaced the argument.
Growth leads, e-commerce managers, and solo founders all run the same playbook: form a hypothesis, ship a test, let users decide.
“We killed 3 months of debate with one weekend of data. Split paid for itself in the first experiment.”
Your next experiment
is 8 minutes away.
Install the SDK, define two variants, and watch real users decide. No design tools, no analyst, no committee. Just a clear answer.