Android-Launcher-Comparison.../index.html
copilot-swe-agent[bot] 23279218f8 Address review notes
Co-authored-by: diluteoxygen <82773456+diluteoxygen@users.noreply.github.com>
2026-02-12 07:39:36 +00:00

737 lines
45 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Android Launcher Comparison Table</title>
<link rel="icon" href="App Icons/Icon.png" type="image/png">
<style>
/* ── Reset & Base ──────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0f1117;
--surface: #181a20;
--surface2: #1e2028;
--border: #2a2d38;
--text: #e4e6ed;
--text2: #9a9eb2;
--accent: #6c8cff;
--accent-dim:#3b4f8a;
--green: #34d399;
--yellow: #fbbf24;
--red: #f87171;
--radius: 10px;
--shadow: 0 2px 12px rgba(0,0,0,.35);
}
html { scroll-behavior: smooth; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
}
/* ── Header ────────────────────────────────────────── */
.hero {
text-align: center;
padding: 3.5rem 1.5rem 2rem;
border-bottom: 1px solid var(--border);
}
.hero h1 {
font-size: clamp(1.6rem, 4vw, 2.6rem);
font-weight: 700;
letter-spacing: -.02em;
color: #fff;
margin-bottom: .5rem;
}
.hero h1 .emoji { margin-right: .35em; }
.hero p {
color: var(--text2);
max-width: 640px;
margin: 0 auto;
font-size: .95rem;
}
.hero .updated {
display: inline-block;
margin-top: .75rem;
background: var(--surface2);
border: 1px solid var(--border);
padding: .3rem .85rem;
border-radius: 20px;
font-size: .8rem;
color: var(--text2);
}
/* ── Toolbar (search + filters) ────────────────────── */
.toolbar {
max-width: 1400px;
margin: 0 auto;
padding: 1.25rem 1.5rem;
display: flex;
flex-wrap: wrap;
gap: .75rem;
align-items: center;
}
.search-box {
flex: 1 1 260px;
position: relative;
}
.search-box svg {
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
width: 18px;
height: 18px;
color: var(--text2);
}
.search-box input {
width: 100%;
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: .6rem .75rem .6rem 2.5rem;
color: var(--text);
font-size: .9rem;
outline: none;
transition: border .2s;
}
.search-box input::placeholder { color: var(--text2); }
.search-box input:focus { border-color: var(--accent); }
.filter-select {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: .55rem .75rem;
color: var(--text);
font-size: .85rem;
outline: none;
cursor: pointer;
transition: border .2s;
-webkit-appearance: none;
appearance: none;
min-width: 140px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%239a9eb2' viewBox='0 0 16 16'%3E%3Cpath d='M1.5 5.5L8 12l6.5-6.5'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 10px center;
padding-right: 30px;
}
.filter-select:focus { border-color: var(--accent); }
.stats {
font-size: .8rem;
color: var(--text2);
margin-left: auto;
white-space: nowrap;
}
/* ── Table wrapper ─────────────────────────────────── */
.table-wrap {
max-width: 1400px;
margin: 0 auto;
padding: 0 1.5rem 2rem;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
/* ── Table ─────────────────────────────────────────── */
table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
font-size: .85rem;
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
thead th {
position: sticky;
top: 0;
z-index: 2;
background: var(--surface2);
padding: .7rem .65rem;
text-align: left;
font-weight: 600;
color: var(--text2);
font-size: .78rem;
text-transform: uppercase;
letter-spacing: .04em;
border-bottom: 2px solid var(--border);
cursor: pointer;
user-select: none;
white-space: nowrap;
transition: color .15s;
}
thead th:hover { color: var(--accent); }
thead th .sort-arrow {
display: inline-block;
margin-left: 4px;
opacity: .35;
font-size: .7rem;
}
thead th.sorted .sort-arrow { opacity: 1; color: var(--accent); }
tbody tr {
transition: background .12s;
}
tbody tr:hover { background: var(--surface2); }
tbody td {
padding: .6rem .65rem;
border-bottom: 1px solid var(--border);
white-space: nowrap;
vertical-align: middle;
}
tbody tr:last-child td { border-bottom: none; }
/* name cell */
.name-cell {
display: flex;
align-items: center;
gap: .55rem;
min-width: 200px;
}
.name-cell img {
width: 28px;
height: 28px;
border-radius: 7px;
object-fit: cover;
flex-shrink: 0;
background: var(--surface);
}
.name-cell span {
font-weight: 600;
color: #fff;
}
/* badges */
.badge {
display: inline-block;
padding: .15rem .55rem;
border-radius: 6px;
font-size: .75rem;
font-weight: 600;
line-height: 1.5;
}
.badge-free { background: rgba(52,211,153,.12); color: var(--green); }
.badge-freemium { background: rgba(108,140,255,.12); color: var(--accent); }
.badge-paid { background: rgba(251,191,36,.12); color: var(--yellow); }
.badge-trialware { background: rgba(248,113,113,.12); color: var(--red); }
.ads-none { color: var(--green); }
.ads-mild { color: var(--yellow); }
.ads-excessive { color: var(--red); }
.ads-unknown { color: var(--text2); }
.star { color: var(--yellow); letter-spacing: 1px; }
.dead { color: var(--text2); }
.code-open { color: var(--green); }
.code-closed { color: var(--text2); }
.code-partial { color: var(--yellow); }
.link-btn {
display: inline-flex;
align-items: center;
gap: 4px;
padding: .2rem .55rem;
border-radius: 6px;
font-size: .75rem;
font-weight: 500;
text-decoration: none;
color: var(--accent);
background: rgba(108,140,255,.08);
border: 1px solid rgba(108,140,255,.18);
transition: background .15s, border-color .15s;
}
.link-btn:hover {
background: rgba(108,140,255,.18);
border-color: rgba(108,140,255,.35);
}
.privacy-link {
color: var(--text2);
text-decoration: none;
font-size: .78rem;
transition: color .15s;
}
.privacy-link:hover { color: var(--accent); }
/* ── Legend ─────────────────────────────────────────── */
.legend-section {
max-width: 1400px;
margin: 0 auto;
padding: 1.5rem 1.5rem 3rem;
}
.legend-section h2 {
font-size: 1.15rem;
font-weight: 700;
margin-bottom: 1rem;
color: #fff;
}
.legend-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: .5rem .75rem;
}
.legend-item {
display: flex;
align-items: center;
gap: .5rem;
font-size: .82rem;
color: var(--text2);
padding: .35rem .55rem;
border-radius: 8px;
background: var(--surface);
border: 1px solid var(--border);
}
.legend-item .sym { font-size: 1.05rem; flex-shrink: 0; width: 24px; text-align: center; }
/* ── Footer ─────────────────────────────────────────── */
footer {
text-align: center;
padding: 1.5rem;
border-top: 1px solid var(--border);
color: var(--text2);
font-size: .8rem;
}
footer a { color: var(--accent); text-decoration: none; }
footer a:hover { text-decoration: underline; }
/* ── Empty state ───────────────────────────────────── */
.empty-row td {
text-align: center;
padding: 2rem 1rem;
color: var(--text2);
font-size: .9rem;
}
/* ── Responsive ────────────────────────────────────── */
@media (max-width: 768px) {
.toolbar { flex-direction: column; }
.stats { margin-left: 0; }
.filter-select { width: 100%; }
}
/* scrollbar styling */
.table-wrap::-webkit-scrollbar { height: 8px; }
.table-wrap::-webkit-scrollbar-track { background: var(--surface); border-radius: 4px; }
.table-wrap::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
.table-wrap::-webkit-scrollbar-thumb:hover { background: var(--text2); }
/* ── Back-to-top button ────────────────────────────── */
.back-to-top {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 42px;
height: 42px;
border-radius: 50%;
background: var(--surface2);
border: 1px solid var(--border);
color: var(--text2);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
opacity: 0;
pointer-events: none;
transition: opacity .25s, background .15s;
z-index: 10;
}
.back-to-top.visible { opacity: 1; pointer-events: auto; }
.back-to-top:hover { background: var(--accent-dim); color: #fff; }
</style>
</head>
<body>
<!-- Hero -->
<header class="hero">
<h1><span class="emoji">🚀</span>Android Launcher Comparison</h1>
<p>A comprehensive, community-driven comparison of Android launchers. Find the perfect launcher that checks all your boxes.</p>
<span class="updated">Last Updated: February 2026</span>
</header>
<!-- Toolbar -->
<div class="toolbar">
<div class="search-box">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
<input type="text" id="searchInput" placeholder="Search launchers…" autocomplete="off">
</div>
<select class="filter-select" id="filterPrice">
<option value="">All Prices</option>
<option value="Free">Free</option>
<option value="Freemium">Freemium</option>
<option value="Paid">Paid</option>
<option value="Trialware">Trialware</option>
</select>
<select class="filter-select" id="filterCustom">
<option value="">All Customisability</option>
<option value="God mode">God mode</option>
<option value="Advanced">Advanced</option>
<option value="Intermediate">Intermediate</option>
<option value="Basic">Basic</option>
<option value="Less than basic">Less than basic</option>
</select>
<select class="filter-select" id="filterCode">
<option value="">All Source Availability</option>
<option value="open">Open-Sourced</option>
<option value="closed">Closed-Sourced</option>
<option value="partial">Partially Open-Sourced</option>
</select>
<select class="filter-select" id="filterAds">
<option value="">All Ads Status</option>
<option value="none">No Ads</option>
<option value="mild">Mild Ads</option>
<option value="excessive">Excessive Ads</option>
</select>
<span class="stats" id="statsText">Showing all launchers</span>
</div>
<!-- Table -->
<div class="table-wrap">
<table>
<thead>
<tr>
<th data-col="name">Name <span class="sort-arrow"></span></th>
<th data-col="price">Price <span class="sort-arrow"></span></th>
<th data-col="ads">Ads/Bloat <span class="sort-arrow"></span></th>
<th data-col="updates">Updates <span class="sort-arrow"></span></th>
<th data-col="custom">Customisability <span class="sort-arrow"></span></th>
<th data-col="drawer">Drawer <span class="sort-arrow"></span></th>
<th data-col="klwp">KLWP <span class="sort-arrow"></span></th>
<th data-col="widget">Widget <span class="sort-arrow"></span></th>
<th data-col="material">Material&nbsp;You <span class="sort-arrow"></span></th>
<th data-col="landscape">Landscape <span class="sort-arrow"></span></th>
<th data-col="code">Source <span class="sort-arrow"></span></th>
<th data-col="quickswitch">QuickSwitch <span class="sort-arrow"></span></th>
<th data-col="android">Android <span class="sort-arrow"></span></th>
<th data-col="privacy">Privacy <span class="sort-arrow"></span></th>
<th>Download</th>
</tr>
</thead>
<tbody id="tableBody"></tbody>
</table>
</div>
<!-- Legend -->
<section class="legend-section">
<h2>Legend</h2>
<div class="legend-grid" id="legendGrid"></div>
</section>
<!-- Footer -->
<footer>
<p>Credits to <a href="https://x.com/grabsterstudios" target="_blank" rel="noopener">Grabster Studios</a> &amp; <a href="https://www.reddit.com/user/Grabstertv/" target="_blank" rel="noopener">Grabstertv</a> · Source on <a href="https://github.com/diluteoxygen/Android-Launcher-Comparison-Table" target="_blank" rel="noopener">GitHub</a></p>
</footer>
<!-- Back to top -->
<button class="back-to-top" id="backToTop" title="Back to top" aria-label="Back to top">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><polyline points="18 15 12 9 6 15"/></svg>
</button>
<script>
// ── DATA ────────────────────────────────────────────────
const launchers = [
{ name:"Nova Launcher", icon:"Nova Launcher.jpg", price:"Freemium", ads:"none", updates:3, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"✅", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❌", android:"8.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.teslacoilsw.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher" },
{ name:"Smart Launcher 7", icon:"Smart Launcher 6.jpg", price:"Freemium", ads:"none", updates:4, custom:"Advanced", drawer:"↕️ Vertical", klwp:"✅", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❗", android:"7.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/ginlemon.flowerfree/latest/", download:"https://play.google.com/store/apps/details?id=ginlemon.flowerfree" },
{ name:"Niagara Launcher", icon:"Niagara Launcher.jpg", price:"Freemium", ads:"none", updates:4, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❌", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/bitpit.launcher/latest/", download:"https://play.google.com/store/apps/details?id=bitpit.launcher" },
{ name:"Lightning Launcher", icon:"Lightning Launcher.jpg", price:"Paid", ads:"none", updates:-1, custom:"God mode", drawer:"🔄 Multi-Layout", klwp:"✅", widget:"✅", material:"❌", landscape:"❓", code:"closed", quickswitch:"❗", android:"❓", privacy:"", download:"https://play.google.com/store/apps/details?id=net.pierrox.lightning_launcher_extreme" },
{ name:"Lawnchair 15 (Beta)", icon:"Lawnchair (Alpha v12+).png", price:"Free", ads:"none", updates:4, custom:"Advanced", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"✅", landscape:"✅", code:"open", quickswitch:"✅", android:"8.0+", privacy:"", download:"https://github.com/LawnchairLauncher/lawnchair/releases" },
{ name:"Lawnchair 2", icon:"Lawnchair 2 (Play Store version).png", price:"Free", ads:"none", updates:-1, custom:"Advanced", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"✅", code:"open", quickswitch:"✅", android:"8.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/ch.deletescape.lawnchair.plah/latest/", download:"https://play.google.com/store/apps/details?id=ch.deletescape.lawnchair.plah" },
{ name:"OneUI Home", icon:"OneUI Home.png", price:"Free", ads:"none", updates:3, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"➰", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❗", android:"9.0+", privacy:"", download:"https://play.google.com/store/apps/details?id=com.sec.android.app.launcher" },
{ name:"Action Launcher", icon:"Action Launcher.png", price:"Freemium", ads:"none", updates:2, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"✅", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.actionlauncher.playstore/latest/", download:"https://play.google.com/store/apps/details?id=com.actionlauncher.playstore" },
{ name:"Neo Launcher", icon:"Neo Launcher.png", price:"Free", ads:"none", updates:2, custom:"Advanced", drawer:"↕️ Vertical", klwp:"✅", widget:"✅", material:"✅", landscape:"✅", code:"open", quickswitch:"❌", android:"8.0+", privacy:"", download:"https://github.com/NeoApplications/Neo-Launcher/releases" },
{ name:"Neo Launcher (Sci-Fi)", icon:"Neo Launcher (Sci-Fi).jpg", price:"Freemium", ads:"excessive", updates:4, custom:"Intermediate", drawer:"Other", klwp:"❌", widget:"✅", material:"❌", landscape:"❓", code:"closed", quickswitch:"❗", android:"❓", privacy:"", download:"https://play.google.com/store/apps/details?id=appmania.launcher.scifi" },
{ name:"Nothing Launcher", icon:"Nothing Launcher.png", price:"Free", ads:"none", updates:3, custom:"Basic", drawer:"↕️ Vertical", klwp:"❌", widget:"✅", material:"✅", landscape:"❌", code:"closed", quickswitch:"❗", android:"8.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.nothing.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.nothing.launcher" },
{ name:"Flick Launcher", icon:"Flick Launcher.jpg", price:"Freemium", ads:"", updates:-1, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"✅", widget:"✅", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.universallauncher.universallauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.universallauncher.universallauncher" },
{ name:"Hyperion Launcher", icon:"Hyperion Launcher.jpg", price:"Freemium", ads:"none", updates:-1, custom:"Advanced", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"✅", code:"partial", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/projekt.launcher/latest/", download:"https://play.google.com/store/apps/details?id=projekt.launcher" },
{ name:"Evie Launcher", icon:"Evie launcher.png", price:"Freemium", ads:"unknown", updates:-1, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"❓", code:"closed", quickswitch:"❗", android:"❓", privacy:"", download:"" },
{ name:"Pear Launcher", icon:"Pear Launcher.png", price:"Freemium", ads:"", updates:-1, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.pearlauncher.pearlauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.pearlauncher.pearlauncher" },
{ name:"Rootless Pixel Launcher", icon:"Rootless Pixel Launcher.png", price:"Free", ads:"none", updates:-1, custom:"Basic", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"✅", code:"open", quickswitch:"✅", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/amirz.rootless.nexuslauncher/latest/", download:"https://play.google.com/store/apps/details?id=amirz.rootless.nexuslauncher" },
{ name:"Microsoft Launcher", icon:"Microsoft Launcher.png", price:"Free", ads:"mild", updates:4, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"✅", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❗", android:"8.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.microsoft.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.microsoft.launcher" },
{ name:"Mint Launcher", icon:"Mint Launcher.png", price:"Free", ads:"mild", updates:2, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"❌", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.mi.android.go.globallauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.mi.android.go.globallauncher" },
{ name:"Alphabet Launcher", icon:"Alphabet Launcher.png", price:"Free", ads:"", updates:-1, custom:"Less than basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"", privacy:"", download:"https://play.google.com/store/apps/details?id=com.grosalex.alphabeticallauncher" },
{ name:"Computer Launcher", icon:"Computer Launcher.png", price:"Freemium", ads:"", updates:4, custom:"Intermediate", drawer:"Other", klwp:"➰", widget:"✅", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.protheme.launcher.winx.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.protheme.launcher.winx.launcher" },
{ name:"Square Home", icon:"Square Home.png", price:"Freemium", ads:"none", updates:4, custom:"Intermediate", drawer:"Other", klwp:"❌", widget:"✅", material:"✅", landscape:"✅", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/reports/com.ss.squarehome2/latest", download:"https://play.google.com/store/apps/details?id=com.ss.squarehome2" },
{ name:"Go Launcher", icon:"Go Launcher.png", price:"Freemium", ads:"excessive", updates:3, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"➰", widget:"✅", material:"❌", landscape:"➰", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.gau.go.launcherex/latest/", download:"https://play.google.com/store/apps/details?id=com.gau.go.launcherex" },
{ name:"HiOS Launcher 8", icon:"HiOS Launcher 8.png", price:"Free", ads:"excessive", updates:3, custom:"Advanced", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"➰", code:"closed", quickswitch:"❗", android:"7.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.transsion.hilauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.transsion.hilauncher" },
{ name:"Holo Launcher", icon:"Holo Launcher.png", price:"Freemium", ads:"none", updates:-1, custom:"Basic", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.mobint.hololauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.mobint.hololauncher" },
{ name:"Google Now", icon:"Google Now.jpg", price:"Free", ads:"none", updates:-1, custom:"Basic", drawer:"↕️ Vertical", klwp:"❓", widget:"✅", material:"❌", landscape:"", code:"unknown", quickswitch:"❌", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.google.android.launcher/latest/", download:"https://www.apkmirror.com/apk/google-inc/google-now-launcher/google-now-launcher-1-4-large-release/" },
{ name:"ASAP Launcher", icon:"ASAP launcher.png", price:"Freemium", ads:"", updates:1, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"➰", widget:"❌", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/reports/com.citc.asap/latest", download:"https://play.google.com/store/apps/details?id=com.citc.asap" },
{ name:"Yasan Launcher", icon:"Yasan Launcher.png", price:"Freemium", ads:"", updates:2, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"7.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/yasan.space.mnml.ai.launcher/latest/", download:"https://play.google.com/store/apps/details?id=yasan.space.mnml.ai.launcher" },
{ name:"AIO Launcher", icon:"AIO Launcher.png", price:"Freemium", ads:"", updates:4, custom:"Advanced", drawer:"↕️ Vertical", klwp:"❌", widget:"✅", material:"❌", landscape:"✅", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/ru.execbit.aiolauncher/latest/", download:"https://play.google.com/store/apps/details?id=ru.execbit.aiolauncher" },
{ name:"XOS Launcher", icon:"XOS Launcher.png", price:"Freemium", ads:"mild", updates:3, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"➰", code:"closed", quickswitch:"❗", android:"7.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.transsion.XOSLauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.transsion.XOSLauncher" },
{ name:"Total Launcher", icon:"Total Launcher.png", price:"Freemium", ads:"none", updates:3, custom:"God mode", drawer:"🔄 Multi-Layout", klwp:"✅", widget:"✅", material:"❌", landscape:"✅", code:"closed", quickswitch:"❌", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.ss.launcher2/latest/", download:"https://play.google.com/store/apps/details?id=com.ss.launcher2" },
{ name:"Wide Launcher", icon:"Wide Launcher.png", price:"Freemium", ads:"", updates:2, custom:"Advanced", drawer:"↕️ Vertical", klwp:"❌", widget:"✅", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"6.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.shouter.widelauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.shouter.widelauncher" },
{ name:"Linux CLI Launcher", icon:"Linux CLI Launcher.png", price:"Free", ads:"none", updates:4, custom:"Advanced", drawer:"Other", klwp:"❌", widget:"❌", material:"❌", landscape:"", code:"open", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/ohi.andre.consolelauncher/latest/", download:"https://play.google.com/store/apps/details?id=ohi.andre.consolelauncher" },
{ name:"ADW Launcher 2", icon:"ADW Launcher 2.jpg", price:"Freemium", ads:"", updates:-1, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"✅", widget:"✅", material:"❌", landscape:"✅", code:"closed", quickswitch:"❗", android:"2.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/org.adw.launcher/latest/", download:"https://play.google.com/store/apps/details?id=org.adw.launcher" },
{ name:"Lean Launcher", icon:"Lean Launcher.png", price:"Free", ads:"none", updates:-1, custom:"Basic", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"✅", code:"open", quickswitch:"✅", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.hdeva.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.hdeva.launcher" },
{ name:"Ap15 Launcher", icon:"Ap15 Launcher.png", price:"Freemium", ads:"none", updates:2, custom:"Less than basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"✅", code:"closed", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/reports/com.aurhe.ap15/latest", download:"https://play.google.com/store/apps/details?id=com.aurhe.ap15" },
{ name:"Ruthless Launcher", icon:"Ruthless Launcher.png", price:"Free", ads:"none", updates:3, custom:"Advanced", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"", code:"closed", quickswitch:"❗", android:"7.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/shubh.ruthless/latest/", download:"https://play.google.com/store/apps/details?id=shubh.ruthless" },
{ name:"Apex Launcher", icon:"Apex Launcher.png", price:"Trialware", ads:"mild", updates:2, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"✅", widget:"✅", material:"❌", landscape:"✅", code:"closed", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.anddoes.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.anddoes.launcher" },
{ name:"Launcher iOS 18", icon:"Launcher iOS 16.png", price:"Freemium", ads:"none", updates:3, custom:"Advanced", drawer:"↔️ Horizontal", klwp:"❌", widget:"✅", material:"❌", landscape:"❌", code:"closed", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.luutinhit.ioslauncher/latest/", download:"https://play.google.com/store/apps/details?id=com.luutinhit.ioslauncher" },
{ name:"Launcher<3", icon:"Launcher3.png", price:"Free", ads:"none", updates:2, custom:"Basic", drawer:"↕️ Vertical", klwp:"➰", widget:"✅", material:"❌", landscape:"✅", code:"open", quickswitch:"✅", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.jasonkung.launcher3/latest/", download:"https://play.google.com/store/apps/details?id=com.jasonkung.launcher3" },
{ name:"Ratio Launcher", icon:"Ratio Launcher.png", price:"Freemium", ads:"none", updates:3, custom:"Advanced", drawer:"🔄 Multi-Layout", klwp:"➰", widget:"❌", material:"❌", landscape:"❌", code:"closed", quickswitch:"❗", android:"8.0+", privacy:"", download:"https://play.google.com/store/apps/details?id=com.bllocosn" },
{ name:"KISS Launcher", icon:"KISS Launcher.png", price:"Free", ads:"none", updates:4, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"❓", widget:"✅", material:"✅", landscape:"✅", code:"open", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/fr.neamar.kiss/latest/", download:"https://play.google.com/store/apps/details?id=fr.neamar.kiss&hl=en&gl=US" },
{ name:"Sentien Launcher", icon:"Sentien Launcher.png", price:"Free", ads:"none", updates:1, custom:"Basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"✅", code:"open", quickswitch:"❗", android:"4.0+", privacy:"", download:"" },
{ name:"Indistructable Launcher", icon:"Indistructable Launcher.png", price:"Freemium", ads:"", updates:2, custom:"Basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"❌", code:"closed", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.indistractablelauncher.android/latest/", download:"https://play.google.com/store/apps/details?id=com.indistractablelauncher.android" },
{ name:"OLauncher", icon:"OLauncher.png", price:"Free", ads:"none", updates:4, custom:"Basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"➰", code:"open", quickswitch:"❗", android:"6.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/app.olauncher/latest/", download:"https://play.google.com/store/apps/details?id=app.olauncher" },
{ name:"Kvæsitso", icon:"Kvæsitso.png", price:"Free", ads:"none", updates:4, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"❌", widget:"✅", material:"✅", landscape:"✅", code:"open", quickswitch:"❗", android:"8.0+", privacy:"", download:"https://github.com/MM2-0/Kvaesitso/releases" },
{ name:"Blank Launcher", icon:"Blank Launcher.png", price:"Free", ads:"none", updates:-1, custom:"Less than basic", drawer:"↕️ Vertical", klwp:"➰", widget:"❌", material:"❌", landscape:"✅", code:"closed", quickswitch:"❗", android:"4.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/tyastono.taufiq.blanklauncher/latest/", download:"https://play.google.com/store/apps/details?id=tyastono.taufiq.blanklauncher" },
{ name:"Apus Launcher", icon:"Apus Launcher.png", price:"Freemium", ads:"excessive", updates:2, custom:"Intermediate", drawer:"🔄 Multi-Layout", klwp:"➰", widget:"✅", material:"❌", landscape:"✅", code:"closed", quickswitch:"❗", android:"5.0+", privacy:"https://reports.exodus-privacy.eu.org/en/reports/com.apusapps.launcher/latest/", download:"https://play.google.com/store/apps/details?id=com.apusapps.launcher" },
{ name:"Minimal Launcher", icon:"Minimal Launcher.png", price:"Free", ads:"none", updates:2, custom:"Less than basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"❌", code:"open", quickswitch:"❗", android:"4.0+", privacy:"", download:"https://f-droid.org/packages/com.finnmglas.launcher/" },
{ name:"Emerald Launcher", icon:"Emerald Launcher.png", price:"Free", ads:"", updates:1, custom:"Basic", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"✅", code:"open", quickswitch:"❗", android:"2.0+", privacy:"", download:"https://f-droid.org/en/packages/ru.henridellal.emerald/" },
{ name:"Tiny bit Launcher", icon:"Tiny bit Launcher.png", price:"Free", ads:"none", updates:2, custom:"Basic", drawer:"Other", klwp:"➰", widget:"❌", material:"❌", landscape:"❓", code:"open", quickswitch:"❗", android:"", privacy:"https://reports.exodus-privacy.eu.org/en/reports/org.n277.lynxlauncher/latest/", download:"" },
{ name:"Lens Launcher", icon:"Lens Launcher.jpg", price:"Free", ads:"none", updates:3, custom:"Basic", drawer:"Other", klwp:"❌", widget:"❌", material:"❌", landscape:"❓", code:"open", quickswitch:"❗", android:"", privacy:"https://reports.exodus-privacy.eu.org/en/reports/nickrout.lenslauncher/latest/", download:"https://play.google.com/store/apps/details?id=nickrout.lenslauncher&hl=en&gl=US" },
{ name:"Starlight Launcher", icon:"Starlight Launcher.jpg", price:"Free", ads:"none", updates:3, custom:"Basic", drawer:"Other", klwp:"❌", widget:"✅", material:"❌", landscape:"❓", code:"open", quickswitch:"❗", android:"", privacy:"", download:"https://play.google.com/store/apps/details?id=kenneth.app.starlightlauncher" },
{ name:"Fossify Launcher", icon:"", price:"Free", ads:"none", updates:4, custom:"Basic", drawer:"🔄 Multi-Layout", klwp:"❌", widget:"✅", material:"✅", landscape:"❌", code:"open", quickswitch:"❗", android:"6.0+", privacy:"", download:"https://github.com/FossifyOrg/Launcher/releases" },
{ name:"µLauncher", icon:"", price:"Free", ads:"none", updates:4, custom:"Less than basic", drawer:"Other", klwp:"❌", widget:"✅", material:"✅", landscape:"✅", code:"open", quickswitch:"❗", android:"7.0+", privacy:"", download:"https://github.com/jrpie/launcher/releases" },
{ name:"Stario", icon:"", price:"Free", ads:"none", updates:4, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"❌", widget:"✅", material:"✅", landscape:"❓", code:"open", quickswitch:"❗", android:"8.0+", privacy:"", download:"https://github.com/albu-razvan/Stario/releases" },
{ name:"Discreet Launcher", icon:"", price:"Free", ads:"none", updates:3, custom:"Basic", drawer:"🔄 Multi-Layout", klwp:"❌", widget:"❌", material:"❌", landscape:"❌", code:"open", quickswitch:"❗", android:"5.0+", privacy:"", download:"https://github.com/falzonv/discreet-launcher/releases" },
{ name:"Lunar Launcher", icon:"", price:"Free", ads:"none", updates:3, custom:"Intermediate", drawer:"↕️ Vertical", klwp:"❌", widget:"❌", material:"❌", landscape:"❌", code:"open", quickswitch:"❗", android:"7.0+", privacy:"", download:"https://github.com/iamrasel/lunar-launcher/releases" },
{ name:"Pie Launcher", icon:"", price:"Free", ads:"none", updates:3, custom:"Basic", drawer:"Other", klwp:"❌", widget:"❌", material:"❌", landscape:"❓", code:"open", quickswitch:"❗", android:"4.4+", privacy:"", download:"https://github.com/markusfisch/PieLauncher" },
];
// ── Legend data ─────────────────────────────────────────
const legend = [
{ sym:"✅", def:"Available / Supported" },
{ sym:"✖️", def:"Unavailable / Unsupported" },
{ sym:"❔", def:"Unknown" },
{ sym:"🧪", def:"Not Tested" },
{ sym:"🌓", def:"Partially Supported" },
{ sym:"☠️", def:"Dead / Discontinued" },
{ sym:"🧹", def:"No Ads" },
{ sym:"📢", def:"Mild Ads" },
{ sym:"🚨", def:"Excessive Ads" },
{ sym:"⬆️⬇️", def:"Vertical Drawer" },
{ sym:"⬅️➡️", def:"Horizontal Drawer" },
{ sym:"🔀", def:"Multi-Layout Drawer" },
{ sym:"🔒", def:"Closed-Sourced" },
{ sym:"📖", def:"Open-Sourced" },
{ sym:"🧩", def:"Partially Open-Sourced" },
];
// ── Helpers ─────────────────────────────────────────────
function esc(text) {
var tempElement = document.createElement('div');
tempElement.appendChild(document.createTextNode(text));
return tempElement.innerHTML;
}
function priceBadge(p) {
var cls = { Free:'badge-free', Freemium:'badge-freemium', Paid:'badge-paid', Trialware:'badge-trialware' }[p] || 'badge-freemium';
return '<span class="badge '+cls+'">'+esc(p)+'</span>';
}
function adsLabel(a) {
if (a === 'none') return '<span class="ads-none">🧹 No Ads</span>';
if (a === 'mild') return '<span class="ads-mild">📢 Mild Ads</span>';
if (a === 'excessive') return '<span class="ads-excessive">🚨 Excessive Ads</span>';
if (a === 'unknown') return '<span class="ads-unknown">❔</span>';
return '<span class="ads-unknown">—</span>';
}
function updatesLabel(u) {
if (u === -1) return '<span class="dead">☠️ Dead</span>';
if (u === 0) return '—';
return '<span class="star">' + '⭐'.repeat(u) + '</span>';
}
const SUPPORT_MAP = {
'✅':'✅',
'❌':'✖️',
'❓':'❔',
'❗':'🧪',
'➰':'🌓',
};
function supportSymbol(sym) {
if (!sym) return '—';
return esc(SUPPORT_MAP[sym] || sym);
}
function drawerLabel(drawer) {
if (!drawer) return '—';
if (drawer.indexOf('Multi-Layout') !== -1) return '🔀 Multi-Layout';
if (drawer.indexOf('Horizontal') !== -1) return '⬅️➡️ Horizontal';
if (drawer.indexOf('Vertical') !== -1) return '⬆️⬇️ Vertical';
return esc(drawer);
}
function codeLabel(c) {
if (c === 'open') return '<span class="code-open">📖 Open</span>';
if (c === 'closed') return '<span class="code-closed">🔒 Closed</span>';
if (c === 'partial') return '<span class="code-partial">🧩 Partial</span>';
return '<span class="code-closed">❔</span>';
}
function iconSrc(icon) {
if (!icon) return '';
return 'App Icons/' + icon;
}
// ── Render ──────────────────────────────────────────────
var tbody = document.getElementById('tableBody');
var searchInput = document.getElementById('searchInput');
var filterPrice = document.getElementById('filterPrice');
var filterCustom = document.getElementById('filterCustom');
var filterCode = document.getElementById('filterCode');
var filterAds = document.getElementById('filterAds');
var statsText = document.getElementById('statsText');
var sortCol = '';
var sortDir = 1; // 1 = asc, -1 = desc
function getFiltered() {
var q = searchInput.value.toLowerCase().trim();
var fp = filterPrice.value;
var fc = filterCustom.value;
var fco = filterCode.value;
var fa = filterAds.value;
return launchers.filter(function(l) {
if (q && l.name.toLowerCase().indexOf(q) === -1) return false;
if (fp && l.price !== fp) return false;
if (fc && l.custom !== fc) return false;
if (fco && l.code !== fco) return false;
if (fa && l.ads !== fa) return false;
return true;
});
}
var customOrder = { 'God mode':5, 'Advanced':4, 'Intermediate':3, 'Basic':2, 'Less than basic':1 };
function getSorted(list) {
if (!sortCol) return list;
var copy = list.slice();
copy.sort(function(a, b) {
var va, vb;
switch (sortCol) {
case 'name': va = a.name.toLowerCase(); vb = b.name.toLowerCase(); break;
case 'price': va = a.price; vb = b.price; break;
case 'ads': va = a.ads || 'zzz'; vb = b.ads || 'zzz'; break;
case 'updates': va = a.updates; vb = b.updates; break;
case 'custom': va = customOrder[a.custom] || 0; vb = customOrder[b.custom] || 0; break;
case 'drawer': va = a.drawer; vb = b.drawer; break;
case 'klwp': va = a.klwp; vb = b.klwp; break;
case 'widget': va = a.widget; vb = b.widget; break;
case 'material': va = a.material; vb = b.material; break;
case 'landscape': va = a.landscape; vb = b.landscape; break;
case 'code': va = a.code; vb = b.code; break;
case 'quickswitch': va = a.quickswitch; vb = b.quickswitch; break;
case 'android': va = a.android || 'zzz'; vb = b.android || 'zzz'; break;
case 'privacy': va = a.privacy ? 'a' : 'z'; vb = b.privacy ? 'a' : 'z'; break;
default: va = ''; vb = '';
}
if (va < vb) return -1 * sortDir;
if (va > vb) return 1 * sortDir;
return 0;
});
return copy;
}
function render() {
var filtered = getFiltered();
var sorted = getSorted(filtered);
statsText.textContent = 'Showing ' + sorted.length + ' of ' + launchers.length + ' launchers';
if (sorted.length === 0) {
tbody.innerHTML = '<tr class="empty-row"><td colspan="15">No launchers match your filters. Try adjusting your search or filters.</td></tr>';
return;
}
var html = '';
for (var i = 0; i < sorted.length; i++) {
var l = sorted[i];
var iconTag = l.icon
? '<img src="' + esc(iconSrc(l.icon)) + '" alt="" loading="lazy">'
: '<img src="data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' width=\'28\' height=\'28\' fill=\'%232a2d38\' viewBox=\'0 0 28 28\'%3E%3Crect width=\'28\' height=\'28\' rx=\'7\'/%3E%3Ctext x=\'14\' y=\'18\' text-anchor=\'middle\' font-size=\'14\' fill=\'%236c8cff\'%3E' + esc(l.name.charAt(0)) + '%3C/text%3E%3C/svg%3E" alt="">';
var privacyCell = l.privacy
? '<a class="privacy-link" href="' + esc(l.privacy) + '" target="_blank" rel="noopener">Exodus ↗</a>'
: '<span style="color:var(--text2)">N/A</span>';
var downloadCell = l.download
? '<a class="link-btn" href="' + esc(l.download) + '" target="_blank" rel="noopener">Get ↗</a>'
: '<span style="color:var(--text2)">—</span>';
html += '<tr>'
+ '<td><div class="name-cell">' + iconTag + '<span>' + esc(l.name) + '</span></div></td>'
+ '<td>' + priceBadge(l.price) + '</td>'
+ '<td>' + adsLabel(l.ads) + '</td>'
+ '<td>' + updatesLabel(l.updates) + '</td>'
+ '<td>' + esc(l.custom) + '</td>'
+ '<td>' + drawerLabel(l.drawer) + '</td>'
+ '<td>' + supportSymbol(l.klwp) + '</td>'
+ '<td>' + supportSymbol(l.widget) + '</td>'
+ '<td>' + supportSymbol(l.material) + '</td>'
+ '<td>' + supportSymbol(l.landscape) + '</td>'
+ '<td>' + codeLabel(l.code) + '</td>'
+ '<td>' + supportSymbol(l.quickswitch) + '</td>'
+ '<td>' + esc(l.android) + '</td>'
+ '<td>' + privacyCell + '</td>'
+ '<td>' + downloadCell + '</td>'
+ '</tr>';
}
tbody.innerHTML = html;
}
// ── Events ──────────────────────────────────────────────
searchInput.addEventListener('input', render);
filterPrice.addEventListener('change', render);
filterCustom.addEventListener('change', render);
filterCode.addEventListener('change', render);
filterAds.addEventListener('change', render);
// sorting
document.querySelectorAll('thead th[data-col]').forEach(function(th) {
th.addEventListener('click', function() {
var col = th.getAttribute('data-col');
if (sortCol === col) {
sortDir *= -1;
} else {
sortCol = col;
sortDir = 1;
}
// update arrows
document.querySelectorAll('thead th').forEach(function(t) { t.classList.remove('sorted'); });
th.classList.add('sorted');
th.querySelector('.sort-arrow').textContent = sortDir === 1 ? '▲' : '▼';
render();
});
});
// back to top
var btn = document.getElementById('backToTop');
window.addEventListener('scroll', function() {
btn.classList.toggle('visible', window.scrollY > 400);
});
btn.addEventListener('click', function() {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
// ── Legend ───────────────────────────────────────────────
var legendGrid = document.getElementById('legendGrid');
var legendHtml = '';
for (var i = 0; i < legend.length; i++) {
legendHtml += '<div class="legend-item"><span class="sym">' + legend[i].sym + '</span>' + esc(legend[i].def) + '</div>';
}
legendGrid.innerHTML = legendHtml;
// ── Initial render ──────────────────────────────────────
render();
</script>
</body>
</html>