<!DOCTYPE html>
<html lang="en-US" data-locale="en-US">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">

 <!-- ==== SEO: title/description/canonical/robots, populated per-show at build time (SSR) and refreshed by JS ==== -->
 <title data-ssr-title>Revolution (2012, 2014) | TV Show Streaming Guide</title>
 <meta name="description" data-ssr-desc content="Revolution (2012, 2014), full streaming, rent and buy options, cast and trailers. Take back the power.">
 <meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
 <meta name="theme-color" content="#1a6167">
 <style>:root{--ws-accent:#1a6167;}</style>
 <link rel="canonical" data-ssr-canonical href="https://wikisofa.ch/en-US/tv/revolution-2012/">

 <!-- ==== Open Graph (video.tv_show) ==== -->
 <meta property="og:type" content="video.tv_show">
 <meta property="og:site_name" content="wikisofa.ch">
 <meta property="og:locale" content="en_US">
 <meta property="og:title" data-ssr-og-title content="Revolution (2012, 2014)">
 <meta property="og:description" data-ssr-og-desc content="Revolution (2012, 2014), full streaming, rent and buy options, cast and trailers. Take back the power.">
 <meta property="og:url" data-ssr-og-url content="https://wikisofa.ch/en-US/tv/revolution-2012/">
 <meta property="og:image" data-ssr-og-image content="https://wikisofa.ch/assets/images/backdrops/cQANaoaCLLwC6BVdOr02t6yO9CF.jpg">
 <meta property="og:image:width" content="1280">
 <meta property="og:image:height" content="720">
 <meta property="og:image:alt" data-ssr-og-image-alt content="Revolution backdrop">

 <!-- ==== Twitter Card ==== -->
 <meta name="twitter:card" content="summary_large_image">
 <meta name="twitter:site" content="@wikisofa">
 <meta name="twitter:title" data-ssr-tw-title content="Revolution (2012, 2014)">
 <meta name="twitter:description" data-ssr-tw-desc content="Revolution (2012, 2014), full streaming, rent and buy options, cast and trailers. Take back the power.">
 <meta name="twitter:image" data-ssr-tw-image content="https://wikisofa.ch/assets/images/backdrops/cQANaoaCLLwC6BVdOr02t6yO9CF.jpg">

 <!-- ==== Hreflang alternates (populated by SSR) ==== -->
   <link rel="alternate" hreflang="en-US" href="https://wikisofa.ch/en-US/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-GB" href="https://wikisofa.ch/en-GB/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-CA" href="https://wikisofa.ch/en-CA/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-AU" href="https://wikisofa.ch/en-AU/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-IE" href="https://wikisofa.ch/en-IE/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-ZA" href="https://wikisofa.ch/en-ZA/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-NZ" href="https://wikisofa.ch/en-NZ/tv/revolution-2012/">
  <link rel="alternate" hreflang="en-CH" href="https://wikisofa.ch/en-CH/tv/revolution-2012/">
  <link rel="alternate" hreflang="en" href="https://wikisofa.ch/en-global/tv/revolution-2012/">
  <link rel="alternate" hreflang="x-default" href="https://wikisofa.ch/en-global/tv/revolution-2012/">

 <!-- ==== Performance hints ==== -->
 <link rel="icon" type="image/svg+xml" href="/assets/logos/favicon.svg">
 <link rel="apple-touch-icon" href="/assets/logos/apple-touch-icon.png">
 <link rel="manifest" href="/manifest.webmanifest">
 <link rel="preconnect" href="https://fonts.googleapis.com">
 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 <link rel="dns-prefetch" href="https://i.ytimg.com">
 <link rel="dns-prefetch" href="https://image.tmdb.org">
 <link rel="dns-prefetch" href="https://www.youtube.com">
 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;700;800;900&display=swap" rel="stylesheet">
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css">
 <link rel="stylesheet" href="/assets/css/main.css?v=20260515f">

 <!-- ==== Structured data (JSON-LD), TVSeries / Breadcrumb / FAQ, SSR-injected per show ==== -->
   <script type="application/ld+json">{"@context":"https://schema.org","@type":"TVSeries","name":"Revolution","description":"One day, electricity just stopped working and the world was suddenly thrust back into the dark ages. Now, 15 years later, a young woman's life is dramatically changed when a local militia arrives and kills her father, who mysteriously—and unbeknownst to her—had something to do with the blackout. An unlikely group sets out off on a daring journey to find answers about the past in the hopes of reclaiming the future.","image":"https://wikisofa.ch/assets/images/backdrops/cQANaoaCLLwC6BVdOr02t6yO9CF.jpg","datePublished":"2012-09-17","genre":["Sci-Fi & Fantasy","Drama"],"inLanguage":"English","countryOfOrigin":{"@type":"Country","name":"United States of America"},"numberOfSeasons":2,"numberOfEpisodes":42,"contentRating":"TV-14","actor":[{"@type":"PerformanceRole","characterName":"Miles Matheson","actor":{"@type":"Person","name":"Billy Burke"}},{"@type":"PerformanceRole","characterName":"Charlotte Matheson","actor":{"@type":"Person","name":"Tracy Spiridakos"}},{"@type":"PerformanceRole","characterName":"Tom Neville","actor":{"@type":"Person","name":"Giancarlo Esposito"}},{"@type":"PerformanceRole","characterName":"Aaron Pittman","actor":{"@type":"Person","name":"Zak Orth"}},{"@type":"PerformanceRole","characterName":"Sebastian Monroe","actor":{"@type":"Person","name":"David Lyons"}},{"@type":"PerformanceRole","characterName":"Nate Walker / Jason Neville","actor":{"@type":"Person","name":"J. D. Pardo"}},{"@type":"PerformanceRole","characterName":"Gene Porter","actor":{"@type":"Person","name":"Stephen Collins"}},{"@type":"PerformanceRole","characterName":"Rachel Matheson","actor":{"@type":"Person","name":"Elizabeth Mitchell"}}],"creator":[{"@type":"Person","name":"Eric Kripke"}],"productionCompany":[{"@type":"Organization","name":"Kripke Enterprises"}],"keywords":"blackout, nanotechnology, future, post-apocalyptic future, no electricity","aggregateRating":{"@type":"AggregateRating","ratingValue":6.4,"ratingCount":609,"bestRating":10,"worstRating":0},"trailer":{"@type":"VideoObject","name":"Revolution, Official Trailer","description":"Official trailer for Revolution","thumbnailUrl":"https://img.youtube.com/vi/c3cMGHC-4ZY/hqdefault.jpg","embedUrl":"https://www.youtube.com/embed/c3cMGHC-4ZY","contentUrl":"https://www.youtube.com/watch?v=c3cMGHC-4ZY"},"sameAs":["https://www.imdb.com/title/tt2070791/","https://www.wikidata.org/wiki/Q289592","https://en.wikipedia.org/wiki/Revolution_(TV_series)"]}</script>
  <script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://wikisofa.ch/"},{"@type":"ListItem","position":2,"name":"TV Shows","item":"https://wikisofa.ch/tv/"},{"@type":"ListItem","position":3,"name":"Revolution","item":"https://wikisofa.ch/en-US/tv/revolution-2012/"}]}</script>

 <!-- Google Analytics -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-2C2JN80EY4"></script>
 <script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-2C2JN80EY4');</script>
 <!-- Microsoft Clarity -->
 <script>(function(c,l,a,r,i,t,y){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);})(window,document,"clarity","script","wr8rbkq2gd");</script>
