{"id":325,"date":"2026-11-06T15:04:41","date_gmt":"2026-11-06T14:04:41","guid":{"rendered":"https:\/\/linuxundich.de\/en\/?page_id=325"},"modified":"2026-11-06T16:39:39","modified_gmt":"2026-11-06T15:39:39","slug":"tretlager","status":"publish","type":"page","link":"https:\/\/linuxundich.de\/en\/projects\/tretlager\/","title":{"rendered":"Tretlager"},"content":{"rendered":"\n<style>\n\/* Projektseiten (linuxundich.de\/projekte\/) \u2013 Entwurfsstil.\n   Liegt als synchronisiertes Muster \u201eProjektseiten: Stil\u201c in WordPress und\n   wird von jeder Projektseite eingebunden. Wandert vor der Ver\u00f6ffentlichung\n   ins lui-theme. Farben nur \u00fcber die Theme-Variablen, damit der Dunkelmodus\n   mitzieht. *\/\n\n\/* Seitenleiste und Vorlagen-Titel ausblenden, die Seite bringt eigene mit *\/\n.lui-two-col:has(.lui-pj) > .lui-sidebar-col { display: none; }\n.lui-two-col:has(.lui-pj) > .lui-article-col { flex-basis: 100%; }\n.lui-article-col:has(.lui-pj) .lui-article-header { display: none; }\n\n.lui-pj {\n\t--pj-accent: var(--wp--preset--color--accent, #ff6600);\n\t--pj-accent-dark: var(--wp--preset--color--accent-dark, #cc5200);\n\t--pj-ink: var(--wp--preset--color--contrast, #1a1a1a);\n\t--pj-muted: var(--wp--preset--color--muted, #63625f);\n\t--pj-line: var(--wp--preset--color--line, #e3e1dd);\n\t--pj-bg: var(--wp--preset--color--base, #fff);\n\t--pj-bg2: var(--wp--preset--color--base-2, #f5f4f2);\n\t--pj-mono: \"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace;\n\t--pj-display: \"Space Grotesk\", \"Inter\", system-ui, sans-serif;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2.75rem;\n}\n.lui-pj > * { margin-block: 0 !important; }\n.lui-pj h1, .lui-pj h2, .lui-pj h3 { text-wrap: balance; }\n.lui-pj section, .lui-pj .lui-pj-sec { display: flex; flex-direction: column; gap: .9rem; }\n.lui-pj .lui-pj-sec > * { margin-block: 0; }\n.lui-pj .lui-pj-sec > h2 { font-size: 1.5rem; }\n\n\/* Kleine Zeilen *\/\n.lui-pj .lui-pj-path { font: 500 .8rem var(--pj-mono); color: var(--pj-muted); }\n.lui-pj .lui-pj-meta { font: 500 .8rem var(--pj-mono); color: var(--pj-muted); margin-top: .35rem; }\n.lui-pj .lui-pj-flag { font: 600 .74rem var(--pj-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--pj-accent-dark); }\n.lui-pj .lui-pj-lead { font-size: 1.1rem; }\n\/* Eine Textbreite f\u00fcr allen Flie\u00dftext, damit Abs\u00e4tze nicht mal schmal, mal seitenbreit laufen *\/\n.lui-pj > p, .lui-pj .lui-pj-sec > p, .lui-pj .wp-block-column > p, .lui-pj .lui-pj-box > p { max-width: 44rem; }\n.lui-pj .lui-pj-note { font-size: .85rem; color: var(--pj-muted); border-left: 3px solid var(--pj-line); padding-left: .8rem; }\n.lui-pj .lui-pj-chips { font: 500 .78rem var(--pj-mono); color: var(--pj-muted); }\n.lui-pj .lui-pj-chips mark, .lui-pj .lui-pj-chip {\n\tdisplay: inline-block; max-width: 100%; margin: 0 .25rem .3rem 0; line-height: 1.5;\n\tbackground: var(--pj-bg2); color: var(--pj-ink); padding: .1em .55em; border-radius: 4px;\n}\n\n\/* Kopf: Icon + Name *\/\n.lui-pj .lui-pj-head { display: flex; gap: 1.4rem; align-items: center; }\n.lui-pj .lui-pj-head > .wp-block-group { margin: 0; min-width: 0; }\n.lui-pj .lui-pj-head h1 { font-size: clamp(2rem, 4.5vw, 2.8rem); margin: 0; letter-spacing: -.02em; }\n.lui-pj .lui-pj-head p { margin: .3rem 0 0; }\n.lui-pj .lui-pj-icon { flex: none; margin: 0; width: 96px; }\n.lui-pj .lui-pj-icon img { width: 96px; height: 96px; object-fit: contain; }\n@media (max-width: 560px) {\n\t.lui-pj .lui-pj-head { flex-direction: column; align-items: flex-start; gap: .8rem; }\n\t.lui-pj .lui-pj-icon, .lui-pj .lui-pj-icon img { width: 64px; height: 64px; }\n}\n\n\/* \u00dcbersicht: Kopf *\/\n.lui-pj .lui-pj-title { font-size: clamp(2.2rem, 5vw, 3.3rem); letter-spacing: -.025em; margin: 0; }\n.lui-pj .lui-pj-title span { color: var(--pj-accent); }\n\n\/* Bezugsquellen *\/\n.lui-pj .lui-get { gap: .55rem; }\n.lui-pj .lui-get .wp-block-button__link {\n\tdisplay: inline-flex; align-items: center; gap: .55rem;\n\tbackground: var(--pj-bg); color: var(--pj-ink); border: 1px solid var(--pj-line);\n\tborder-radius: 8px; padding: .55rem .9rem .55rem .7rem;\n\tfont: 600 .9rem\/1.1 var(--pj-display); text-decoration: none;\n}\n.lui-pj .lui-get .wp-block-button__link::before {\n\tcontent: \"\"; width: 20px; height: 20px; flex: none; background: currentColor;\n\t-webkit-mask: var(--pj-glyph) center \/ contain no-repeat; mask: var(--pj-glyph) center \/ contain no-repeat;\n}\n.lui-pj .lui-get .wp-block-button__link:hover { border-color: var(--pj-accent); }\n.lui-pj .lui-get .is-primary .wp-block-button__link { background: var(--pj-ink); color: var(--pj-bg); border-color: var(--pj-ink); }\n.lui-pj .lui-get .is-planned .wp-block-button__link { border-style: dashed; color: var(--pj-muted); font-weight: 500; pointer-events: none; }\n.lui-pj .lui-get .is-planned .wp-block-button__link::after {\n\tcontent: \"geplant\"; font: 500 .66rem var(--pj-mono); text-transform: uppercase; letter-spacing: .05em;\n\tborder: 1px solid var(--pj-line); border-radius: 3px; padding: .1em .35em; margin-left: .2rem;\n}\nhtml[lang^=\"en\"] .lui-pj .lui-get .wp-block-button.is-planned .wp-block-button__link::after { content: \"planned\"; }\n.lui-get--github  { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 7 3 12l5 5M16 7l5 5-5 5M14 4l-4 16'\/%3E%3C\/svg%3E\"); }\n.lui-get--release { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3v12m-5-5 5 5 5-5M4 20h16'\/%3E%3C\/svg%3E\"); }\n.lui-get--ego     { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'%3E%3Cpath d='M10 3h4v3a2 2 0 1 0 4 0V3h3v7h-3a2 2 0 1 0 0 4h3v7h-7v-3a2 2 0 1 0-4 0v3H3v-7h3a2 2 0 1 0 0-4H3V3h7z'\/%3E%3C\/svg%3E\"); }\n.lui-get--flathub { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M12 3 4 7.5v9L12 21l8-4.5v-9L12 3zM4 7.5 12 12l8-4.5M12 12v9'\/%3E%3C\/svg%3E\"); }\n.lui-get--fdroid  { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Crect x='4' y='9' width='16' height='11' rx='2.5'\/%3E%3Cpath d='M7 5l2 3M17 5l-2 3'\/%3E%3Ccircle cx='12' cy='14.5' r='2.6'\/%3E%3C\/svg%3E\"); }\n.lui-get--play    { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'%3E%3Cpath d='M6 3.5v17a1 1 0 0 0 1.5.86l14-8.5a1 1 0 0 0 0-1.72l-14-8.5A1 1 0 0 0 6 3.5z'\/%3E%3C\/svg%3E\"); }\n.lui-get--wp      { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'\/%3E%3Cpath d='M6.5 8.5h3M14.5 8.5h3M8 8.5l3 9 1.5-4.5M13 8.5l3 9 1.5-5'\/%3E%3C\/svg%3E\"); }\n.lui-get--web     { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'\/%3E%3Cpath d='M3 12h18M12 3c2.5 2.6 3.8 5.6 3.8 9s-1.3 6.4-3.8 9c-2.5-2.6-3.8-5.6-3.8-9S9.5 5.6 12 3z'\/%3E%3C\/svg%3E\"); }\n.lui-get--docs    { --pj-glyph: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Cpath d='M6 3h8l4 4v14H6zM14 3v4h4M9 12h6M9 16h6'\/%3E%3C\/svg%3E\"); }\n\n\/* Querformat-B\u00fchne 3:2 *\/\n.lui-pj .lui-shots { gap: .75rem !important; margin: 0; }\n.lui-pj .lui-shots .wp-block-image img,\n.lui-pj .lui-pj-shot img {\n\taspect-ratio: 3 \/ 2 !important; width: 100%; height: auto !important; object-fit: cover; object-position: center top;\n\tborder-radius: 8px; box-shadow: 0 10px 28px -14px rgba(0,0,0,.45);\n}\n.lui-pj .lui-shots.is-anchor-right img, .lui-pj .lui-pj-shot.is-anchor-right img { object-position: right top; }\n.lui-pj .lui-shots.is-portrait .wp-block-image img { aspect-ratio: 9 \/ 16 !important; }\n.lui-pj figcaption { font-style: normal !important; }\n\/* WordPress gibt Galerie-Bildunterschriften einen schwarzen Schatten f\u00fcr\n   wei\u00dfe Schrift auf dem Bild. Hier stehen sie grau unter dem Bild \u2013 mit\n   Schatten wirkten sie verwaschen (17.10.2026). *\/\n.lui-pj :is(.lui-shots, .lui-phones, .lui-pj-mini) figcaption { text-shadow: none !important; }\n\/* Abschnitts-Link \u201e#\u201c (interactions.js) s\u00e4\u00dfe im Kartenkopf auf dem App-Symbol;\n   die \u00dcberschrift verlinkt dort ohnehin schon auf die Projektseite. *\/\n.lui-pj .lui-pj-head .lui-heading-anchor { display: none; }\n.lui-pj .lui-shots figcaption { position: static !important; background: none !important; color: var(--pj-muted) !important; font-size: .8rem; text-align: center; padding: .4rem 0 0 !important; }\n.lui-pj .lui-pj-shot { margin: 0; }\n.lui-pj .lui-pj-video video { aspect-ratio: 3 \/ 2; width: 100%; object-fit: cover; border-radius: 8px; background: #111; }\n\n\/* Hochkant: Handyrahmen, seitlich wischbar *\/\n.lui-pj .lui-phones {\n\tdisplay: flex !important; flex-wrap: nowrap !important; gap: 1.1rem !important; overflow-x: auto;\n\tscroll-snap-type: x mandatory; padding: 1.2rem 1.2rem 1rem; border-radius: 12px; background: var(--pj-bg2); margin: 0;\n}\n.lui-pj .lui-phones > .wp-block-image { flex: 0 0 190px !important; width: 190px !important; scroll-snap-align: start; margin: 0 !important; display: flex; flex-direction: column; }\n.lui-pj .lui-phones img, .lui-pj .lui-pj-phone video, .lui-pj .lui-pj-phone img {\n\taspect-ratio: 9 \/ 20 !important; height: auto !important; width: 100%; object-fit: cover; object-position: top;\n\tborder: 6px solid #111; border-radius: 24px; background: #111; box-shadow: 0 14px 28px -16px rgba(0,0,0,.6);\n}\n.lui-pj .lui-phones figcaption { position: static !important; background: none !important; color: var(--pj-muted) !important; font-size: .8rem; text-align: center; padding: .5rem 0 0 !important; }\n.lui-pj .lui-pj-phone { margin: 0 auto; max-width: 230px; }\n\n\/* Raster f\u00fcr Funktionen, Schritte, Grunds\u00e4tze *\/\n.lui-pj .lui-pj-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.4rem 2rem; }\n.lui-pj .lui-pj-grid.is-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.lui-pj .lui-pj-grid.is-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }\n.lui-pj .lui-pj-grid > * { margin: 0 !important; min-width: 0; }\n.lui-pj .lui-pj-grid h3 { font-size: 1.05rem; margin: 0 0 .3rem; }\n.lui-pj .lui-pj-grid p { margin: 0; font-size: .95rem; }\n.lui-pj .lui-pj-grid.is-4 > * { border-top: 1px solid var(--pj-line); padding-top: .8rem; }\n@media (max-width: 900px) { .lui-pj .lui-pj-grid.is-3, .lui-pj .lui-pj-grid.is-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n@media (max-width: 600px) { .lui-pj .lui-pj-grid, .lui-pj .lui-pj-grid.is-3, .lui-pj .lui-pj-grid.is-4 { grid-template-columns: 1fr; } }\n\n.lui-pj .lui-pj-steps { counter-reset: pjstep; }\n.lui-pj .lui-pj-steps > * { counter-increment: pjstep; border-top: 2px solid var(--pj-ink); padding-top: .8rem; }\n.lui-pj .lui-pj-steps > *::before { content: counter(pjstep); display: block; font: 700 1.7rem\/1 var(--pj-display); color: var(--pj-accent); margin-bottom: .4rem; }\n.lui-pj .lui-pj-steps pre { font-size: .78rem; margin: .6rem 0 0; white-space: pre-wrap; overflow-wrap: anywhere; }\n\n\/* Zwei Spalten *\/\n.lui-pj .lui-pj-split { gap: 2rem; align-items: center !important; margin: 0; }\n.lui-pj .lui-pj-split > .wp-block-column > * { margin-block: 0 0 .8rem; }\n\n\/* Fragen und Antworten: K\u00e4sten gestaltet das lui-theme (Details-Block), hier nur der Abstand *\/\n.lui-pj .lui-pj-faq { display: flex; flex-direction: column; gap: .75rem; }\n.lui-pj .lui-pj-faq > .wp-block-details { margin: 0 !important; }\n\n\/* Versionen *\/\n.lui-pj .lui-pj-versions { margin: 0; }\n.lui-pj .lui-pj-versions table { border: 0; font-size: .92rem; }\n.lui-pj .lui-pj-versions td { border: 0; border-bottom: 1px solid var(--pj-line); padding: .55rem .9rem .55rem 0; vertical-align: top; }\n.lui-pj .lui-pj-versions td:first-child { font: 600 .85rem var(--pj-mono); color: var(--pj-accent-dark); white-space: nowrap; }\n.lui-pj .lui-pj-versions td:nth-child(2) { font: .8rem var(--pj-mono); color: var(--pj-muted); white-space: nowrap; }\n\n\/* Dunkler Kasten (wie Footer: immer dunkel) *\/\n.lui-pj .lui-pj-band { align-items: center !important; } \/* WordPress: align-items normal !important *\/\n.lui-pj .lui-pj-band { background: #1a1a1a; color: #e9e7e3; border-radius: 12px; padding: 1.5rem 1.6rem; gap: 1.5rem; }\n.lui-pj .lui-pj-band h2 { color: #fff; font-size: 1.3rem; margin: 0 0 .4rem; }\n.lui-pj .lui-pj-band p { color: #bdbbb6; margin: 0; font-size: .95rem; }\n.lui-pj .lui-pj-band a { color: #ff8a3d; }\n.lui-pj .lui-pj-band .lui-get .wp-block-button__link { background: #262625; color: #fff; border-color: #3a3938; }\n\n\/* Kasten Datenschutz *\/\n.lui-pj .lui-pj-box { border: 1px solid var(--pj-line); border-radius: 12px; padding: 1.1rem 1.3rem; background: var(--pj-bg2); }\n.lui-pj .lui-pj-box > * { margin: 0; }\n.lui-pj .lui-pj-box h3 { font-size: 1.05rem; margin-bottom: .3rem; }\n\n\/* \u00dcbersicht: hervorgehobenes Projekt *\/\n.lui-pj .lui-pj-feature { background: var(--pj-bg2); border-radius: 12px; padding: 1.4rem; gap: 1.8rem; margin: 0; align-items: center !important; }\n.lui-pj .lui-pj-feature .lui-pj-head { gap: .9rem; }\n.lui-pj .lui-pj-feature .lui-pj-icon, .lui-pj .lui-pj-feature .lui-pj-icon img { width: 56px; height: 56px; }\n.lui-pj .lui-pj-feature h2 { margin: 0; font-size: 1.6rem; }\n.lui-pj .lui-pj-feature .wp-block-column > * { margin-block: 0 .8rem; }\n\n\/* Weitere Projekte *\/\n.lui-pj .lui-pj-more { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: .8rem; }\n.lui-pj .lui-pj-more li { border: 1px solid var(--pj-line); border-radius: 10px; padding: .8rem 1rem; font-size: .9rem; color: var(--pj-muted); }\n.lui-pj .lui-pj-more li a { display: block; font: 600 1.05rem var(--pj-display); color: var(--pj-ink); text-decoration: none; }\n.lui-pj .lui-pj-more li a:hover { color: var(--pj-accent-dark); }\n\n\/* Einzelbild ohne festes Format (z. B. Mini-Player) *\/\n.lui-pj .lui-pj-mini { margin: 0 auto; max-width: 260px; }\n.lui-pj .lui-pj-mini img { border-radius: 10px; box-shadow: 0 10px 28px -14px rgba(0,0,0,.45); }\n.lui-pj .lui-pj-mini figcaption { color: var(--pj-muted); font-size: .8rem; text-align: center; }\n\n\/* Vollbild: Format- und Rahmenregeln aufheben, Video ganz zeigen (Hochkant auf volle H\u00f6he) *\/\n.lui-pj video:fullscreen {\n\taspect-ratio: auto !important; width: 100% !important; height: 100% !important; max-width: none;\n\tobject-fit: contain !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; background: #000;\n}\n.lui-pj video:-webkit-full-screen {\n\taspect-ratio: auto !important; width: 100% !important; height: 100% !important; max-width: none;\n\tobject-fit: contain !important; border: 0 !important; border-radius: 0 !important; box-shadow: none !important; background: #000;\n}\n\n\/* Tabelle Voraussetzungen: wie Versionen, aber zweite Spalte darf umbrechen *\/\n.lui-pj .lui-pj-req { margin: 0; }\n.lui-pj .lui-pj-req table { border: 0; font-size: .92rem; }\n.lui-pj .lui-pj-req td { border: 0; border-bottom: 1px solid var(--pj-line); padding: .55rem .9rem .55rem 0; vertical-align: top; }\n.lui-pj .lui-pj-req td:first-child { color: var(--pj-muted); white-space: nowrap; }\n\n\/* Video im Bildschirmformat 16:9 (z. B. Desktop-Aufnahme mit Schnelleinstellungen am Rand) *\/\n.lui-pj .lui-pj-video.is-wide video { aspect-ratio: 16 \/ 9; object-fit: contain; }\n\/* Galerie: Lazy-Bilder (sizes=\"auto\") bekamen in der Flex-Spalte der Abbildung die H\u00f6he 0 *\/\n.lui-pj .lui-shots img { flex: none !important; }\n<\/style>\n\n\n\n<div class=\"wp-block-group alignwide lui-pj is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"lui-pj-path wp-block-paragraph\">~\/projects\/<strong>tretlager<\/strong><\/p>\n\n\n<div class=\"wp-block-group lui-pj-head is-nowrap is-layout-flex wp-container-core-group-is-layout-083dbefd wp-block-group-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef92210d7fc&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef92210d7fc\" class=\"wp-block-image size-full lui-pj-icon wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"256\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-icon.png\" alt=\"Tretlager icon\" class=\"wp-image-317\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-icon.png 256w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-icon-150x150.png 150w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-icon-240x240.png 240w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h1 class=\"wp-block-heading\">Tretlager<\/h1>\n\n\n<p class=\"wp-block-paragraph\">Zwift on Linux, set up in five steps.<\/p>\n\n\n<p class=\"lui-pj-meta wp-block-paragraph\">v0.11.3 \u00b7 November 6, 2026 \u00b7 GPL-3.0-or-later \u00b7 Kirigami and PySide6 \u00b7 Flatpak \u00b7 English, German<\/p>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-buttons lui-get is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button lui-get--release is-primary\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/linuxundich\/tretlager\/releases\/tag\/v0.11.3\">Flatpak bundle 0.11.3<\/a><\/div>\n\n\n<div class=\"wp-block-button lui-get--github\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/linuxundich\/tretlager\">GitHub<\/a><\/div>\n<\/div>\n\n\n<figure class=\"wp-block-video lui-pj-video is-wide\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls poster=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-demo-poster.webp\" preload=\"none\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-demo.mp4\"><\/video><\/figure>\n\n\n<figure data-wp-context=\"{&quot;galleryId&quot;:&quot;6aef92210e779&quot;}\" data-wp-interactive=\"core\/gallery\" class=\"wp-block-gallery has-nested-images columns-4 is-cropped lui-shots wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef92210eed7&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef92210eed7\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1545\" height=\"1030\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"319\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride.webp\" alt=\"Tretlager shows power, cadence and heart rate while Zwift runs in the background\" class=\"wp-image-319\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride.webp 1545w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride-1536x1024.webp 1536w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ride-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">During the ride<\/figcaption><\/figure>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef92210f8ba&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef92210f8ba\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"320\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors.webp\" alt=\"Sensors page with trainer and heart rate strap, connected through the sensor bridge\" class=\"wp-image-320\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Sensors without a phone<\/figcaption><\/figure>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef9221102a4&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef9221102a4\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"321\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup.webp\" alt=\"Setup: installer verified, Wine, Microsoft components and launcher done, game download in progress\" class=\"wp-image-321\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Setup<\/figcaption><\/figure>\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef922110bc9&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef922110bc9\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1545\" height=\"1030\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" data-id=\"324\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices.webp\" alt=\"Zwift's Paired Devices screen with power, resistance, cadence and heart rate through the bridge\" class=\"wp-image-324\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices.webp 1545w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices-1536x1024.webp 1536w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/zwift-paired-devices-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Paired in Zwift<\/figcaption><\/figure>\n<\/figure>\n\n\n<p class=\"lui-pj-lead wp-block-paragraph\">Tretlager installs the official Windows version of Zwift on your Linux computer, signs you in and connects your smart trainer and heart rate strap over Bluetooth. No terminal, no Wine tinkering, no Companion app on your phone. One button starts the ride.<\/p>\n\n\n<div class=\"wp-block-group lui-callout is-warning has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"lui-callout-label wp-block-paragraph\">\/\/ Before you start<\/p>\n\n\n<p class=\"wp-block-paragraph\">Tretlager is a private project, not an official Zwift app. Zwift does not support Linux and has nothing to do with Tretlager. The sign-in happens outside the Zwift launcher, which goes against Zwift&#8217;s terms of service. A software bridge passes sensor data on, so I can&#8217;t rule out restrictions up to a suspended account. Tretlager is not meant for races. It shows these points before the first start and only goes on once you accept them.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Zwift on Linux<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Zwift runs on Windows, macOS, iOS, Android and Apple TV, but not on Linux. Yet Zwift doesn&#8217;t need much power. Plenty of basements, garages and garden sheds have an old computer that only runs Zwift. Windows 10 no longer gets updates, and many of those boxes can&#8217;t officially run Windows 11. Linux runs on them just fine.<\/p>\n\n\n<p class=\"wp-block-paragraph\">There is also a matter of time: Zwift has already dropped support for Windows 8. Windows 10 will probably follow at some point, and then it&#8217;s either upgrading the hardware or switching to Linux. That&#8217;s where Tretlager comes in: the old computer can stay, only the system underneath changes.<\/p>\n\n\n<p class=\"wp-block-paragraph\">There have been ways to run Zwift on Linux for years: setting up Wine by hand, Lutris scripts or the Docker container <a href=\"https:\/\/github.com\/netbrain\/zwift\">netbrain\/zwift<\/a>, which ships Zwift ready to go. I spent a long time trying my way through Wine configurations. In the end it failed at the sign-in, the sensors or the next update, and the sensors mostly only worked through the Companion app on the phone.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Tretlager builds on those attempts and turns them into an application with an assistant. It checks the system, sets up everything Zwift needs and brings its own sensor bridge. That way Zwift works without much Linux know-how.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-split is-layout-flex wp-container-core-columns-is-layout-083dbefd wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef922111e1a&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef922111e1a\" class=\"wp-block-image size-full lui-pj-shot wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-system-check.webp\" alt=\"System check: system, graphics, hybrid graphics, Bluetooth, Avahi, disk space, internet, Wine and Zwift\" class=\"wp-image-322\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-system-check.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-system-check-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-system-check-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-system-check-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-system-check-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">An assistant instead of a wiki page<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Zwift under Wine usually means a long list of commands, .NET installers and registry tweaks. Tretlager walks you through five steps instead. First it checks graphics, Bluetooth, disk space and network without changing anything, and tells you what is missing.<\/p>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-split is-layout-flex wp-container-core-columns-is-layout-083dbefd wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Installs Zwift by itself<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Tretlager brings its own Wine, downloads the official installer straight from Zwift, verifies its signature and sets up fonts, .NET 4.8 and WebView2. Then the Zwift launcher fetches the game. On a normal connection that takes about 15 minutes.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef922112328&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef922112328\" class=\"wp-block-image size-full lui-pj-shot wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup.webp\" alt=\"Setup with finished steps and the download in progress\" class=\"wp-image-321\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-setup-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-split is-layout-flex wp-container-core-columns-is-layout-083dbefd wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef922112680&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef922112680\" class=\"wp-block-image size-full lui-pj-shot wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors.webp\" alt=\"Nearby sensors, paired sensors with live values and the bridge settings\" class=\"wp-image-320\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-sensors-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Trainer and strap without a phone<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Wine can&#8217;t reach Bluetooth sensors. The Tretlager sensor bridge connects to your trainer and heart rate strap over Bluetooth LE and offers them to Zwift on the same computer, the way a Wahoo trainer with Direct Connect would. In Zwift you simply pick \u201cWahoo KICKR \u2026\u201d and \u201cWahoo HRM \u2026\u201d. ERG mode and climbs work.<\/p>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-split is-layout-flex wp-container-core-columns-is-layout-083dbefd wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">One button to ride<\/h2>\n\n\n<p class=\"wp-block-paragraph\">The overview shows sensors, Zwift version, graphics card, Wine and sign-in at a glance. \u201cStart Zwift\u201d uses the NVIDIA card on hybrid laptops. During the ride Tretlager waits in the background, shows live values and tidies up afterwards.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef9221131db&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef9221131db\" class=\"wp-block-image size-full lui-pj-shot wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ready.webp\" alt=\"Overview before the ride: ready, both sensors connected, Zwift up to date\" class=\"wp-image-318\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ready.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ready-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ready-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ready-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-ready-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">What else Tretlager does<\/h2>\n\n\n<div class=\"wp-block-group lui-pj-grid is-4 is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Sign-in that works<\/h3>\n\n\n<p class=\"wp-block-paragraph\">The launcher&#8217;s sign-in page doesn&#8217;t work under Wine. Tretlager opens Zwift&#8217;s own sign-in page in a private window. You type your password into Zwift&#8217;s page, never into Tretlager.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Session in your keyring<\/h3>\n\n\n<p class=\"wp-block-paragraph\">The sign-in is kept in KWallet or GNOME Keyring. Signing out removes it.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Updates without trouble<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Before every start Tretlager brings the Zwift environment in line and lets the launcher install updates. During a Zwift update the overview shows the progress.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Working Wine is kept<\/h3>\n\n\n<p class=\"wp-block-paragraph\">A new Wine version comes with a new Tretlager version. The last working one is kept, and a switch brings it back.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Warns in time<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Tretlager speaks up when the laptop runs on battery or Bluetooth headphones on the bridge&#8217;s adapter crowd out the sensors.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Pick a USB adapter<\/h3>\n\n\n<p class=\"wp-block-paragraph\">If the built-in Bluetooth chip is unreliable or too far away, choose a USB adapter for the bridge.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Screen stays on<\/h3>\n\n\n<p class=\"wp-block-paragraph\">While Zwift starts and runs, Tretlager keeps the screen awake, also during a break without mouse or keyboard.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\">Bug reports<\/h3>\n\n\n<p class=\"wp-block-paragraph\">If something goes wrong, Tretlager saves a report as a ZIP file. Tokens, passwords and email addresses are removed from it.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Tested hardware<\/h2>\n\n\n<figure class=\"wp-block-table lui-pj-req\"><table><tbody><tr><td>Computers<\/td><td>TUXEDO InfinityBook Pro Gen7 (Core i7-12700H, RTX 3050 Ti) with TUXEDO OS and KDE Plasma 6.7; Dell XPS 15 9560 (Core i7-7700HQ, GTX 1050) with Arch Linux and GNOME 51<\/td><\/tr><tr><td>Trainer<\/td><td>Wahoo KICKR V4: power, cadence, ERG mode and climbs<\/td><\/tr><tr><td>Heart rate straps<\/td><td>Wahoo TICKR; Garmin HRM-Pro Plus (ends its connection by itself every 7 to 15 minutes and reconnects)<\/td><\/tr><tr><td>Not supported<\/td><td>ANT+<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Other trainers and straps using the Bluetooth standards FTMS, Cycling Power and Heart Rate should work, but I haven&#8217;t tested them. Details are in the <a href=\"https:\/\/github.com\/linuxundich\/tretlager\/blob\/master\/docs\/HARDWARE.md\">hardware list<\/a>.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-split is-layout-flex wp-container-core-columns-is-layout-083dbefd wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Install<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Your system needs Flatpak with Flathub, BlueZ with a Bluetooth LE adapter, the Avahi daemon and a keyring. Download the Flatpak bundle from GitHub and install it:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>flatpak install --user tretlager-0.11.3-x86_64.flatpak<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If the KDE 6.11 runtime is missing, Flatpak fetches it from Flathub, on NVIDIA systems also the matching driver extension. Bundles don&#8217;t update themselves; new versions are on the release page.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\">\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aef922114461&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aef922114461\" class=\"wp-block-image size-full lui-pj-shot wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-welcome.webp\" alt=\"Welcome page with requirements and the important notes\" class=\"wp-image-323\" srcset=\"https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-welcome.webp 1440w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-welcome-300x200.webp 300w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-welcome-1024x683.webp 1024w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-welcome-768x512.webp 768w, https:\/\/linuxundich.de\/en\/wp-content\/uploads\/2026\/11\/tretlager-welcome-480x320.webp 480w\" sizes=\"auto, (max-width: 781px) 100vw, 680px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n<\/div>\n<\/div>\n\n<section class=\"lui-facts wp-block-lui-app-facts\" aria-label=\"Fact sheet: Tretlager\" data-lui-facts>\n\t<div class=\"lui-facts-head\">\n\t\t<span class=\"lui-facts-icon\" aria-hidden=\"true\">T<\/span>\n\t\t<div>\n\t\t\t<p class=\"lui-facts-name\">Tretlager<\/p>\n\t\t\t\t\t\t\t<p class=\"lui-facts-tagline\">Zwift on Linux, set up in five steps.<\/p>\n\t\t\t\t\t<\/div>\n\t<\/div>\n\t\t\t<dl class=\"lui-facts-list\">\n\t\t\t\t\t\t\t<dt>Version<\/dt>\n\t\t\t\t<dd>0.11.3<\/dd>\n\t\t\t\t\t\t\t<dt>License<\/dt>\n\t\t\t\t<dd>GPL-3.0-or-later<\/dd>\n\t\t\t\t\t\t\t<dt>Tested with<\/dt>\n\t\t\t\t<dd>TUXEDO OS with KDE Plasma 6.7, Arch Linux with GNOME 51, Wahoo KICKR V4<\/dd>\n\t\t\t\t\t\t\t<dt>Project<\/dt>\n\t\t\t\t<dd><a href=\"https:\/\/linuxundich.de\/en\/projects\/tretlager\/\">linuxundich.de\/en\/projects\/tretlager<\/a> \u00b7 <a href=\"https:\/\/github.com\/linuxundich\/tretlager\">Source code<\/a><\/dd>\n\t\t\t\t\t<\/dl>\n\t\t\t\t<div class=\"lui-facts-install\">\n\t\t\t<p class=\"lui-facts-install-title\">Installation<\/p>\n\t\t\t\t\t\t\t<div class=\"lui-facts-cmd\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"lui-facts-cmd-label\">Flatpak bundle<\/span>\n\t\t\t\t\t\t\t\t\t\t<code>flatpak install --user tretlager-0.11.3-x86_64.flatpak<\/code>\n\t\t\t\t\t<button type=\"button\" class=\"lui-facts-copy\" data-lui-facts-copy hidden>Copy<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"lui-facts-cmd\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"lui-facts-cmd-label\">From source<\/span>\n\t\t\t\t\t\t\t\t\t\t<code>git clone https:\/\/github.com\/linuxundich\/tretlager.git &amp;&amp; cd tretlager &amp;&amp; build-aux\/flatpak\/build.sh<\/code>\n\t\t\t\t\t<button type=\"button\" class=\"lui-facts-copy\" data-lui-facts-copy hidden>Copy<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"SoftwareApplication\",\"name\":\"Tretlager\",\"description\":\"Zwift on Linux, set up in five steps.\",\"softwareVersion\":\"0.11.3\",\"license\":\"GPL-3.0-or-later\",\"url\":\"https:\\\/\\\/linuxundich.de\\\/en\\\/projects\\\/tretlager\\\/\",\"operatingSystem\":\"Linux\",\"applicationCategory\":\"UtilitiesApplication\"}<\/script>\n<\/section>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Questions and answers<\/h2>\n\n\n<div class=\"wp-block-group lui-pj-faq is-layout-flow wp-block-group-is-layout-flow\">\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\" open><summary>Is Tretlager an official Zwift app?<\/summary>\n<p class=\"wp-block-paragraph\">No. Tretlager is a private project; Zwift has nothing to do with it and offers no support for it. Please report bugs on GitHub.<\/p>\n<\/details>\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Does Tretlager change Zwift?<\/summary>\n<p class=\"wp-block-paragraph\">No. Zwift is the unmodified Windows game from Zwift&#8217;s servers. Tretlager doesn&#8217;t bypass any sign-in or licence check and sends no telemetry.<\/p>\n<\/details>\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Can I race with it?<\/summary>\n<p class=\"wp-block-paragraph\">Please don&#8217;t. I can&#8217;t guarantee that the bridge always passes power, cadence and heart rate to Zwift correctly.<\/p>\n<\/details>\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Do I need the Companion app?<\/summary>\n<p class=\"wp-block-paragraph\">No. The sensor bridge connects trainer and heart rate strap to the computer directly over Bluetooth LE.<\/p>\n<\/details>\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Does it run on older computers?<\/summary>\n<p class=\"wp-block-paragraph\">Zwift renders with OpenGL and doesn&#8217;t need much power. I&#8217;ve tested Tretlager on two laptops, the older one is an XPS 15 from 2017. Reports about other hardware are very welcome.<\/p>\n<\/details>\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Why not on Flathub?<\/summary>\n<p class=\"wp-block-paragraph\">Flathub doesn&#8217;t accept applications whose manifest was written with AI assistance. That&#8217;s why Tretlager comes as a Flatpak bundle on GitHub.<\/p>\n<\/details>\n<\/div>\n<\/div>\n\n\n<div class=\"wp-block-columns lui-pj-band is-layout-flex wp-container-core-columns-is-layout-083dbefd wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Tried it?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Whether it works for you or not: every report about your computer, trainer and strap helps. Just leave a comment below, no account needed. Bugs are welcome as GitHub issues too.<\/p>\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-buttons lui-get is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button lui-get--github\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/linuxundich\/tretlager\/issues\">Report an issue<\/a><\/div>\n\n\n<div class=\"wp-block-button lui-get--docs\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/github.com\/linuxundich\/tretlager\/blob\/master\/docs\/HARDWARE.md\">Hardware list<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<p class=\"lui-pj-note wp-block-paragraph\">Tretlager is AI-assisted. The code, icons and translations were written with AI assistance, following my directions. I made the decisions, reviewed the results and tested everything on my own devices. Zwift is a trademark of Zwift, Inc.; Wahoo, KICKR and TICKR are trademarks of Wahoo Fitness; Garmin and HRM-Pro are trademarks of Garmin Ltd. Tretlager is not affiliated with any of these companies.<\/p>\n\n\n<div class=\"wp-block-group lui-pj-sec is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\">More projects<\/h2>\n\n\n<ul class=\"wp-block-list lui-pj-more\">\n<li><a href=\"\/en\/projects\/gnomos\/\">Gnomos<\/a>Sonos on Linux<\/li>\n\n\n<li><a href=\"\/en\/projects\/pulsgeber\/\">Pulsgeber<\/a>TUXEDO profiles in GNOME<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Tretlager brings Zwift to Linux: an assistant for Wine, sign-in and a Bluetooth bridge for smart trainers and heart rate straps, no Companion app. Unofficial, as a Flatpak.<\/p>\n","protected":false},"author":2,"featured_media":319,"parent":137,"menu_order":4,"comment_status":"open","ping_status":"closed","template":"","meta":{"lui_source_id":48609,"lui_source_hash":"","lui_source_translated":"2026-11-06","lui_source_reviewed":false,"footnotes":""},"class_list":["post-325","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/comments?post=325"}],"version-history":[{"count":5,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/325\/revisions"}],"predecessor-version":[{"id":351,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/325\/revisions\/351"}],"up":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/pages\/137"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media\/319"}],"wp:attachment":[{"href":"https:\/\/linuxundich.de\/en\/wp-json\/wp\/v2\/media?parent=325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}