</head>
<body>
<div id="ws-loader" aria-hidden="true">
  <img class="ws-loader-logo" src="/assets/logos/wikisofa-logo-dark.png" alt="WikiSofa" width="200" height="38">
  <div class="ws-loader-bar-track"><div class="ws-loader-bar"></div></div>
</div>

 <div id="ws-header"></div>

 <main class="container ws-media-page" id="ws-tv-page">

 <div class="ws-media-backdrop"></div>

 <!-- Error state (hidden by default) -->
 <div class="ws-error-state">
 <h1 data-i18n="tv.error.title">TV show not found</h1>
 <p class="text-muted-ws" style="font-size:1.05rem;max-width:480px">This show isn't in our catalog yet, or the link is broken. Try browsing or searching.</p>
 <div class="d-flex gap-2 flex-wrap mt-2">
 <a href="/" class="ws-btn ws-btn-primary">Home</a>
 <a href="/tv/" class="ws-btn ws-btn-outline">Browse TV</a>
 <a href="/search" class="ws-btn ws-btn-outline">Search</a>
 </div>
 </div>

 <nav class="ws-breadcrumbs" aria-label="Breadcrumb">
 <a href="/" data-i18n="breadcrumb.home">Home</a><span class="sep"></span>
 <a href="/tv/" data-i18n="breadcrumb.tv">TV Shows</a><span class="sep"></span>
 <span data-tv-crumb>Loading...</span>
 </nav>

 <!-- ==== HERO ==== -->
 <div class="ws-media-header">
 <div class="poster" data-tv-poster></div>
 <div class="ws-media-info">
 <img class="ws-title-logo" data-tv-title-logo alt="" hidden>
 <div class="ws-kicker" data-tv-kicker>TV SHOW</div>
 <h1 class="ws-media-title" data-tv-title>Loading...</h1>
 <div class="ws-title-rating" data-tv-title-rating hidden></div>
 <p class="ws-original-title" data-tv-original-title hidden></p>
 <p class="ws-subtitle" data-tv-tagline hidden></p>

 <div class="ws-hero-stats">
 <div class="ws-ratings-panel" data-tv-ratings hidden></div>
 <div class="ws-chart-line" data-tv-chart hidden></div>
 </div>

 <div class="meta-row" data-tv-meta></div>
 <p style="font-size:1.05rem;line-height:1.7" data-tv-overview></p>
 <p class="text-subtle mt-2" style="font-size:.85rem" data-tv-creators></p>

 <div class="d-flex gap-2 flex-wrap mt-3 ws-hero-actions">
 <button class="ws-btn ws-btn-primary" id="btn-trailer" disabled data-i18n="action.watch_trailer">▶ Watch trailer</button>
 <button class="ws-btn ws-btn-outline" id="btn-watchlist"><i class="fa-regular fa-heart"></i> Watchlist</button>
 </div>
 </div>
 </div>

 <div class="ws-detail-grid">

 <div class="ws-detail-main">

 <!-- Sticky in-page tabs (mirrors actual section order on the page) -->
 <div class="ws-page-tabs" data-page-tabs hidden>
 <div class="ws-page-tabs-inner">
 <button class="ws-tab" data-tab="sec-seasons" type="button">Seasons</button>
 <button class="ws-tab" data-tab="sec-details" type="button">Details</button>
 <button class="ws-tab" data-tab="sec-watch" type="button" data-i18n="movie.tab.where_to_watch">Where to watch</button>
 <button class="ws-tab" data-tab="sec-cast" type="button" data-i18n="movie.tab.cast">Cast</button>
 <button class="ws-tab" data-tab="sec-trailers" type="button" data-i18n="movie.tab.trailers">Trailers</button>
 <button class="ws-tab" data-tab="sec-synopsis" type="button">About</button>
 <button class="ws-tab" data-tab="sec-soundtrack" type="button">Original soundtrack</button>
 <button class="ws-tab" data-tab="sec-quotes" type="button">Quotes</button>
<button class="ws-tab" data-tab="sec-similar" type="button">Similar</button>
 <button class="ws-tab" data-tab="sec-faq" type="button">FAQ</button>
 </div>
 </div>

 <!-- Seasons grid -->
 <section class="ws-section" id="sec-seasons">
 <div class="ws-section-header"><h2 data-i18n="tv.section.seasons">Seasons</h2></div>
 <div class="ws-seasons-grid" data-tv-seasons></div>
 </section>

 <!-- Details: country, language, runtime, certs, network, status -->
 <section class="ws-section ws-section-sm" id="sec-details">
 <div class="ws-section-header"><h2 data-tv-details-title>Details</h2></div>
 <div class="ws-details-layout">
 <aside class="ws-details-aside">
 <div class="ws-trailer-hero" data-tv-trailer-hero hidden></div>
 </aside>
 <div class="ws-details-main">
 <div class="ws-info-grid" data-tv-details></div>
 </div>
 </div>
 </section>

 <!-- Where to watch -->
 <section class="ws-offer-section" id="sec-watch">
 <div class="ws-watch-head">
 <h3>Where to watch <span class="ws-watch-region" data-watch-region-label>United States</span></h3>
 </div>
 <div class="ws-watch-chips" data-watch-chips></div>
 <div data-tv-providers></div>
 </section>

 <!-- Cast (Crew + networks merged in below, no separate h2) -->
 <section class="ws-section ws-section-sm" id="sec-cast">
 <div class="ws-section-header"><h2 data-i18n="tv.section.cast">Cast</h2></div>
 <div class="ws-cast-grid" data-tv-cast></div>
 <div class="ws-crew-grid" data-tv-crew-grid style="margin-top:1.25rem"></div>
 <div class="d-flex gap-2 flex-wrap" data-tv-networks style="margin-top:1.25rem"></div>
 </section>

 <!-- Trailers / clips / featurettes -->
 <section class="ws-section ws-section-sm" id="sec-trailers">
 <div class="ws-section-header"><h2>Videos and clips</h2></div>
 <div class="ws-trailer-grid" data-tv-trailers></div>
 </section>

 <!-- Synopsis (description + awards + alt titles + external/featured-in pills) -->
 <section class="ws-section ws-section-sm" id="sec-synopsis">
 <div class="ws-section-header"><h2 data-tv-synopsis-title>About</h2></div>
 <div data-tv-synopsis></div>
 <h3 class="ws-subheading" data-tv-awards-heading hidden>Awards &amp; recognition</h3>
 <div data-tv-awards></div>
 <h3 class="ws-subheading" data-tv-alt-titles-heading hidden>Also known as</h3>
 <div class="ws-alt-titles" data-tv-alt-titles></div>
 <p class="ws-source-attr" data-tv-source hidden></p>
 <div class="d-flex gap-2 flex-wrap" data-tv-external style="margin-top:1rem"></div>
 </section>

 <!-- Soundtrack (iTunes) -->
 <section class="ws-section ws-section-sm" id="sec-soundtrack" hidden>
 <div class="ws-section-header"><h2>Original soundtrack</h2></div>
 <div class="ws-soundtrack-card" data-tv-soundtrack></div>
 </section>

 <!-- Famous quotes (Wikiquote) -->
 <section class="ws-section ws-section-sm" id="sec-quotes" hidden>
 <div class="ws-section-header"><h2>Famous quotes</h2></div>
 <div class="ws-quotes" data-tv-quotes></div>
 </section>

 <!-- Themes / keywords -->
 <section class="ws-section ws-section-sm" hidden>
 <div class="ws-section-header"><h2>Themes &amp; keywords</h2></div>
 <div class="d-flex gap-2 flex-wrap" data-tv-keywords></div>
 </section>

 <!-- Recommendations -->
 <section class="ws-section ws-section-sm" id="sec-recommendations" hidden>
 <div class="ws-section-header"><h2>People who watched this also liked</h2></div>
 <div class="ws-scroller" data-tv-recommendations></div>
 </section>

 <!-- People who liked X also liked, genre-based grid with Load more -->
 <section class="ws-section ws-section-sm" id="sec-more-by-genre" hidden>
 <div class="ws-section-header"><h2 data-tv-more-genre-title>More shows</h2></div>
 <div class="ws-load-more-grid" data-tv-more-by-genre></div>
 <button class="ws-btn ws-btn-outline ws-load-more-btn" data-load-more-target="data-tv-more-by-genre" hidden>Load more</button>
 </section>

 <!-- More TV shows with the lead actor -->
 <section class="ws-section ws-section-sm" id="sec-by-actor-1" hidden>
 <div class="ws-section-header"><h2 data-tv-by-actor-1-title>More TV shows with this actor</h2></div>
 <div class="ws-load-more-grid" data-tv-by-actor-1></div>
 <button class="ws-btn ws-btn-outline ws-load-more-btn" data-load-more-target="data-tv-by-actor-1" hidden>Load more</button>
 </section>

 <!-- Hidden gems -->
 <section class="ws-section ws-section-sm" id="sec-hidden-gems" hidden>
 <div class="ws-section-header"><h2 data-tv-hidden-gems-title>Hidden gems</h2></div>
 <div class="ws-load-more-grid" data-tv-hidden-gems></div>
 <button class="ws-btn ws-btn-outline ws-load-more-btn" data-load-more-target="data-tv-hidden-gems" hidden>Load more</button>
 </section>

 <!-- More from {Co-star} -->
 <section class="ws-section ws-section-sm" id="sec-by-actor-2" hidden>
 <div class="ws-section-header"><h2 data-tv-by-actor-2-title>More from this actor</h2></div>
 <div class="ws-load-more-grid" data-tv-by-actor-2></div>
 <button class="ws-btn ws-btn-outline ws-load-more-btn" data-load-more-target="data-tv-by-actor-2" hidden>Load more</button>
 </section>

 <!-- Free to watch -->
 <section class="ws-section ws-section-sm" id="sec-free-to-watch" hidden>
 <div class="ws-section-header"><h2 data-tv-free-title>Free to watch</h2></div>
 <div class="ws-load-more-grid" data-tv-free-to-watch></div>
 <button class="ws-btn ws-btn-outline ws-load-more-btn" data-load-more-target="data-tv-free-to-watch" hidden>Load more</button>
 </section>

 <!-- Similar — last in the recommendation block -->
 <section class="ws-section ws-section-sm" id="sec-similar">
 <div class="ws-section-header"><h2>Similar shows</h2></div>
 <div class="ws-scroller" data-tv-similar></div>
 </section>

 <!-- FAQ (moved above the Top 5 footer lists) -->
 <section class="ws-section ws-section-sm" id="sec-faq">
 <div class="ws-section-header"><h2>Frequently asked questions</h2></div>
 <div class="ws-faq-list" data-tv-faq></div>
 </section>

 <!-- Top 5 footer (lists) -->
 <section class="ws-footer-tops" data-footer-tops hidden>
 <div class="ws-footer-tops-grid">
 <div data-footer-top-movies></div>
 <div data-footer-top-genre></div>
 <div data-footer-top-providers></div>
 </div>
 </section>

 <!-- Bonus content (combined: book tie-ins + HN discussions; no Internet Archive on TV) -->
 <section class="ws-section ws-section-sm" id="sec-bonus" hidden>
 <div class="ws-section-header"><h2>Bonus content</h2></div>
 <h3 class="ws-subheading" data-tv-books-heading hidden>Read the book</h3>
 <div class="ws-books-grid" data-tv-books></div>
 <h3 class="ws-subheading" data-tv-discussions-heading hidden>What people are saying</h3>
 <div class="ws-discussions" data-tv-discussions></div>
 </section>

 <!-- Share row -->
 <section class="ws-section ws-section-sm" id="sec-share">
 <div class="ws-share-row">
 <button class="ws-btn ws-btn-outline" id="btn-share"><i class="fa-solid fa-share-nodes"></i> Share this page</button>
 </div>
 </section>

 <!-- Catch-all CTA: take visitors who landed on this title back to the catalog. -->
 <div class="ws-browse-all-wrap">
 <a href="/browse/" class="ws-btn ws-btn-primary ws-browse-all-cta" data-nav="browse">Browse all movies &amp; TV shows</a>
 </div>

 </div>

 <aside class="ws-detail-sidebar" data-tv-sidebar>
 <!-- Populated by data.js renderTvShowSidebar() -->
 </aside>

 </div>

 </main>

 <div id="ws-footer"></div>

 <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
 <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
 <script src="/assets/js/i18n.js?v=20260515f"></script>
 <script src="/assets/js/main.js?v=20260515f"></script>
 <script src="/assets/js/data.js?v=20260515f"></script>
 <script>
 document.addEventListener('DOMContentLoaded', async () => {
 const params = new URLSearchParams(location.search);
 let id = params.get('id');
 const slug = params.get('slug');

 async function resolveId() {
 if (id) return id;
 if (slug) {
 const idx = await WSData.loadTvIndex();
 const found = idx.find(s => s.slug === slug);
 if (found) return found.id;
 }
 const m = location.pathname.match(/\/(?:[a-z]{2}-[a-z]{2}\/)?tv\/([^/]+)\/?$/);
 if (m) {
 const idx = await WSData.loadTvIndex();
 const found = idx.find(x => x.slug === m[1]);
 if (found) return found.id;
 }
 return null;
 }

 function showErrorState() {
 document.getElementById('ws-tv-page').classList.add('error');
 }

 const tvId = await resolveId();
 if (!tvId) { showErrorState(); return; }

 const show = await WSData.loadTvShow(tvId);
 if (!show) { showErrorState(); return; }

 WSData.renderTvShow(show);
 wsHideLoader();

 const trailerBtn = document.getElementById('btn-trailer');
 if (trailerBtn) {
 if (show.trailer_youtube_id) {
 trailerBtn.disabled = false;
 trailerBtn.hidden = false;
 trailerBtn.addEventListener('click', () => WSData.openTrailerModal(show.trailer_youtube_id));
 } else {
 trailerBtn.hidden = true;
 }
 }

 const wlBtn = document.getElementById('btn-watchlist');
 function syncWatchlistBtn() {
 const inList = WSData.isInWatchlist(show.id);
 wlBtn.innerHTML = inList
 ? '<i class="fa-solid fa-heart"></i> ' + WSI18n.t('action.watchlist_added')
 : '<i class="fa-regular fa-heart"></i> ' + WSI18n.t('action.watchlist');
 wlBtn.classList.toggle('ws-btn-primary', inList);
 wlBtn.classList.toggle('ws-btn-outline', !inList);
 }
 syncWatchlistBtn();
 wlBtn.addEventListener('click', () => {
 const added = WSData.toggleWatchlist(show.id);
 WSData.showToast(WSI18n.t(added ? 'toast.added_to_watchlist' : 'toast.removed_from_watchlist'));
 syncWatchlistBtn();
 });

 const shareBtn = document.getElementById('btn-share');
 if (shareBtn) {
 shareBtn.addEventListener('click', async () => {
 const data = { title: show.title, text: show.tagline || (show.overview || '').slice(0, 100), url: location.href };
 if (navigator.share) {
 try { await navigator.share(data); } catch {}
 } else {
 try { await navigator.clipboard.writeText(location.href); WSData.showToast(WSI18n.t('toast.link_copied_plain')); }
 catch { WSData.showToast(WSI18n.t('toast.share_unavailable')); }
 }
 });
 }
 });
 </script>
</body>
</html>
