<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Kryll³ Blog |  Your Web3 AI Sidekick]]></title><description><![CDATA[Kryll³ AI tool suite provide clear and actionable web3 insights. We make the intricate world of cryptocurrencies accessible to everyone. ]]></description><link>https://blog.kryll.io/</link><image><url>https://blog.kryll.io/favicon.png</url><title>Kryll³ Blog |  Your Web3 AI Sidekick</title><link>https://blog.kryll.io/</link></image><generator>Ghost 3.6</generator><lastBuildDate>Thu, 13 Aug 2026 08:58:26 GMT</lastBuildDate><atom:link href="https://blog.kryll.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[KryllOS 0.5.41 update: a real terminal, right inside the app]]></title><description><![CDATA[The KryllOS 0.5.41 update brings a real terminal right inside the app. Your server's shell, one click away.]]></description><link>https://blog.kryll.io/kryllos-0-5-41-update-built-in-terminal/</link><guid isPermaLink="false">6a7b2dd7d9e60f88cb3b87aa</guid><category><![CDATA[announcements]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Tue, 11 Aug 2026 14:29:33 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/08/thumbnail.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/thumbnail-rounded.png" class="kg-image" alt="KryllOS 0.5.41 update: a real terminal, right inside the app"></figure><img src="https://blog.kryll.io/content/images/2026/08/thumbnail.png" alt="KryllOS 0.5.41 update: a real terminal, right inside the app"><p>With KryllOS, you've never needed a command line. You build your strategies, you backtest them, you run them, all from the interface, and that's exactly how it should be. Most people will never go any further, and they're right not to.</p><p>But there's the other crowd. The folks who like being hands-on with their machine, peeking under the hood, running their own stuff, basically tinkering. For them, there was a wall: their KryllOS runs on a VPS, and getting to that VPS meant leaving the app and wrestling with an SSH client, a key, an address, a port.</p><p>0.5.41 cuts straight to the prompt. KryllOS ships a real terminal, and it opens your VPS's shell right inside the app. If you're the type who's been itching for this, the rest is for you.</p><hr><h2 id="a-real-terminal-your-vps-s-shell">A real terminal, your VPS's shell</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/kryllos-terminal.png" class="kg-image" alt="KryllOS 0.5.41 update: a real terminal, right inside the app"></figure><p>Let's be clear about what this is, because that's the whole point. What you type in this terminal runs on your VPS, in a real shell, opened as your user, right in your KryllOS working folder.</p><p>The difference is that there's nothing for you to connect. Normally, opening a command line on your VPS calls for an SSH client, a key you have to keep safe, an address and a port to remember. KryllOS already holds that secure connection to your server, and the terminal rides on it. You open the <code>Terminal</code> app, and you're in. Nothing to install, nothing to dig up, nothing to mistype.</p><p><strong>Where to find it</strong></p><ul><li>Open the <code>Terminal</code> app, alongside your other KryllOS apps</li><li>It opens on your VPS's shell, in your working folder: type <code>ls</code> to see your strategies</li></ul><hr><h2 id="it-behaves-like-your-real-terminal">It behaves like your real terminal</h2><p>The fastest way to convince yourself is to type a command. <code>pm2 list</code>, and your KryllOS engine's status shows up in a color-coded table. <code>top</code>, and you get the full-screen system monitor refreshing on its own. <code>nano</code>, and a real text editor opens right in the window.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/kryllos-terminal-pm2-list.png" class="kg-image" alt="KryllOS 0.5.41 update: a real terminal, right inside the app"></figure><p>And it has all the muscle memory you know: <code>Tab</code> completes your paths, the up arrow brings back your last command, <code>Ctrl+R</code> digs through your history, and that history remembers you from one session to the next. If you already live in a terminal, you'll feel right at home.</p><hr><h2 id="watch-your-engine-live">Watch your engine, live</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/pm2-logs-kryllos.png" class="kg-image" alt="KryllOS 0.5.41 update: a real terminal, right inside the app"></figure><p>Your bot runs on its own, and most of the time you don't need to watch it. But the day you want to understand what it's up to, out of curiosity or because something looks off, the terminal shows you live. Type <code>pm2 logs kryllos</code>, and your engine's activity starts scrolling by: the strategies running, the events, any errors, the moment they happen. Do something in the app, and you watch the lines write themselves right in front of you. <code>Ctrl+C</code> once you've seen what you came for.</p><hr><h2 id="make-it-your-playground">Make it your playground</h2><p>It's a real shell, so you do whatever you want with it. You set up aliases to park your go-to commands behind a short name. You write your own little script, drop it into your KryllOS space, run it, and it shows up in your file manager like everything else. Anything you'd do on any Linux server, you can do right here, without leaving the app. Maybe that's the real luxury: your server becomes a place you get your hands into again, not a sealed box.</p><h3 id="good-to-know">Good to know</h3><p>A couple of things before you dive in. The terminal opens one window at a time, no tabs. If you close it, whatever was running inside stops with it: to launch something that should keep going without you, put <code>nohup</code> in front of your command and an <code>&amp;</code> at the end. It's a normal shell, not an admin account: commands that touch the system will ask you for a password. And keep your SSH access on hand: this terminal is served by KryllOS itself, so the day the app stops responding, SSH is how you'll go restart it. A fantastic shortcut for day-to-day use, not your only way in.</p><hr><p>You could go your whole life without ever opening this terminal, and your KryllOS would run just the same. The interface is enough to keep your strategies going, and it will. But if the urge takes you to poke around, your VPS is no longer a distant machine behind a wall of SSH: it's a server you open with one click, where you can step in, look around, tinker, like it's home.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS 0.5.41 update: a real terminal, right inside the app" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS 0.5.38 update: your chart and backtest results become companion apps]]></title><description><![CDATA[KryllOS 0.5.38 pops your chart and backtest results out into synced companion apps. Set up your workspace the way you like, on one screen or several.]]></description><link>https://blog.kryll.io/kryllos-0-5-38-update-your-chart-and-backtest-results-become-companion-apps/</link><guid isPermaLink="false">6a747d2bd9e60f88cb3b8748</guid><category><![CDATA[announcements]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Thu, 06 Aug 2026 12:31:01 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/08/Frame-1000001798-2.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/Frame-1000001798.png" class="kg-image" alt="KryllOS 0.5.38 update: your chart and backtest results become companion apps"></figure><img src="https://blog.kryll.io/content/images/2026/08/Frame-1000001798-2.png" alt="KryllOS 0.5.38 update: your chart and backtest results become companion apps"><p>Everyone trades their own way, and above all, everyone trades on their own hardware. A laptop off in the corner of a table, one ultra-wide screen, or two or three monitors lined up on a desk. Your workspace is yours, and you like to set it up however feels right.</p><p>Until now, the KryllOS editor kept to a single window. One solid block, with its tabs, its chart folded up at the top, and its backtest results boxed into the same frame. Whether you were on a 13-inch screen or had three monitors to work with, all that room around it went to waste.</p><p>KryllOS 0.5.38 opens things up. Your chart and your backtest results can now leave the editor as companion apps: real standalone windows you arrange however you want. You're no longer stuck with one fixed layout, you build your own. And the more screen space you have, the more you'll get out of it ;)</p><hr><h2 id="detach-your-chart-and-results">Detach your chart and results</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/Frame-1000001797-1.png" class="kg-image" alt="KryllOS 0.5.38 update: your chart and backtest results become companion apps"></figure><p>It all starts with one icon. A single click, and both windows detach at once: the editor closes its inner panels and goes full screen, your chart shoots out to one side, your backtest results to the other. Two windows in their own right, all yours.</p><p>From there, you're in charge. You move them, resize them, drop them wherever works for you: side by side on a big screen, or straight onto a second monitor if you have one. Editor on one side, your chart and results on the other, everything in view at once.</p><hr><h2 id="switch-strategies-your-windows-follow">Switch strategies, your windows follow</h2><!--kg-card-begin: html--><div id="kryll-compare-9f3a" style="display:block;margin:0;padding:0;border:0;max-width:100%"><img src="https://blog.kryll.io/content/images/2026/08/kryllos-editor-companion-apps-odayakawa-2.png" alt="KryllOS 0.5.38 update: your chart and backtest results become companion apps" style="display:block;width:100%;height:auto;border-radius:14px"></div>
<script>
(function () {
  "use strict";

  var CFG = {
    hostId: "kryll-compare-9f3a",
    leftSrc: "https://blog.kryll.io/content/images/2026/08/kryllos-editor-companion-apps-odayakawa-2.png",
    leftAlt: "KryllOS, stratégie Odayakawa : éditeur, graphique BNB/USDT et résultats de backtest",
    leftLabel: "Odayakawa",
    rightSrc: "https://blog.kryll.io/content/images/2026/08/kryllos-editor-companion-apps-smart-DCA-2.png",
    rightAlt: "KryllOS, stratégie Smart DCA : éditeur, graphique BTC/USDT et résultats de backtest",
    rightLabel: "Smart DCA",
    ratio: "1920 / 1054",
    minPos: 6,
    maxPos: 94,
    travelMs: 2250,
    holdMs: 400,
    resumeMs: 2500,
    dragThreshold: 8,
    accent: "#a78bfa",
    radius: "14px"
  };

  var SPAN    = CFG.maxPos - CFG.minPos;
  var LEG     = CFG.travelMs + CFG.holdMs;
  var CYCLE   = LEG * 2;
  var SAMPLES = 40;

  function ease(x) { return 0.5 - 0.5 * Math.cos(Math.PI * x); }

  function posAt(t) {
    t = ((t % CYCLE) + CYCLE) % CYCLE;
    if (t < CFG.travelMs) return CFG.minPos + SPAN * ease(t / CFG.travelMs);
    if (t < LEG) return CFG.maxPos;
    var u = t - LEG;
    if (u < CFG.travelMs) return CFG.maxPos - SPAN * ease(u / CFG.travelMs);
    return CFG.minPos;
  }

  function timeForPos(p, backward) {
    var x = Math.min(1, Math.max(0, (p - CFG.minPos) / SPAN));
    var t = Math.acos(1 - 2 * x) / Math.PI * CFG.travelMs;
    return backward ? (LEG + CFG.travelMs - t) : t;
  }

  function timeline() {
    var ts = [], i;
    for (i = 0; i <= SAMPLES; i++) ts.push(CFG.travelMs * i / SAMPLES);
    ts.push(LEG);
    for (i = 1; i <= SAMPLES; i++) ts.push(LEG + CFG.travelMs * i / SAMPLES);
    ts.push(CYCLE);
    return ts;
  }

  function template() {
    return '' +
    '<style>' +
      ':host{all:initial;display:block;contain:layout style;max-width:100%}' +
      '*{box-sizing:border-box;margin:0;padding:0}' +
      '.frame{' +
        'position:relative;display:block;width:100%;overflow:hidden;' +
        'aspect-ratio:' + CFG.ratio + ';' +
        'border-radius:' + CFG.radius + ';' +
        'background:#0b0714;cursor:ew-resize;touch-action:pan-y;' +
        'user-select:none;-webkit-user-select:none;' +
        'font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;' +
        '-webkit-tap-highlight-color:transparent;' +
        'box-shadow:0 1px 2px rgba(0,0,0,.28),0 12px 32px -12px rgba(0,0,0,.5);' +
        'outline:none' +
      '}' +
      '.frame:focus-visible{box-shadow:0 0 0 3px ' + CFG.accent + '66,0 12px 32px -12px rgba(0,0,0,.5)}' +
      '.layer{position:absolute;top:0;left:0;width:100%;height:100%}' +
      '.layer img{' +
        'display:block;width:100%;height:100%;object-fit:cover;' +
        'border:0;border-radius:0;max-width:none;' +
        'user-select:none;-webkit-user-drag:none;pointer-events:none' +
      '}' +
      '.mask{overflow:hidden;will-change:transform}' +
      '.mask img{will-change:transform}' +
      '.rail{' +
        'position:absolute;top:0;left:0;width:100%;height:100%;' +
        'will-change:transform;pointer-events:none' +
      '}' +
      '.line{' +
        'position:absolute;top:0;bottom:0;left:0;width:2px;margin-left:-1px;' +
        'background:linear-gradient(180deg,' +
          'rgba(167,139,250,0) 0%,' + CFG.accent + ' 10%,' + CFG.accent + ' 90%,rgba(167,139,250,0) 100%);' +
        'box-shadow:0 0 12px ' + CFG.accent + '80' +
      '}' +
      '.grip{' +
        'position:absolute;top:50%;left:0;width:44px;height:44px;margin:-22px 0 0 -22px;' +
        'border-radius:50%;display:flex;align-items:center;justify-content:center;gap:1px;' +
        'background:rgba(14,10,26,.92);border:2px solid ' + CFG.accent + ';' +
        'box-shadow:0 0 0 4px rgba(167,139,250,.14),0 4px 14px rgba(0,0,0,.45)' +
      '}' +
      '.grip svg{display:block;width:13px;height:13px;fill:none;' +
        'stroke:#efeaff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}' +
      '.tag{' +
        'position:absolute;top:14px;padding:5px 11px;border-radius:999px;' +
        'font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;' +
        'line-height:1.4;white-space:nowrap;color:#efeaff;' +
        'background:rgba(10,7,20,.78);border:1px solid rgba(167,139,250,.38);' +
        'pointer-events:none;will-change:opacity' +
      '}' +
      '.tag-l{left:14px}' +
      '.tag-r{right:14px}' +
      '@media (max-width:520px){' +
        '.grip{width:36px;height:36px;margin:-18px 0 0 -18px}.grip svg{width:11px;height:11px}' +
        '.tag{top:9px;font-size:9px;padding:4px 8px}.tag-l{left:9px}.tag-r{right:9px}' +
      '}' +
    '</style>' +
    '<div class="frame" role="slider" tabindex="0"' +
        ' aria-label="Comparer ' + CFG.leftLabel + ' et ' + CFG.rightLabel + '"' +
        ' aria-valuemin="' + CFG.minPos + '" aria-valuemax="' + CFG.maxPos + '" aria-valuenow="' + CFG.minPos + '"' +
        ' aria-valuetext="' + CFG.leftLabel + ' à ' + CFG.minPos + ' %">' +
      '<div class="layer"><img src="' + CFG.rightSrc + '" alt="' + CFG.rightAlt + '" loading="lazy" decoding="async"></div>' +
      '<div class="layer mask"><img src="' + CFG.leftSrc + '" alt="' + CFG.leftAlt + '" loading="lazy" decoding="async"></div>' +
      '<span class="tag tag-l">' + CFG.leftLabel + '</span>' +
      '<span class="tag tag-r">' + CFG.rightLabel + '</span>' +
      '<div class="rail">' +
        '<div class="line"></div>' +
        '<div class="grip">' +
          '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M15 5 8 12l7 7"/></svg>' +
          '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M9 5l7 7-7 7"/></svg>' +
        '</div>' +
      '</div>' +
    '</div>';
  }

  function init(host) {
    if (!host || host.getAttribute("data-kc-ready")) return;
    host.setAttribute("data-kc-ready", "1");
    if (!host.attachShadow) return;

    var root = host.attachShadow({ mode: "open" });
    root.innerHTML = template();

    var frame   = root.querySelector(".frame");
    var mask    = root.querySelector(".mask");
    var maskImg = root.querySelector(".mask img");
    var rail    = root.querySelector(".rail");
    var tagL    = root.querySelector(".tag-l");
    var tagR    = root.querySelector(".tag-r");

    var canAnimate = typeof frame.animate === "function";
    var anims = [];
    var dragging = false, visible = true, backward = false;
    var resumeTimer = null, lastAria = -1;
    var staticPos = CFG.minPos, dragFrom = 0;
    var activeId = null, armed = false, startX = 0, startY = 0;

    var reduceMQ = window.matchMedia
      ? window.matchMedia("(prefers-reduced-motion: reduce)")
      : { matches: false, addEventListener: null };

    function tMask(p)    { return "translate3d(" + (-(100 - p)).toFixed(3) + "%,0,0)"; }
    function tMaskImg(p) { return "translate3d(" +  (100 - p).toFixed(3) + "%,0,0)"; }
    function tRail(p)    { return "translate3d(" +  p.toFixed(3) + "%,0,0)"; }
    function opL(p)      { return p > 16 ? 1 : Math.max(0, (p - 3) / 13); }
    function opR(p)      { return p < 84 ? 1 : Math.max(0, (97 - p) / 13); }

    function paint(p) {
      mask.style.transform    = tMask(p);
      maskImg.style.transform = tMaskImg(p);
      rail.style.transform    = tRail(p);
      tagL.style.opacity      = opL(p);
      tagR.style.opacity      = opR(p);
    }

    function announce(p) {
      var r = Math.round(p);
      if (r === lastAria) return;
      lastAria = r;
      frame.setAttribute("aria-valuenow", String(r));
      frame.setAttribute("aria-valuetext", CFG.leftLabel + " à " + r + " %");
    }

    function build(startTime, play) {
      var ts = timeline();
      var kMask = [], kImg = [], kRail = [], kL = [], kR = [];
      for (var i = 0; i < ts.length; i++) {
        var off = ts[i] / CYCLE, p = posAt(ts[i]);
        kMask.push({ offset: off, transform: tMask(p) });
        kImg.push({ offset: off, transform: tMaskImg(p) });
        kRail.push({ offset: off, transform: tRail(p) });
        kL.push({ offset: off, opacity: opL(p) });
        kR.push({ offset: off, opacity: opR(p) });
      }
      var timing = { duration: CYCLE, iterations: Infinity, easing: "linear" };
      anims = [
        mask.animate(kMask, timing),
        maskImg.animate(kImg, timing),
        rail.animate(kRail, timing),
        tagL.animate(kL, timing),
        tagR.animate(kR, timing)
      ];
      for (var j = 0; j < anims.length; j++) {
        anims[j].currentTime = startTime;
        if (!play) anims[j].pause();
      }
    }

    function currentPos() {
      return anims.length ? posAt(Number(anims[0].currentTime) || 0) : CFG.minPos;
    }

    function sync() {
      if (!anims.length) return;
      var run = visible && !document.hidden && !dragging
             && resumeTimer === null && !reduceMQ.matches;
      for (var i = 0; i < anims.length; i++) {
        if (run) anims[i].play(); else anims[i].pause();
      }
    }

    function holdThenResume() {
      if (resumeTimer !== null) clearTimeout(resumeTimer);
      resumeTimer = window.setTimeout(function () {
        resumeTimer = null;
        sync();
      }, CFG.resumeMs);
      sync();
    }

    function posFromEvent(e) {
      var r = frame.getBoundingClientRect();
      if (!r.width) return CFG.minPos;
      var p = ((e.clientX - r.left) / r.width) * 100;
      return Math.min(CFG.maxPos, Math.max(CFG.minPos, p));
    }

    function applyManual(p) {
      if (!canAnimate) { staticPos = p; paint(p); announce(p); return; }
      var t = timeForPos(p, backward);
      for (var i = 0; i < anims.length; i++) anims[i].currentTime = t;
      announce(p);
    }

    function beginDrag() {
      armed = false;
      dragging = true;
      dragFrom = canAnimate ? currentPos() : staticPos;
      sync();
    }

    frame.addEventListener("pointerdown", function (e) {
      if (e.button !== undefined && e.button !== 0) return;
      if (activeId !== null) return;
      activeId = e.pointerId;
      startX = e.clientX;
      startY = e.clientY;
      if (frame.setPointerCapture) { try { frame.setPointerCapture(e.pointerId); } catch (err) {} }
      if (e.pointerType === "touch") {
        armed = true;
      } else {
        beginDrag();
        applyManual(posFromEvent(e));
      }
    });

    frame.addEventListener("pointermove", function (e) {
      if (e.pointerId !== activeId) return;
      if (armed) {
        var dx = Math.abs(e.clientX - startX), dy = Math.abs(e.clientY - startY);
        if (dx < CFG.dragThreshold || dx <= dy) return;
        beginDrag();
      }
      if (!dragging) return;
      if (e.cancelable) e.preventDefault();
      var p = posFromEvent(e);
      if (Math.abs(p - dragFrom) > 0.5) { backward = p < dragFrom; dragFrom = p; }
      applyManual(p);
    });

    function endDrag(e) {
      if (e.pointerId !== activeId) return;
      activeId = null;
      if (frame.releasePointerCapture) { try { frame.releasePointerCapture(e.pointerId); } catch (err) {} }
      if (armed) { armed = false; return; }
      if (!dragging) return;
      dragging = false;
      holdThenResume();
    }
    frame.addEventListener("pointerup", endDrag);
    frame.addEventListener("pointercancel", endDrag);

    frame.addEventListener("keydown", function (e) {
      var step = e.shiftKey ? 10 : 3, from = canAnimate ? currentPos() : staticPos, next = null;
      if (e.key === "ArrowLeft")       next = from - step;
      else if (e.key === "ArrowRight") next = from + step;
      else if (e.key === "Home")       next = CFG.minPos;
      else if (e.key === "End")        next = CFG.maxPos;
      if (next === null) return;
      e.preventDefault();
      next = Math.min(CFG.maxPos, Math.max(CFG.minPos, next));
      backward = next < from;
      applyManual(next);
      holdThenResume();
    });

    if (window.IntersectionObserver) {
      new IntersectionObserver(function (entries) {
        visible = entries[entries.length - 1].isIntersecting;
        sync();
      }, { threshold: 0.05 }).observe(host);
    }

    document.addEventListener("visibilitychange", sync);

    if (reduceMQ.addEventListener) {
      reduceMQ.addEventListener("change", function () {
        if (reduceMQ.matches) applyManual(50);
        sync();
      });
    }

    if (!canAnimate) {
      staticPos = 50;
      paint(50);
      announce(50);
      return;
    }
    build(reduceMQ.matches ? timeForPos(50, false) : 0, false);
    announce(reduceMQ.matches ? 50 : CFG.minPos);
    sync();
  }

  function boot() {
    var list = document.querySelectorAll('[id="' + CFG.hostId + '"]');
    for (var i = 0; i < list.length; i++) init(list[i]);
  }

  if (document.readyState === "loading") {
    document.addEventListener("DOMContentLoaded", boot);
  } else {
    boot();
  }
})();
</script><!--kg-card-end: html--><p>Your detached windows stay wired to the editor: change something on one side and it updates on the other. But the real convenience kicks in when you switch strategies.</p><p>Your editor doesn't hold just one strategy: each tab is one. When you move from one tab to another, your whole setup follows all at once. The results window shows the backtest for the new strategy, the chart switches to the right curve with its indicators and positions, the editor shows the right blocks. You switch strategies, and your entire workstation reconfigures itself.</p><hr><h2 id="the-lock-freeze-a-window-in-place">The lock: freeze a window in place</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/08/Frame-1000001799.png" class="kg-image" alt="KryllOS 0.5.38 update: your chart and backtest results become companion apps"></figure><p>Your windows follow your editor, but sometimes you want one of them to stop moving: to hold it on a specific result while you go back to tweaking your strategy on the side. That's what the lock is for.</p><p>Each companion app carries a small icon that shows its state: a chain link when it's tied to the editor, a padlock when it's frozen. You click, the link turns into a padlock, and the window stays on its version no matter what you do next.</p><p>That's what makes comparing versions possible. You freeze one strategy's backtest, go back and change an indicator or a level, and run it again. On one side your new result, on the other the old one, still frozen, right there to compare. You unlock when you're done, and the window resyncs.</p><hr><p>At its core, 0.5.38 tears down the walls of the editor. Your chart, your results, and your strategy no longer fight over a single window: each gets its own, you organize them however makes sense to you, and everything stays connected to what you're building. Your second screen finally has a reason to exist, and running two ideas in parallel is no longer a window-juggling headache. Update to 0.5.38, pop your chart and results out, and give them some room at last ;)</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS 0.5.38 update: your chart and backtest results become companion apps" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches]]></title><description><![CDATA[The KryllOS 0.5.35 update brings the Multi-Backtest app: build your list, launch it, and it clears itself across your available engines.]]></description><link>https://blog.kryll.io/kryllos-0-5-35-multi-backtest-batches/</link><guid isPermaLink="false">6a675358d9e60f88cb3b863c</guid><category><![CDATA[announcements]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Tue, 28 Jul 2026 12:37:48 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/07/MULTIBACKTEST-thumbnail.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-289.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><img src="https://blog.kryll.io/content/images/2026/07/MULTIBACKTEST-thumbnail.png" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"><p>Version <a href="https://blog.kryll.io/kryllos-0-5-32-update-parallel-backtests-memory/">0.5.32</a> unlocked parallelism: multiple engines, each on its own core, plus slots to advance several backtests per engine. The idea was to launch a whole batch of backtests at once, without waiting for each one to finish before starting the next. What was missing was the tool to build that batch. You were still launching your backtests one at a time: open a tab, configure it, run it, then start over for every pair, every timeframe, every variant.</p><p>That's what 0.5.35 brings: the Multi-Backtest app. You build your list of backtests once, launch the whole thing, and it clears itself across the available engines while you work on something else.</p><hr><h2 id="the-multi-backtest-app">The Multi-Backtest app</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-270.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p>Multi-Backtest is a list of runs. Each row is a backtest ready to go, with its strategy, platform, pair, and timeframe. Nothing forces you to stick to a single strategy: you can stack the same one across ten pairs, ten different strategies, or any mix of the two. You build the list, you launch it, that's it.</p><hr><h3 id="adding-a-strategy-to-the-list">Adding a strategy to the list</h3><p>Two paths, depending on where you are :</p><p><strong>From the editor</strong>, the <code>Add to multi-backtest</code> button sends the open strategy to the list along with its current configuration platform, pair, and timeframe already set. Switch pairs, click again, and the row gets added to the list.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-272-1.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p><strong>From the file manager</strong>, right-clicking a strategy offers the same <code>Add to multi-backtest</code> option. The difference: it arrives unconfigured, since you haven't opened it. You'll need to set it up before running it.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-275-1.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p><strong>How to add a backtest to the list</strong></p><ul><li>From the editor, set your platform, pair, and timeframe, then click <code>Add to multi-backtest</code></li><li>Or right-click a strategy in the file manager, then <code>Add to multi-backtest</code></li><li>Repeat as many times as needed, each addition stacks onto the list</li></ul><hr><h3 id="configuring-and-duplicating-your-backtests">Configuring and duplicating your backtests</h3><p>A row can be edited at any time. Double-clicking it, or right-clicking and selecting <code>Edit</code>, opens its run settings: platform, pair, timeframe. Adjust, hit <code>Save</code>, and the row is ready.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-265.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-266.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><hr><p><code>Duplicate</code> is the move that saves the most time. Configure one row correctly, duplicate it, and on the copy only change what varies, the pair or the timeframe. One on ETH, one on Solana, one on last year. In a few clicks, you've built a full series without ever re-entering the same settings twice.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-263.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p><strong>How to set up a series</strong></p><ul><li>Double-click a row (or right-click then <code>Edit</code>) to open its run settings</li><li>Set the platform, pair, and timeframe, then <code>Save</code></li><li>Right-click then <code>Duplicate</code> to copy the row</li><li>On the copy, only change what varies, the pair or the timeframe</li></ul><hr><h2 id="run-your-whole-list-in-one-click">Run your whole list in one click</h2><p>List ready? The <code>Run All</code> button launches everything. One click, and you no longer have to come back and trigger each backtest yourself: whatever can start right away does, and the rest waits its turn, kicking in automatically as engines free up. Your list clears itself.</p><p>In practice: testing ten pairs one at a time means ten round trips configure, launch, wait, repeat. With Multi-Backtest, it's one list built once and a single Run All. The time you used to spend clicking, you now spend analyzing.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-267.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><hr><h2 id="how-many-backtests-can-run-at-the-same-time-on-kryllos">How many backtests can run at the same time on KryllOS?</h2><p>That depends on what you've set in <code>Settings &gt; Performance</code>, under "Parallel backtests," with the two sliders introduced in 0.5.32:</p><ul><li><code>Backtest engines</code>: the number of engines running in parallel, each on its own core. This is the real speed lever, the more you have, the sooner your batch finishes. KryllOS detects your available cores and recommends a value suited to your machine.</li><li><code>Multiplexed slots</code>: several backtests sharing the same engine, each advancing in turn. None of them run faster, but they all progress together.</li></ul><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/0.5.32-performances-1.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p>The total follows the formula shown at the top of the panel: <code>moteurs × slots</code>. Two engines and two slots means four backtests running at once, with the rest of your list following behind. That's exactly what multiplexed slots were built for: launching a whole batch without waiting for each one to finish. Multi-Backtest is the tool that feeds those engines.</p><hr><h2 id="cleaning-up-the-multi-backtest-list">Cleaning up the Multi-Backtest list</h2><p>Each row shows its own progress bar, handy for longer strategies where a run takes a while. You can see at a glance what's running, what's waiting, and what's done.</p><p>Two buttons for wrapping up a series. <code>Clear</code> removes finished runs from the list and keeps the view tidy. <code>Cancel all</code> stops everything, including runs still in progress, and cleans up after itself.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-273.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><hr><h2 id="-backtest-files">.backtest files</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-274.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p>Every backtest produces a <code>.backtest</code>. Until now, it was on you to save it, using the floppy disk icon. Multi-Backtest does it automatically for every run in your list, under a default name that includes the strategy, the pair, and the timestamp. Your results are kept without you having to think about it, and you know which is which without opening them.</p><p>A <code>.backtest</code> file is self-contained: it holds the strategy, the run, and the logs, all in a single file.</p><h3 id="finding-your-backtests-in-the-file-manager">Finding your backtests in the file manager</h3><p>In the file manager, the <code>backtests</code> section groups together all your saved backtests, both from Multi-Backtest and the ones you save manually. The file manager now refreshes every time it's displayed, so whatever you just launched is already there, and its side navigation is freer to use.</p><hr><h2 id="opening-your-backtests-and-their-linked-strategy">Opening your backtests and their linked strategy</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-287-1.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p>A backtest can be reopened in the editor with its full results, exactly as they were at the end of the run. Since your strategy may have changed in the meantime, KryllOS handles the different cases:</p><ul><li>The tab is already open elsewhere: it takes you back to it instead of creating a duplicate.</li><li>You've moved a block since then: it still finds the right strategy.</li><li>You've edited the strategy: it opens a new tab with the version that was actually backtested, since it's no longer the same one.</li><li>The strategy is no longer on your drive: it asks whether you want to cancel, or open the version that was backtested.</li></ul><hr><h2 id="sharing-a-backtest">Sharing a backtest</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/image-288.png" class="kg-image" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches"></figure><p>Since the file contains everything, you can hand it over. <code>Export to zip</code> packages the whole thing. On the other end, the person opens your strategy, reviews the backtest and its source code, and can rerun it themselves to verify. A result you're presenting is no longer a screenshot, it's a full test the other person can replay.</p><hr><p>0.5.35 brings two things: the Multi-Backtest app, which builds and runs your backtests in batches while you work on something else, and automatic saving of runs as organized, reopenable, shareable files. Update to 0.5.35, stack a few pairs into Multi-Backtest, and click <code>Run All</code>.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS 0.5.35 update: the Multi-Backtest app for running your backtests in batches" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS 0.5.32 Update: Parallel Backtests and RAM Management]]></title><description><![CDATA[The KryllOS 0.5.32 update lets you run your backtests in parallel and puts you back in control of your RAM.]]></description><link>https://blog.kryll.io/kryllos-0-5-32-update-parallel-backtests-memory/</link><guid isPermaLink="false">6a5f77fcd9e60f88cb3b8547</guid><category><![CDATA[announcements]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Tue, 21 Jul 2026 14:03:56 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/07/concurrent-backtests-thumbnail-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/Frame-1000001793.png" class="kg-image" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management"></figure><img src="https://blog.kryll.io/content/images/2026/07/concurrent-backtests-thumbnail-1.png" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management"><p>Until now, a backtest on KryllOS ran on a single core, and only one at a time. No matter how many cores were available on your machine, it was impossible to launch a second one while the first was running. 0.5.32 changes that in a fundamental way: backtests can now run across multiple cores in parallel, so you can launch several at once. This release also brings better tracking and better RAM management.</p><hr><h2 id="parallel-backtests">Parallel backtests</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/0.5.32-concurrent-backtest.png" class="kg-image" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management"></figure><p>With 0.5.32, you can finally run several backtests at the same time, each on its own core. Where you used to have to wait for one backtest to finish before starting the next, you can now open several tabs and run them simultaneously, a real time-saver when you're testing multiple versions of a strategy or several pairs in parallel.</p><h3 id="configuring-allocated-power">Configuring allocated power</h3><p>How many backtests you can actually run at once depends on the power of your machine, and more specifically on the number of cores available on your VPS. To make the most of it, head to <code>Settings &gt; Performance</code>, under "Parallel backtests," where two sliders give you control over this allocation.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/0.5.32-performances.png" class="kg-image" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management"></figure><ul><li><strong>Backtest engines</strong>: the number of active engines running in parallel, each on its own core. This is the real speed lever, more engines means more backtests moving at full speed at the same time. KryllOS automatically detects your available cores and recommends a value suited to your machine (it always keeps some in reserve for your live trading).</li><li><strong>Multiplexed slots</strong>: several backtests sharing a single engine, each taking its turn. They all progress "at the same time," but none of them runs any faster than if it were running alone, the total time for the batch stays the same, it's just split between them. The point isn't speed but convenience, launching a whole batch of backtests at once, without waiting for each one to finish before moving to the next.</li></ul><p>The total number of backtests you can launch follows the formula shown at the top of the panel: <strong>engines × slots</strong>. The panel also displays an estimate of the RAM required.</p><h3 id="how-to-set-up-your-parallel-backtests">How to set up your parallel backtests</h3><ul><li>Open <code>Settings</code>,then <code>Performance</code></li><li>Increase <code>Backtest engines</code> for real speed, within the recommended limit for your machine</li><li>Increase <code>Multiplexed slots</code> to move several backtests forward per engine, with no speed gain</li><li>Click <code>Apply</code></li></ul><p><em>*Reducing the number of engines never interrupts a backtest that's already running.</em></p><hr><h2 id="ram-under-control">RAM under control</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/0.5.32-memory.png" class="kg-image" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management"></figure><p>The second panel, <code>Settings &gt; Memory</code>, gives you visibility into what KryllOS is actually consuming. You can see memory usage, engine by engine, and an alert warns you in real time when RAM or disk usage climbs too high.</p><p>KryllOS keeps candles and indicators in memory from one backtest to the next to stay fast, instead of reloading everything each time. That's a good trade-off, but over a long session, this memory builds up. KryllOS already cleans it up automatically past a certain threshold. And to take back control immediately, a "Clear RAM" button frees up memory on demand.</p><p>This cleanup never touches a backtest that's currently running. It only clears stopped engines. If two backtests are running, Clear RAM leaves them alone. If you stop one and then clean up, only that one gets cleared. If you restart it afterward, the data reloads and memory goes back up, that's normal, it's the cache doing its job again.</p><hr><h2 id="strategy-logs-on-demand">Strategy logs, on demand</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/0.5.32-emit-logs.png" class="kg-image" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management"></figure><p>Still in the <code>Performance</code> panel, a useful setting: "Emit strategy logs." When enabled, KryllOS produces server-side logs. This is useful when an indicator isn't doing what you expect and you want to see, step by step, exactly when it's waiting and when it triggers.</p><p>When disabled, no lines are produced, not in memory, not in the stream, not on disk, and your backtest runs a bit lighter without that writing overhead. Turn it on when you're debugging, turn it off when you want to optimize for speed.</p><hr><h2 id="a-backtest-engine-that-cleans-up-after-itself">A backtest engine that cleans up after itself</h2><p>These settings hold up thanks to background work on the engine's memory consumption.</p><p>First, a new way of reading market data, organized in columns, which lowers a backtest's peak memory usage by about 36%. Each backtest leaves more room for the others, which means more of them can run before the machine gets saturated.</p><p>Next, engines no longer hold onto RAM when they're not in use. An idle engine frees its memory and shuts down automatically, then powers back up on demand as soon as a backtest is restarted. Memory is only consumed by what's actually working.</p><p>Finally, a backtest's results are no longer kept in memory once the run is finished. They're released, and to export them, KryllOS reads them back from disk.</p><hr><p>0.5.32 brings two things: real backtest parallelism, and visibility into RAM. Update to 0.5.32, take a look through Performance and Memory, then launch two backtests at once to see the difference.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS 0.5.32 Update: Parallel Backtests and RAM Management" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS 0.5.29 Update: Backtests Up to 4× Faster]]></title><description><![CDATA[The KryllOS 0.5.29 update makes your backtests up to 4× faster. Test, tweak, retest, without ever losing your train of thought.]]></description><link>https://blog.kryll.io/kryllos-0-5-29-update-faster-backtests/</link><guid isPermaLink="false">6a54caf9d9e60f88cb3b8445</guid><category><![CDATA[announcements]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Mon, 13 Jul 2026 11:28:30 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/07/backtest-2.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/backtest.png" class="kg-image" alt="KryllOS 0.5.29 Update: Backtests Up to 4× Faster"></figure><img src="https://blog.kryll.io/content/images/2026/07/backtest-2.png" alt="KryllOS 0.5.29 Update: Backtests Up to 4× Faster"><p>Building a strategy is often a loop: you set a block, adjust a level, move a condition, and after every change the same question comes back, does it hold up? So you run a backtest, to ask the market's past what it thinks.</p><p>The problem is that every backtest has a cost in time. When waiting for a result takes several minutes, you become frugal: you only test the ideas you're already fairly sure about, and all the "what if I tried this" thoughts stay in a corner of your mind, never checked. Every one of those untested variants is a path you'll never actually know.</p><p>0.5.29 shifts that balance. As of this KryllOS version, backtests run much faster, fast enough that testing one more idea costs almost nothing, so there's no real reason to hold back anymore.</p><hr><h2 id="the-waiting-wall-comes-down">The waiting wall comes down</h2><p>KryllOS's backtesting engine was already fast: it ran 2 to 10 times faster than the old engine. 0.5.29 adds up to another 4x on top of that. Long periods that used to take several minutes now run in seconds, and you can chain tests together without losing track of what you set out to check.</p><hr><h2 id="the-cache-that-makes-technical-analysis-free">The cache that makes technical analysis free</h2><p>Where does this speed come from? Largely from a cache, a memory the engine builds up across runs so it never has to redo the same work twice.</p><p>Specifically, two things now persist from one backtest to the next. Candles, first: the engine no longer has to fetch them from disk on every run, it keeps them on hand. Your indicators, second: your RSI, your moving averages, your Supertrend are no longer recalculated every time, they're computed once and reused.</p><p>The result: after the first pass, your technical analysis costs your machine almost nothing. The engine no longer spends its time rebuilding your indicators; it spends it replaying prices and measuring how your strategy behaves.</p><p>That's also why the very first run is a bit slower than the ones that follow: it's the one filling the cache. If your first backtest isn't instant, that's normal. Run it again, and you'll feel the difference.</p><hr><h2 id="dead-time-compressed">Dead time, compressed</h2><p>Speed doesn't only come from the cache. The way the engine replays the market has changed too.</p><p>A market doesn't move at a steady pace: there are moments when everything moves, and long stretches where nothing happens. Before, the engine still advanced step by step through those quiet stretches. Now, it crosses them in one go: uneventful ticks are compressed, candles that don't change anything for your strategy are skipped, and the engine jumps straight to the next event that actually matters to you.</p><p>It's a bit like fast-forwarding through the boring parts, with a return to normal speed only where something is really happening.</p><hr><h2 id="precision-your-cursor-between-speed-and-detail">Precision: your cursor between speed and detail</h2><p>You can dial in this speed yourself with a setting in the top bar of the editor, just to the left of the Run button: Precision.</p><p>Precision defines the number of ticks the engine generates inside the candles, in other words, how finely it emulates price movement inside each candle. The lower you set it, the fewer points to simulate, the faster it runs; at 0, you're at maximum speed. The higher you set it, the more detail the engine works out inside each trade.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/precision.png" class="kg-image" alt="KryllOS 0.5.29 Update: Backtests Up to 4× Faster"></figure><p>This mainly affects your stop losses and your trailing orders: the exact point where the price passes inside the candle decides the moment your order triggers. On a simple strategy, though, your P&amp;L barely moves between a precision of 0 and 4.</p><p>In practice: lower the precision to prototype and chain through tests quickly, raise it back up when you want an accurate read on your stops and trailing orders before going live.</p><hr><h2 id="kryllos-onboarding-a-warm-welcome-to-get-you-started">KryllOS Onboarding: A Warm Welcome to Get You Started</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/onboarding-1-1.png" class="kg-image" alt="KryllOS 0.5.29 Update: Backtests Up to 4× Faster"></figure><p>KryllOS now takes care of your very first minutes. The first time you launch the app, a quick welcome tour walks you through the essentials in five screens: what KryllOS is and what it gives you, your VPS profiles, the toolbar you summon with F10, and where to drop us a bug or an idea. No more being thrown in at the deep end, you know where to put your hands from the very first launch.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS 0.5.29 Update: Backtests Up to 4× Faster" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart]]></title><description><![CDATA[The KryllOS 0.5.26 update now puts your technical indicators right on the editor's chart. Your technical analysis now lives where you build.]]></description><link>https://blog.kryll.io/kryllos-0-5-26-update-technical-indicators-chart/</link><guid isPermaLink="false">6a4cf831d9e60f88cb3b83c2</guid><category><![CDATA[announcements]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Tue, 07 Jul 2026 14:08:43 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/07/thumbnail.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/KryllOS-0.5.26-update_-technical-indicators-arrive-on-the-editor-s-chart.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><img src="https://blog.kryll.io/content/images/2026/07/thumbnail.png" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"><p>In front of a chart, your eye never rests on price alone. It hunts for the moving average carrying the trend, the RSI starting to lose steam, or any other indicator traders swear by. Laid over the candles, they're what turn a column of numbers into a market you can actually read.</p><p>Except that, until now, the KryllOS editor's chart showed price, candles and volume, nothing more. Your indicators, meanwhile, ran inside your blocks without ever showing up on the candles.</p><p>That's over now. As of KryllOS 0.5.26, technical indicators appear directly on your editor's chart, right there among the candles, while your strategy takes shape.</p><hr><h2 id="the-resizable-chart">The resizable chart</h2><p>You could already open and collapse the chart above your strategy. What's new is that it now comes in two sizes. First a compact one, which leaves you enough room to keep wiring your blocks while keeping price in view. And a large one, which unfolds the chart and gives it more space for a real analysis session.</p><ul><li>Compact mode: you edit your blocks, the chart stays visible</li><li>Expanded mode: a bigger chart, room for analysis</li><li>Switch modes in one click</li></ul><h3 id="how-to-do-it">How to do it</h3><ol><li>Find the double chevron ⩔ in the center, right at the bottom of the chart</li><li>One click to expand it, another to go back to compact</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/chart-extend.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><hr><h2 id="adding-indicators">Adding indicators</h2><p>To add one, right-click on the chart and the list opens. You browse what's available or type its name to find it right away, you click, and it settles onto your candles. Nothing stops you from stacking several: a short moving average and a long one to watch for a cross, an RSI just below, a Supertrend over the price. The more you add, the more the chart's expanded mode becomes your friend.</p><ul><li>Search by name to go straight to it</li><li>As many indicators as you want, stacked on the price</li><li>Available indicators: Moving Average, RSI, MACD, Bollinger, Stochastic RSI, Supertrend, Ichimoku, Volume</li></ul><h3 id="how-to-do-it-1">How to do it</h3><ol><li>Right-click anywhere on the chart</li><li>In the list that opens, pick an indicator or type its name in the search</li><li>Click it, and it drops onto the price</li><li>Repeat to stack more</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/add-indicator-1.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><hr><h2 id="managing-and-cleaning-up-your-indicators">Managing and cleaning up your indicators</h2><p>A busy chart needs a bit of tidying. You can hide an indicator to get it out of view without losing it, then bring it back the moment you need it again. You can also delete just one, the one you no longer need. And the day you want to start from a blank canvas, there's no need to remove them one by one: right-click the chart, choose to remove them all, and every indicator disappears at once. Two clicks, and you're starting fresh.</p><ul><li>Hide / show an indicator without losing it</li><li>Delete a specific indicator</li><li>Remove them all at once: right-click, then "remove all indicators"</li></ul><h3 id="how-to-hide-an-indicator">How to hide an indicator</h3><ol><li>Hover over its name, at the top left of the chart</li><li>Click the ◉ icon to hide it. Click again to bring it back</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/hide-indicator-2.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><h3 id="how-to-remove-all-indicators">How to remove all indicators</h3><ol><li>Right-click on the chart</li><li>Click "remove all indicators". They all disappear at once</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/remove-indicators-3.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><hr><h2 id="customizing-each-indicator">Customizing each indicator</h2><p>Each indicator opens onto its own settings panel, and you really can tweak all of it. You lengthen or shorten its period to set it anywhere from short term to very long term, you switch its calculation method when it offers several, you adjust the line thickness and its color, and you even choose the price source it works from, whether it starts from the close, the open, or one of the classic combinations traders are used to. Nothing is set in stone. You set up each indicator exactly the way you read it in your head, with your own reference points and your own way of trading.</p><h3 id="how-to-do-it-2">How to do it</h3><ol><li>Hover over the indicator and click the gear ⚙</li><li>Adjust whatever you want in the panel (period, style, color, source...)</li><li>Changes apply directly on the chart</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/indicator-settings-1.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><hr><h2 id="reading-values-on-hover">Reading values on hover</h2><p>Move your mouse over the chart and your indicators hand you their numbers. A dot snaps onto the curve, and its exact value appears off to the side, at the precise moment you care about. Enough to read the value of your moving average or your Supertrend down to the exact candle, without ever drowning the chart in numbers.</p><h3 id="how-to-do-it-3">How to do it</h3><ol><li>Move your cursor over the chart</li><li>Each indicator's value appears at the point you're hovering over</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/data-survol-1.png" class="kg-image" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart"></figure><hr><p>In the end, all these settings and shortcuts come down to one simple idea: your technical analysis and your strategy now live in the same space. And that's the whole point: you no longer build your strategy by imagining what your indicators are doing, you build it from what you see. The rest is yours to write. Update to 0.5.26, open your editor, and drop your first indicator onto the price ;)</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS 0.5.26 Update: Technical Indicators Arrive On The Editor's Chart" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS VPS Installation Guide: Free Self-Hosted Trading Bot]]></title><description><![CDATA[Your complete KryllOS install guide: download the app, connect your VPS, and get your trading bots running 24/7. Beginner-friendly, no code.]]></description><link>https://blog.kryll.io/kryllos-installation-guide/</link><guid isPermaLink="false">6a3eac37d9e60f88cb3b8128</guid><category><![CDATA[tutorials]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Fri, 26 Jun 2026 18:30:23 GMT</pubDate><content:encoded><![CDATA[<p>If you're here, it's because you want to install KryllOS, and you've come to the right place. Even if words like "VPS," "Linux," or "SSH" barely mean anything to you, this guide will help you install KryllOS the easy way, step by step.</p><p>KryllOS is your self-hosted trading station: the app runs on your PC/Mac, the engine on your server, and you alone are in control.</p><p>Good news to kick things off: the installer does two things at once. It installs the KryllOS app on your computer (Windows or Mac), your interface, the place where you click; and it deploys the engine on your VPS, the server that runs your strategies 24/7, even when your computer is off.</p><hr><h2 id="what-you-ll-need">What you'll need</h2><p>Two machines, two roles:</p><ul><li><strong>A Windows or Mac computer</strong> to install the KryllOS app, your user interface, where you'll build and launch your trading strategies.</li><li><strong>A Linux VPS</strong> running <strong>Ubuntu 22.04+</strong> or <strong>Debian 12+</strong> to host the KryllOS engine, which runs around the clock.</li></ul><p>No VPS yet? <a href="https://blog.kryll.io/get-netcup-vps-for-kryllos/">We'll show you how to get one from Netcup right here.</a></p><hr><h2 id="download-the-app">Download the app</h2><p>Grab the latest version of KryllOS for your computer's system:</p><ul><li><strong>macOS</strong> → <code>.dmg</code> (Apple Silicon or Intel, depending on your Mac)</li><li><strong>Windows</strong> → <code>.exe</code></li></ul><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/image-148.png" class="kg-image"></figure><hr><h2 id="step-0-new-installation">Step 0: New installation</h2><p>Launch the app, then click <strong>"New installation."</strong></p><p>The other option, "Import an existing configuration," is for restoring a profile from an archive. For a first install, it doesn't concern you.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/0-EN.png" class="kg-image"></figure><hr><h2 id="step-1-choose-your-server">Step 1: Choose your server</h2><p>If you already have your VPS, click <strong>"I have a server."</strong></p><p>If you don't, KryllOS offers partner deals here (Budget or Recommended) so you can order one in two clicks. No VPS yet? <a href="https://blog.kryll.io/get-netcup-vps-for-kryllos/">We'll show you how to get one from Netcup right here.</a></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/1-EN-1.png" class="kg-image"></figure><hr><h2 id="step-2-connect-to-your-server">Step 2: Connect to your server</h2><p>Three pieces of info to fill in:</p><ol><li><strong>The IP address</strong> of your VPS</li><li><strong>The root password</strong> (one-time use)</li><li><strong>The username for your VPS</strong> (leave it as <code>kryll</code> by default)</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/2-EN.png" class="kg-image"></figure><h3 id="where-do-i-find-my-ip-and-root-password"><strong>Where do I find my IP and root password?</strong></h3><p>It all happens in your VPS provider's interface:</p><ul><li><strong>The IP address</strong> is shown on your server's page, in your dashboard (look for "IPv4" or "IP address"). It's your machine's public identity.</li><li><strong>The root password</strong> is in the VPS's security / login settings. Most providers ask you to generate (or reset) it yourself.</li></ul><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/image-156.png" class="kg-image"></figure><hr><h2 id="step-3-security-options">Step 3: Security options</h2><p>Just one option here: Port Knocking.</p><p>What's it for? Your server keeps its front door (SSH) closed and invisible. It only opens if you "knock" a secret sequence in the right order. The result: from the outside, your server looks like it has no door at all, so there's nothing to attack.</p><p>We recommend turning it on if you trade with real funds.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/3-EN-2.png" class="kg-image"></figure><hr><h2 id="step-4-check-before-deployment">Step 4: Check before deployment</h2><p>Last screen: the summary (IP, username, password, SSH key, port knocking). Click <strong>"Deploy"</strong> once you've reviewed the info.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/4-EN.png" class="kg-image"></figure><hr><h2 id="installation-kicks-off">Installation kicks off</h2><p>From here, KryllOS takes over and handles everything on its own: SSH connection, server validation, detection of existing services, configuration, installation, then final checks. Expect a few minutes depending on your VPS.</p><p>Good time to go grab yourself a coffee. (Or go check the charts, no judgment.)</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/5-EN.png" class="kg-image"></figure><hr><h2 id="welcome-to-kryllos-">Welcome to KryllOS!</h2><p>Once the installation is done, your app and your VPS are ready. You officially own your self-hosted trading station, all to yourself. Now have fun: open the editor, grab some blocks, and put together your first strategy!</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/kryllos-welcome.png" class="kg-image"></figure><hr><h2 id="got-a-question-stuck">Got a question? Stuck?</h2><p>Don't worry, you're not alone. Join our official Telegram group, where the KryllOS team and community answer your questions: <strong><a href="https://t.me/kryll_io">Join the Telegram →</a></strong></p><hr><h2 id="frequently-asked-questions">Frequently Asked Questions</h2><p>Before you dive in, or if you get stuck along the way, take a look here: we've rounded up the questions that come up most often.</p><h3 id="what-exactly-is-kryllos">What exactly is KryllOS?<br></h3><p>KryllOS is an automated trading solution that lets you create trading bots from a visual no-code editor, or launch community bots available on the marketplace. Self-hosted and open-source.</p><h3 id="is-kryllos-free">Is KryllOS free?</h3><p>KryllOS is 100% free. No subscription, no fees on your trades. The only possible costs: your VPS (a few €/month) and whatever you choose to buy on the marketplace.</p><h3 id="do-you-need-to-know-how-to-code-to-use-kryllos">Do you need to know how to code to use KryllOS?</h3><p>No. The installation is automated, and strategies are built with drag-and-drop by connecting blocks together. Zero lines of code.</p><h3 id="which-computers-does-the-kryllos-app-run-on">Which computers does the KryllOS app run on?</h3><p>Windows and macOS (Apple Silicon and Intel). You download the .exe or the .dmg depending on your machine.</p><h3 id="do-i-have-to-leave-my-computer-on-for-my-strategies-to-run">Do I have to leave my computer on for my strategies to run?</h3><p>No, and that's the whole point. Your strategies run on the VPS, 24/7. Your computer is only there to steer them. Turn it off, and the bots keep trading.</p><h3 id="what-s-a-vps-and-why-do-i-need-one">What's a VPS and why do I need one?</h3><p>A VPS (Virtual Private Server) is a server that runs nonstop in a datacenter, rented for a few euros a month. It's what executes your strategies while you sleep, without relying on your personal PC/Mac.</p><h3 id="how-much-does-a-vps-cost">How much does a VPS cost?</h3><p>A few euros a month. For reference, the deals offered in the installer start around €6/month (budget) and €10/month (recommended).</p><h3 id="what-are-the-minimum-specs-for-the-vps">What are the minimum specs for the VPS?</h3><p>A 2 vCore / 4 GB RAM / 40 GB disk config is enough to get started. To run several strategies comfortably, aim for 4 vCore / 8 GB RAM / 100 GB disk.</p><h3 id="where-do-i-find-my-vps-s-ip-and-root-password">Where do I find my VPS's IP and root password?</h3><p>In your provider's interface: the IP is on your server's page ("IPv4"), the root password in the security/login settings (often for you to generate yourself). The labels vary a bit from one provider to the next.</p><h3 id="my-vps-runs-a-different-os-what-do-i-do">My VPS runs a different OS, what do I do?</h3><p>Reinstall it with Ubuntu 22.04+ or Debian 12+ from your provider's panel (look for "Reinstall" / "Reinstall OS").</p><h3 id="does-kryll-have-access-to-my-funds-or-my-api-keys">Does Kryll have access to my funds or my API keys?</h3><p>No. KryllOS is self-hosted: your API keys stay local and Kryll never touches your funds. No custody, no middleman.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS — Join the Waitlist" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Get a Netcup VPS for KryllOS: Beginner's Step-by-Step Guide]]></title><description><![CDATA[This beginner guide shows you how to get a Netcup VPS, then find your IP and root password, ready to run KryllOS 24/7.]]></description><link>https://blog.kryll.io/get-netcup-vps-for-kryllos/</link><guid isPermaLink="false">6a3eac4ad9e60f88cb3b812e</guid><category><![CDATA[tutorials]]></category><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Fri, 26 Jun 2026 18:30:07 GMT</pubDate><content:encoded><![CDATA[<p>If you're here, it's because you want to run KryllOS 24/7, which means you need a VPS. Good news: you're in the right place, and you don't need any technical skills to follow this guide.</p><p>We'll cover the whole journey, from A to Z:</p><ul><li><strong>Ordering</strong> your VPS on Netcup</li><li><strong>Paying</strong> for your order from your customer account</li><li><strong>Accessing</strong> your server's admin panel</li><li><strong>Grabbing</strong> your IP address and root password to launch the KryllOS install</li></ul><hr><h2 id="what-is-a-vps">What is a VPS?</h2><p>A VPS (Virtual Private Server) is a small computer that runs around the clock in a datacenter, which you rent for a few euros a month. It's what runs your strategies while you sleep. For this guide, we picked Netcup: a European host known for its excellent price-to-performance ratio, perfect for KryllOS.</p><hr><h2 id="which-netcup-vps-plan-should-you-choose-and-what-it-really-costs-">Which Netcup VPS plan should you choose? (and what it really costs)</h2><p>Netcup offers several tiers. For KryllOS, we recommend <strong>at least 2 vCPU and 4 GB of RAM</strong>. The smallest plan is plenty to get started; if you're planning to run lots of strategies in parallel or do a ton of backtests, aim for the next plan up.</p><p>Our advice: start with the VPS 500 G12. It's the ideal plan to get going on KryllOS: cheap, and more than enough. You can always move up to a bigger plan later if you need to.</p><hr><h2 id="part-1-ordering-your-vps">Part 1: Ordering your VPS</h2><h3 id="step-1-choose-your-plan">Step 1: Choose your plan</h3><p>To get started, head over to <a href="https://www.netcup.com/en/server/vps?ref=372611">Netcup's website</a> to browse their VPS plans. You'll see the three plans shown just above. Under the <strong>VPS 500 G12</strong>, click the <strong>"Order now"</strong> button.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/1-1.png" class="kg-image"></figure><hr><h3 id="step-2-configure-your-vps">Step 2: Configure your VPS</h3><p>You'll land on the configuration screen. Two settings matter here.</p><p>The commitment length :</p><ul><li><strong>"0 months"</strong> (no commitment): you pay monthly and can cancel whenever you want. Perfect for testing KryllOS at your own pace.</li><li><strong>"12 months, Save 14%"</strong>: like most hosts, committing for a year lowers your monthly cost. The right call if you already know you're staying. (Small bonus: if you go with an annual plan, we may be able to give you a promo code. Feel free to join our <a href="https://t.me/kryll_io">Telegram group</a> to ask for one.)</li></ul><p>The location : we recommend leaving "No preference Europe," shown at +€0.00. The other cities (Amsterdam, Vienna, Nuremberg, and so on) add a small surcharge, and Singapore is noticeably pricier. With "No preference Europe," your server will be placed in Europe with no extra charge.</p><p>Once your config is set, click <strong>"Add to shopping cart."</strong></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/2-1.png" class="kg-image"></figure><hr><h3 id="step-3-skip-the-add-ons">Step 3: Skip the add-ons</h3><p>A window confirms your VPS was added, and Netcup takes the chance to offer you extra options (vLAN, an additional IPv4, a domain name, and so on). You don't need any of them for KryllOS.</p><p>Just click <strong>"Go to shopping cart."</strong></p><p></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/3.png" class="kg-image"></figure><hr><h3 id="step-4-check-your-cart">Step 4: Check your cart</h3><p>Your cart shows your VPS 500 G12 with its price. You can see the breakdown: one-time setup fees and the monthly price.</p><p>Click <strong>"Continue to the order."</strong></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/4.png" class="kg-image"></figure><hr><h3 id="step-5-enter-your-billing-address">Step 5: Enter your billing address</h3><p>This is the most important step to fill in correctly. Netcup verifies addresses (that's actually why a phone number is required). So give your real, complete address, exactly as it appears on an official document: a made-up address can block or delay your order.</p><p><em>Important: if you don't have a street number, just add a <code>0</code> at the start (e.g., <code>0 Your Addresse</code>). Without a number, your order may not be accepted.</em></p><p>Once everything is filled in, click <strong>"Save address."</strong></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/5-4.png" class="kg-image"></figure><hr><h3 id="step-6-confirm-the-save">Step 6: Confirm the save</h3><p>A window confirms your address was saved. Click <strong>"Go to order."</strong></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/6-1.png" class="kg-image"></figure><hr><h3 id="step-7-review-the-summary">Step 7: Review the summary</h3><p>You'll arrive at the order summary. Take 30 seconds to double-check your info: identity, address, and the product ordered (your VPS 500 G12).</p><p>You'll notice a "First receipt" line that's a bit higher than the monthly price: that's normal, it includes the one-time setup fees on top of the first month.</p><p>Before confirming, tick the two boxes at the bottom, then click <strong>"Order at charge."</strong></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/7.png" class="kg-image"></figure><hr><h3 id="step-8-order-confirmed">Step 8: Order confirmed</h3><p>A "Thank you for your order!" message appears: your order is registered.</p><p><em>Important point: with Netcup, you don't pay right at checkout. Here's how it works: Netcup will email you your customer account credentials, and it's from that account that you'll pay your invoice. Once the payment goes through, you'll get access to your VPS.</em></p><p>So let's move on to Part 2: payment.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/8.png" class="kg-image"></figure><hr><h2 id="part-2-paying-for-your-order-from-your-customer-account">Part 2: Paying for your order from your customer account</h2><h3 id="step-1-get-your-username-and-password">Step 1: Get your username and password</h3><p>Keep an eye on your inbox. You'll get <strong>two emails</strong>:</p><ul><li><strong>A first email</strong> about payment that <strong>you can ignore</strong>.</li><li>Right after, an email titled <strong>"Your login credentials for the netcup CCP"</strong> <strong>→ that's the one that matters</strong>. Keep it handy: it holds your access to the customer account (the Customer Control Panel, or CCP).</li></ul><p>Inside, you'll find:</p><ul><li><strong>Customer number</strong> → your customer number (your login ID)</li><li><strong>Password</strong> → your password</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.kryll.io/content/images/2026/06/9.png" class="kg-image"><figcaption>E-mail Netcup contenant les identifiants de connexion au Customer Control Panel (CCP)</figcaption></figure><hr><h3 id="step-2-log-in-to-your-customer-account">Step 2: Log in to your customer account</h3><p>Go to Netcup's official customer account site: <strong><a href="https://customercontrolpanel.de">customercontrolpanel.de</a></strong></p><p>Log in by copy-pasting the customer number and password you received by email, then click <strong>"Log in."</strong></p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/10.png" class="kg-image"></figure><hr><h3 id="step-3-confirm-the-security-code-2fa-">Step 3: Confirm the security code (2FA)</h3><p>Netcup will ask for a code (token) sent to your email address: it's their two-factor authentication (2FA) system, enabled by default, an extra layer of security to protect your account.</p><p>Grab the code from your inbox, paste it, then click <strong>"Confirm token."</strong> Need a new code? Click "Send token again."</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/12.png" class="kg-image"></figure><hr><h3 id="step-4-pay-your-invoice">Step 4: Pay your invoice</h3><p>You're now logged into your customer account. In the top right, under "Outstanding invoices," you'll see your order awaiting payment (in our example, €11.90).</p><p>Click the credit card or PayPal logo next to the invoice, then follow the prompts to complete the payment.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/13-2.png" class="kg-image"></figure><hr><h2 id="part-3-accessing-your-vps-admin-panel">Part 3: Accessing your VPS admin panel</h2><p>Once your invoice is paid, you can finally access your server.</p><p>Still on the same page of your customer account, find the "Log in to other panels" box and click the <strong>"SCP Auto-Login"</strong> button.</p><p>What's the SCP? The Server Control Panel (SCP) is the panel that lets you manage your VPS. The "SCP Auto-Login" button is the fastest way to connect, with no credentials to re-enter. Note that you can also log in manually with dedicated login/password credentials, sent in a separate email (these are different from your customer account credentials).</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/14-1.png" class="kg-image"></figure><p>You'll then land on the Server Control Panel, a separate platform dedicated to managing your VPS. To open your server's settings, click its name in the list, a long identifier that starts with <code>v22…</code> (e.g., <code>v2202506184293817445</code>).</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/15-2.png" class="kg-image"></figure><hr><h2 id="part-4-grabbing-your-ip-and-root-password">Part 4: Grabbing your IP and root password</h2><p>This is the home stretch: these two pieces of info are all KryllOS needs to install.</p><h3 id="step-1-finding-your-ip-address">Step 1: Finding your IP address</h3><p>After clicking your server's name (previous step), open the "General" tab. Scroll down to the "Network" section: your IP address is shown in the "IPv4" column (e.g., <code>159.195.193.127</code>).</p><p>This is your machine's public identity. Write it down somewhere safe, you'll need it during the KryllOS install.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/16-7.png" class="kg-image"></figure><hr><h3 id="step-2-setting-and-grabbing-your-root-password">Step 2: Setting and grabbing your root password</h3><p>Now go to the "Access" tab.</p><p>Netcup has already pre-generated a password for you (so the field isn't empty). Here's what to do:</p><ul><li>First, copy the displayed password (the <strong>"Copy"</strong> button) and paste it somewhere safe.</li><li>Then click <strong>"Set Password"</strong> to actually apply it to your server.</li></ul><p>This is the access key to your machine. Write it down somewhere safe, you'll need it during the KryllOS install.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/06/17-1.png" class="kg-image"></figure><hr><h2 id="and-there-you-go-you-re-ready-">And there you go, you're ready!</h2><p>You now have in hand:</p><ul><li><strong>Your VPS IP address</strong></li><li><strong>Your root password</strong></li></ul><p>All that's left is to launch the KryllOS install. We walk you through everything, step by step, in our dedicated guide: <strong><a href="https://blog.kryll.io/kryllos-installation-guide/">KryllOS Installation Guide →</a></strong></p><hr><h2 id="a-question-stuck">A question? Stuck?</h2><p>No worries, you're not alone. Join our official Telegram group, where the KryllOS team and community answer your questions: <strong><a href="https://t.me/kryll_io">Join the Telegram →</a></strong></p><hr><h2 id="frequently-asked-questions">Frequently Asked Questions</h2><h3 id="what-s-a-vps-and-why-do-i-need-one-for-kryllos">What's a VPS, and why do I need one for KryllOS?</h3><p>A VPS (Virtual Private Server) is a server that runs around the clock in a datacenter, rented for a few euros a month. KryllOS hosts its engine on it, which lets your strategies trade 24/7, even when your computer is off.</p><h3 id="why-netcup">Why Netcup?</h3><p>Netcup is a European host with a great price-to-performance ratio, fast NVMe VPS plans, and some of the lowest prices on the market. It's a solid, budget-friendly choice for running KryllOS.</p><h3 id="which-netcup-plan-should-i-choose-for-kryllos">Which Netcup plan should I choose for KryllOS?</h3><p>The VPS 500 G12 (2 vCore, 4 GB RAM, 128 GB NVMe) is plenty to get started. If you're planning to run lots of strategies in parallel or do many backtests, step up to the VPS 1000 G12 (4 vCore, 8 GB RAM). You can always upgrade later.</p><h3 id="what-does-it-really-cost">What does it really cost?</h3><p>From around €6/month for the VPS 500 G12. Heads up: the first invoice is a bit higher, because it includes one-time setup fees on top of the first month (in our example: €5.04 in fees + €6.86 = €11.90 total).</p><h3 id="0-month-or-12-month-commitment-which-do-i-pick">0-month or 12-month commitment, which do I pick?</h3><p>The "0 months" option (no commitment) lets you pay monthly and cancel whenever you want: ideal for testing. The "12 months" option saves you ~14% per month but locks you in for a year. To get started with peace of mind, no commitment is perfect.</p><h3 id="which-location-should-i-choose">Which location should I choose?</h3><p>Leave "No preference Europe": your server will be in Europe, with no surcharge. The other cities add a few euros per month for no real reason.</p><h3 id="where-do-i-find-my-netcup-vps-s-ip-and-root-password">Where do I find my Netcup VPS's IP and root password?</h3><p>In the Server Control Panel, after clicking your server's name: the IP is in the "General" tab (Network section → IPv4), and the root password in the "Access" tab (be sure to click "Set Password" to apply it).</p><h3 id="which-operating-system-for-kryllos">Which operating system for KryllOS?</h3><p>Ubuntu 22.04+ or Debian 12+. If your VPS runs a different OS, reinstall it from the Netcup panel before launching the KryllOS install.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS — Join the Waitlist" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS Security: The Zero Trust Model Applied to Trading Bots]]></title><description><![CDATA[Why KryllOS chooses invisibility over fortress walls: Zero Trust, port knocking, cryptographic signatures. The complete security model, explained.]]></description><link>https://blog.kryll.io/kryllos-security-zero-trust/</link><guid isPermaLink="false">6a140522d9e60f88cb3b7cea</guid><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Mon, 25 May 2026 14:14:00 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/07/f0148de1-028f-4528-8529-d53742e64d1e-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/07/f0148de1-028f-4528-8529-d53742e64d1e.png" class="kg-image" alt="KryllOS Security: The Zero Trust Model Applied to Trading Bots"></figure><img src="https://blog.kryll.io/content/images/2026/07/f0148de1-028f-4528-8529-d53742e64d1e-1.png" alt="KryllOS Security: The Zero Trust Model Applied to Trading Bots"><p>KryllOS is a self-hosted product: you install it on your own server, and you are its sole user. No Kryll cloud holding your keys, no account to create, no password to manage.</p><p>This reality fundamentally changes the nature of the security model. The question is no longer <em>"how to protect a multi-tenant service,"</em> but <em>"how to protect a personal server that has no reason to be accessible from the outside."</em> KryllOS's model responds with a simple principle: robust where it matters, lean where it's enough.</p><hr><h2 id="a-solid-security-boundary">A solid security boundary</h2><p>KryllOS is only accessible by you, via an SSH tunnel whose port remains permanently closed. It only opens after a port knocking sequence known to you alone. To an attacker scanning the Internet, your server doesn't exist: no open ports, no response, no visible attack surface.</p><p>This invisible-before-authentication approach applies a model designed in 2007 by the Defense Information Systems Agency (DISA) of the U.S. Department of Defense. Known as Software Defined Perimeter, or <em>"Black Cloud,"</em> it was originally conceived to protect classified networks. It is today the foundation of Zero Trust architectures powering Cloudflare Access, Zscaler Private Access, and most modern ZTNA solutions.</p><hr><h2 id="no-unnecessary-friction-between-you-and-yourself">No unnecessary friction between you and yourself</h2><p>With a solid perimeter in place, the protections typically layered on the inside — HTTP authentication, sessions, rate limiting, local encryption of secrets — lose their purpose. If someone has crossed the SSH tunnel, it means they have your keys or a shell on your machine: from the system's perspective, they <em>are</em> you. Encrypting an API key with a decryption key stored right next to it doesn't change the cost of an attack.</p><p>KryllOS therefore chooses to be honest about what it actually protects, and to focus cryptography where it truly matters.</p><hr><h2 id="cryptographic-guarantees-where-they-count">Cryptographic guarantees where they count</h2><ul><li><strong>Signed plugins:</strong> cryptographic signature verified before each execution, with auditing for the official marketplace.</li><li><strong>Sandboxed filesystem:</strong> all file operations pass through a validation layer that prevents a plugin or API call from escaping its dedicated folder.</li><li><strong>Hash-pinned dependencies:</strong> KryllOS and its components are distributed with a cryptographic manifest that allows verification that downloaded third-party libraries are exactly those tested by the team. A compromise of PyPI or an upstream repository cannot silently slip into an update.</li><li><strong>Isolated exchange credentials:</strong> your API keys are stored in a local SQLite database, accessible only by the KryllOS process itself.</li></ul><hr><h2 id="best-practices-on-the-user-side">Best practices on the user side</h2><p>KryllOS handles what it can handle. The rest comes down to a few classic administration best practices:</p><ul><li>A strong SSH key (Ed25519, never passwordless) with a local passphrase.</li><li>A port knocking sequence you don't share, and that you change if it has leaked.</li><li>Exchange API keys created with minimal permissions (trading only, no fund withdrawal, IP restriction where the exchange allows it).</li><li>Extra vigilance with plugins installed outside the marketplace: a third-party plugin is code that runs with your server's privileges. The official marketplace exists precisely so you don't have to do that analysis yourself.</li></ul><hr><h2 id="a-model-suited-to-its-audience">A model suited to its audience</h2><p>This isn't Binance or Coinbase. KryllOS doesn't hold the funds of millions of users, isn't publicly exposed on the Internet, has no attack surface to defend against continuously scanning bots. It's a personal trading station that, from the Internet, simply doesn't exist.</p><p>At this scale, the challenge isn't to build a defensive fortress. It's to shrink the attack surface until it becomes invisible, and to focus cryptography on the points that remain.</p><hr><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS Security: The Zero Trust Model Applied to Trading Bots" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[$KRL in KryllOS: Utility and Tokenomics]]></title><description><![CDATA[A fixed supply token, no new issuance, that distributes real yield and funds a completely free platform. How is that possible? We explain everything.]]></description><link>https://blog.kryll.io/krl-kryllos-utility-tokenomics/</link><guid isPermaLink="false">69fd8fc0d9e60f88cb3b7c16</guid><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Fri, 08 May 2026 14:58:12 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/05/KryllOS-KRL-flywheel-16-9-2.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/05/KryllOS-KRL-flywheel-16-9.png" class="kg-image" alt="$KRL in KryllOS: Utility and Tokenomics"></figure><img src="https://blog.kryll.io/content/images/2026/05/KryllOS-KRL-flywheel-16-9-2.png" alt="$KRL in KryllOS: Utility and Tokenomics"><p>KryllOS is more than an automated trading platform. It's an ecosystem: a visual no-code editor, a marketplace for bots and custom blocks, an AI layer for vibe-coding your strategies, and at the heart of it all, a token that serves as the economic backbone. KRL isn't a gimmick, it's the economic fuel that aligns users, creators, and the platform.</p><hr><h2 id="token-basics">Token Basics</h2><p>KRL is the native utility token of the Kryll ecosystem. Launched via ICO in early 2018, it raised $2.2M and laid the project's foundations. Eight years later, it's back at the center of the action with KryllOS.</p><p>A few fundamentals to keep in mind:</p><ul><li>Standard: ERC-20</li><li>Max supply: 49,417,348 KRL</li><li>Multi-chain: natively deployed on Ethereum, Base, Arbitrum, and Optimism</li><li>Availability: traded on Coinbase, KuCoin, Gate.io, Crypto.com, MEXC, CoinEx, and accessible on DEX via Uniswap V3</li></ul><p>One important point: all KRL currently in circulation is fully unlocked. There is no active vesting, no upcoming unlock schedule. The supply is fixed and non-mintable, a clean, predictable foundation for everything that follows.</p><hr><h2 id="the-marketplace-s-single-currency">The Marketplace's Single Currency</h2><p>Every transaction on the KryllOS marketplace is designed to go through KRL. Whether you're buying a ready-to-use trading strategy, a custom block, an app, or a skill for your AI agent, you pay in KRL. The publisher receives KRL.</p><p>No fiat, no stablecoins, no alternatives. A single rail, simple and predictable. This unification has a direct consequence: every transaction feeds the same economy. The more volume the marketplace generates, the more sustained demand builds around KRL.</p><hr><h2 id="how-a-single-purchase-powers-an-entire-ecosystem">How a Single Purchase Powers an Entire Ecosystem</h2><p>With every marketplace purchase, the KRL spent is distributed among three beneficiaries:</p><ul><li><strong>The Publisher</strong><br>The creator of the bot, block, or application receives their share. This is the foundation of a real creator economy: the more useful content you publish and the more it gets used, the more you earn. The original Kryll marketplace already proved this model works, top creators generated genuine passive income from it. KryllOS takes that further, adding custom blocks and an AI layer that dramatically lowers the barrier to publishing.</li><li><strong>Kryll</strong><br>A share goes to the team to fund development, infrastructure, and operations. This is what keeps the product free: no subscriptions, no trading fees, no custody. The marketplace funds the platform instead of billing the end user.</li><li><strong>Stakers</strong><br>A share is redistributed to holders who have actively staked their KRL, in the form of real yield paid out by actual marketplace activity. This is an intentional, participatory mechanism: simply holding KRL in a wallet doesn't earn you anything. It's the deliberate act of staking that opts you into the revenue-sharing engine.</li></ul><hr><h2 id="real-yield-not-disguised-inflation">Real Yield, Not Disguised Inflation</h2><p>The word "yield" is overused in crypto. Most projects that promise it operate through inflationary emission: new tokens are minted to pay stakers. The result is that non-staking holders get diluted, and the displayed APY reflects no real value creation.</p><p>KRL works in the opposite direction. The supply is fixed: 49,417,348 tokens, full stop, no minting possible. The yield distributed to stakers doesn't come from emission, it comes from real purchases made on the marketplace by real users. It's closer to a corporate dividend than a synthetic APY.</p><p>In practice: the yield is sustainable because it's backed by actual economic activity. And staking holders capture their share without diluting those who don't stake.</p><p><em>A path worth considering: Burn &amp; Buyback</em><br><em>A portion of the KRL collected through the marketplace could be burned, mechanically reducing the circulating supply. Additionally, in cases where the platform generates revenue in fiat or currencies other than KRL, a buyback mechanism could be considered, repurchasing KRL on the open market to redistribute or burn it, creating structural buying pressure on the token.</em></p><hr><h2 id="publication-collateral">Publication Collateral</h2><p>For a marketplace to stay healthy, publishers need a direct incentive to be serious. One option being strongly considered: requiring a KRL deposit as collateral in order to publish on the marketplace.</p><p>This collateral would serve as an integrity guarantee, a publisher who releases defective or fraudulent content loses all or part of their deposit. Conversely, an active and honest publisher sees their collateral grow over time, with a portion of their earnings automatically reinvested into it.</p><p>When a publisher decides to leave the ecosystem, they recover their full accumulated collateral. It's a mechanic that creates genuine long-term stakes without imposing excessive friction at the point of entry.</p><hr><h2 id="the-self-reinforcing-loop">The Self-Reinforcing Loop</h2><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/05/KryllOS-KRL-flywheel-no-bg-3.png" class="kg-image" alt="$KRL in KryllOS: Utility and Tokenomics"></figure><p>Put together, these mechanics create a virtuous cycle, a flywheel, that strengthens itself over time.</p><p>More users on KryllOS → More marketplace volume → More buying pressure on KRL → Greater attractiveness and visibility → Repeat</p><p>Every participant benefits from everyone else's success. Users want a rich marketplace. Creators want a large user base. Stakers want both sides of the market to grow. And Kryll, as the platform, lives off the same flow. Nobody is playing against anyone else, the exact opposite of classic SaaS models where the platform extracts rent at users' expense.</p><hr><h2 id="what-krl-makes-possible-that-nothing-else-could-fund">What KRL Makes Possible That Nothing Else Could Fund</h2><p>Kryll makes strong product choices that set it apart: open source, self-hostable, free, non-custodial. Kryll never touches user funds and takes nothing from their trades. No subscriptions, no paywalls, no friction.</p><p>In that context, one might wonder why have a token at all. The answer comes down to one word: alignment.</p><p>With KRL, the ecosystem finances its own growth. The platform stays free because the marketplace funds development. Creators earn a living because users buy their work. And holders who believe in the project capture a direct share through real yield.</p><p>KRL isn't a financial layer bolted onto the product. It's what makes the product possible in its current form: open, free, sovereign, and viable for the long term.</p><hr><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="$KRL in KryllOS: Utility and Tokenomics" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes]]></title><description><![CDATA[KryllOS installs in 5 minutes: the installer guides every step, automatically secures your VPS and gives you full sovereignty over your trading data.]]></description><link>https://blog.kryll.io/install-kryllos-wizard-self-hosting/</link><guid isPermaLink="false">69f3689fd9e60f88cb3b7b1a</guid><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Fri, 01 May 2026 07:55:27 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/04/kryllos-wizard-thumbnail-2.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-wizard-thumbnail.png" class="kg-image" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"></figure><img src="https://blog.kryll.io/content/images/2026/04/kryllos-wizard-thumbnail-2.png" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"><p>Self-hosting has a beautiful promise: your keys, your data, your rules. And it comes with a very real price. You need to configure a VPS, properly set up an SSH tunnel, navigate Linux command lines, and make a series of configuration decisions without making mistakes, all while carrying the nagging anxiety of breaking something along the way. This is often where the promise meets reality.</p><p>When preparing the reboot of Kryll, we asked the community directly. 58% said they were ready to self-host their instance, provided they had guidance. In other words, for nearly six out of ten people, the installation process was not just a technical step.</p><p>The KryllOS installer was designed exactly for these people. Three steps. Five minutes. A fully operational instance, already secured.</p><hr><h2 id="why-an-installation-wizard-for-a-self-hosted-trading-bot">Why an installation wizard for a self-hosted trading bot?</h2><p>KryllOS is deliberately self-hosted. Your API keys stay on your machine, your trading data never leaves to any third-party cloud, and nobody holds custody of your funds. It's a choice of total sovereignty, but it's also a choice that traditionally requires users to have some technical knowledge.</p><p>We refuse that compromise. The idea behind KryllOS is the power of a professional tool with the simplicity of a consumer app. The installation wizard embodies exactly this philosophy: it automates what an experienced sysadmin would do by hand, and it does it better than a copy-pasted tutorial, because it bakes in security best practices by default.</p><p>Concretely, the KryllOS installer handles three tasks for you:</p><ul><li><strong>SSH connection</strong> to your VPS (no more juggling your terminal and private key)</li><li><strong>Security hardening</strong>, with the creation of a dedicated Linux user, firewall configuration, and remote connection rules, plus, optionally, port-knocking</li><li><strong>Deployment of KryllOS</strong> on your VPS and configuration of the KryllOS app on your computer</li></ul><p>You click three times, wait five minutes, and you trade.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-installer-full-done-watermark.png" class="kg-image" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"></figure><hr><h2 id="the-3-steps-of-the-kryllos-wizard">The 3 steps of the KryllOS wizard</h2><h3 id="step-1-connect-your-vps-to-kryllos">Step 1: Connect your VPS to KryllOS</h3><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-installer-close-1-watermark.png" class="kg-image" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"></figure><p>On the first screen, the wizard asks for three pieces of information:</p><ul><li>Your VPS IP address</li><li>The root password for that VPS</li><li>A username to create for KryllOS</li></ul><p>The choice to create a dedicated user, rather than running KryllOS with root privileges, is not a minor detail. It's the principle of least privilege: even in the unlikely scenario where a vulnerability were to affect the application, the attacker would find themselves confined to an account with limited rights, far from the absolute power that root provides.</p><hr><h3 id="step-2-choose-your-installation-mode-native-or-docker">Step 2: Choose your installation mode: Native or Docker</h3><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-installer-close-2-watermark.png" class="kg-image" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"></figure><p>The KryllOS installer offers two installation options:</p><ul><li><strong>Native installation:</strong> if your VPS is dedicated to KryllOS, this is the simplest and most direct choice. KryllOS installs directly on the system, without any additional layer.</li><li><strong>Dockerized installation:</strong> this is the option for advanced users who already have an active VPS running other services. Think of Docker as a sealed box sitting on your server. KryllOS runs inside it, completely isolated from the rest of the system. No conflicts with your other software, no interference in either direction.</li></ul><hr><p>On this same screen, you'll find a checkbox that may look minor but is worth its weight in gold: <strong>port-knocking</strong>.</p><h3 id="port-knocking-or-the-art-of-making-your-server-invisible">Port-knocking, or the art of making your server invisible</h3><p>Port-knocking is a somewhat forgotten but diabolically effective security mechanism. It makes your server completely invisible, no ports are open. To an automated scanner looking for vulnerable VPS machines, your server simply doesn't exist.</p><p><strong>But how does it actually work?</strong><br>Picture a secret door in a wall that, on the surface, has no visible entrance. For the door to open, you must knock in a precise sequence: three times, then twice, then five times. Anyone who doesn't know the code sees nothing but a smooth wall.</p><p>Port-knocking works on exactly this principle. A server has thousands of "doors" called ports, and connections pass through these ports. Normally, certain ports remain permanently open, like the SSH port, which enables remote connections. These open ports are precisely what hackers and their bots scan relentlessly, looking for a vulnerability.</p><p>With port-knocking, no port is open by default. Instead, the server quietly listens for connection attempts on a specific sequence of ports, say, 1200, then 3456, then 7890, in the right order and within a limited timeframe. This sequence is the "secret knock." If you know it and send it correctly, the server dynamically opens the SSH port, just long enough for your connection, then closes it immediately. To everyone else, the door never existed.</p><p>How can a hacker compromise a machine that doesn't even appear to exist from their perspective? That's exactly the point. KryllOS already stacks several security layers, dedicated user, Docker isolation, hardened SSH, and port-knocking adds the final touch: an invisibility layer. One checkbox, and your VPS disappears from the map.</p><hr><h3 id="step-3-summary-and-deployment">Step 3: Summary and deployment</h3><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-installer-close-3-watermark.png" class="kg-image" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"></figure><p>The final screen summarizes all the choices you've made. You review them, click deploy, and the installer takes over.</p><p>Behind the scenes, it runs through a precise sequence:</p><ol><li>Secure connection to the VPS</li><li>System compatibility check</li><li>Environment configuration</li><li>KryllOS installation</li><li>Final checks to ensure everything is running correctly</li></ol><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-installer-full-watermark.png" class="kg-image" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes"></figure><p>In under five minutes, KryllOS is up and running. The application is directly accessible on your local machine, already connected to your VPS.</p><hr><h2 id="what-remains-in-your-hands-after-installation">What remains in your hands after installation</h2><p>The installation ends, and you find yourself with far more than a simple configured instance. Behind the scenes, the wizard has been running two parallel workstreams.</p><p>On one side, on your VPS: KryllOS is deployed, the server is hardened, the environment is isolated, and your API keys will never leave that machine.</p><p>On the other side, on your computer: the KryllOS application has been configured locally. This becomes your control station. It establishes a secure SSH tunnel to your VPS and gives you access to the full KryllOS interface from a native app, without ever going through a browser or a third-party service. The VPS runs the engine. The application on your machine holds the wheel.</p><p>The old crypto adage "not your keys, not your coins" extends here to automated trading. Your strategies run on your machine, for you. And your only point of contact with all of this is an interface built to be used, not feared.</p><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="Installing KryllOS: the installer that turns 2 hours of configuration into 5 minutes" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[The KryllOS Marketplace: your unified store for automated trading]]></title><description><![CDATA[The KryllOS Marketplace brings together strategies, blocks, apps and AI skills to power your automated trading. One store, one currency, one ecosystem.]]></description><link>https://blog.kryll.io/kryllos-marketplace-automated-trading/</link><guid isPermaLink="false">69f2151dd9e60f88cb3b7ac9</guid><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Wed, 29 Apr 2026 14:31:15 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/04/marketplace-2.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/marketplace.png" class="kg-image" alt="The KryllOS Marketplace: your unified store for automated trading"></figure><img src="https://blog.kryll.io/content/images/2026/04/marketplace-2.png" alt="The KryllOS Marketplace: your unified store for automated trading"><p>KryllOS without its Marketplace would be like a Mac without the App Store: powerful, but limited to what was originally designed and shipped. An OS that can't expand after launch is an OS that stagnates. The Marketplace is what turns KryllOS into a living platform, an ecosystem that grows continuously through community contributions, not just the decisions of a central product team.</p><hr><h2 id="why-a-marketplace-in-an-os">Why a marketplace in an OS</h2><p>Kryll isn't a website with menus and pages. It's a multi-window, modular, self-hosted OS running on your VPS. Instead of being stuck with features hard-coded by a distant product team, you compose your own automated trading environment yourself.</p><p>And where there's an OS, there's a store. The Marketplace is the nerve center where everything converges: one place, one currency, one unified experience, whether you're looking for a complete strategy, a custom editor block, an app, or a skill for your AI agent.</p><p>One number that says it all: in the community survey run before launch, <strong>58% of respondents</strong> said they prefer downloading ready-to-use strategies rather than building them from scratch. The Marketplace isn't a nice-to-have, it's a core need.</p><hr><h2 id="what-you-can-download">What you can download</h2><p>Four content categories, from the most plug-and-play to the most advanced.</p><p><strong>Complete trading strategies:</strong> download a bot, connect your exchange, hit go. No need to touch the editor. Perfect if you don't have time to build from scratch, or if you want to learn from someone better than you. And since Kryll is open source, these strategies aren't black boxes, you can open them, dissect them, fork them. The Marketplace becomes a learning ground too.</p><p><strong>Custom editor blocks:</strong> building your own strategies but want superpowers? An exotic indicator, advanced logic, a connector to a third-party API. Install it, and the block appears in your library just like a native block.</p><p><strong>KryllOS apps:</strong> one level up, these aren't editor building blocks, they're OS extensions. Custom dashboards, market scanners, trading journals, external integrations. Each app opens in its own window, right alongside your editor or performance tracker. This is what takes Kryll beyond "bot factory" and into a full trading suite.</p><p><strong>Agent skills:</strong> the augmented AI layer to extend your agent's action capabilities. Every installed skill becomes a permanent capability of your agent, activatable on demand.</p><hr><h2 id="for-creators-a-wider-playing-field-an-audience-already-there">For creators: a wider playing field, an audience already there</h2><p>Everything above was about what you can download. The other side of the Marketplace is what you can sell.</p><p>If you can design a strategy that holds up, build a block others would kill to have, or imagine an app that changes a trader's daily workflow, your expertise becomes a monetizable asset, paid in KRL with every sale.</p><p>Three reasons to go for it now:</p><ul><li><strong>Four surfaces instead of one:</strong> Strategies, custom blocks, apps, agent skills. Whatever your profile, trader, dev, crypto ops, there's a category where what you already know how to do has real value, without switching careers.</li><li><strong>The audience is already there:</strong> The majority of KryllOS users arrive with the explicit intent to consume community content. No need to build an audience before you sell, just be good and visible in the store.</li><li><strong>Publishing is more accessible than anywhere else:</strong> KryllOS is open source and self-hosted: no proprietary stack to master, no app review, no gatekeeper. You build with the same tools as your future customers, and you publish.</li></ul><hr><h2 id="the-economic-engine-triple-split-and-flywheel">The economic engine: triple split and flywheel</h2><p>The Marketplace runs on a single currency: KRL, Kryll's native ecosystem token. Complete strategy, editor block, KryllOS app, or agent skill, everything bought in the store is settled in KRL. This unifies the buying experience for users, and directly connects the Marketplace to the rest of the tokenomics.</p><p>When a purchase is made, the KRL is split three ways.</p><ul><li><strong>The publisher gets their cut</strong>, making quality content creation economically viable and keeping the best creators motivated to keep producing.</li><li><strong>Kryll takes a commission</strong> that funds product development, infrastructure, and operations.</li><li><strong>KRL stakers receive a redistribution:</strong> this is the real yield mechanism. Staking KRL earns you a share of Marketplace volume, generated by real economic activity, not token inflation.</li></ul><hr><p>The Marketplace isn't a module sitting beside the Kryll product. It's the engine that turns an automated trading OS into a complete ecosystem, one that grows every day from what its community brings to it.</p><p>Whether you're here to download and run your bots without reinventing the wheel, or to publish your work and build a passive income stream in KRL, the Marketplace is probably your first entry point into KryllOS. And it might just be the reflex worth building: before opening the editor to a blank page, go see what the community has already put on the table.</p><hr><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="The KryllOS Marketplace: your unified store for automated trading" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[How KryllOS Revolutionizes Trading Bot Backtesting]]></title><description><![CDATA[KryllOS new backtest engine: 16-tick precision, MultiBT parallel runs, self-hosted & open source. Faster, sharper, fully private.]]></description><link>https://blog.kryll.io/how-kryllos-revolutionizes-trading-bot-backtesting-2/</link><guid isPermaLink="false">69e62305d9e60f88cb3b7845</guid><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Fri, 24 Apr 2026 13:49:11 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/04/backtest-7.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/backtest-6.png" class="kg-image" alt="How KryllOS Revolutionizes Trading Bot Backtesting"></figure><img src="https://blog.kryll.io/content/images/2026/04/backtest-7.png" alt="How KryllOS Revolutionizes Trading Bot Backtesting"><p>Before risking capital on a strategy, you test it on historical data. That's the principle behind backtesting. Simple in concept, but the quality of the results depends entirely on the tool you use.</p><p>In KryllOS, we rebuilt the engine from the ground up. Here's what that means.</p><h2 id="more-accurate-and-much-faster-">More accurate. And much faster.</h2><p>The new backtest engine uses a 16-tick-per-candle interpolation system that produces results significantly closer to what would happen in live trading.</p><p>But accuracy is only half the story. The other half is speed. The new engine is radically faster than the old one. That speed gain genuinely changes the way you work: you iterate more, test more, validate faster.</p><h2 id="run-multiple-backtests-at-the-same-time">Run multiple backtests at the same time</h2><p>With MultiBT, you no longer run backtests one after another. You run them all at once.</p><p>This opens up concrete possibilities: testing a strategy across multiple time periods to verify it holds up over time, validating it on several pairs or assets simultaneously, or comparing multiple configurations of the same system in a single run.</p><p>What used to take an hour of sequential testing now runs in parallel. More comparisons, in less time, with a far more complete picture of what your strategy is actually worth.</p><figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/kryllos-backtest-2.png" class="kg-image" alt="How KryllOS Revolutionizes Trading Bot Backtesting"></figure><h2 id="your-backtests-stay-with-you">Your backtests stay with you</h2><p>KryllOS is self-hosted. Backtests run entirely on your machine, and no data leaves it, not your strategies, not your results, not the pairs you're testing. On a cloud platform, you're entrusting your ideas to a third party. With KryllOS, they truly belong to you.</p><h2 id="an-engine-you-can-read">An engine you can read</h2><p>KryllOS is open source. The backtest engine is too. You can read exactly how the calculations are made, verify the interpolation logic, and make sure there are no hidden biases in the results.</p><p>In a field where trust in the tool matters as much as the tool itself, that's far from a minor detail.</p><hr><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="How KryllOS Revolutionizes Trading Bot Backtesting" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[When AI & Vibe Coding Meet Algorithmic Trading]]></title><description><![CDATA[Découvrez comment KryllOS combine IA et vibe coding pour créer, auditer et déployer vos stratégies de trading. Sans coder, juste avec vos idées.]]></description><link>https://blog.kryll.io/ai-vibe-coding-algorithmic-trading-bot/</link><guid isPermaLink="false">69e61d5ad9e60f88cb3b7830</guid><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Wed, 22 Apr 2026 13:53:16 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/04/ai-assistant.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/ai-assistant-1.png" class="kg-image" alt="When AI & Vibe Coding Meet Algorithmic Trading"></figure><img src="https://blog.kryll.io/content/images/2026/04/ai-assistant.png" alt="When AI & Vibe Coding Meet Algorithmic Trading"><p>In recent years, one concept has completely changed the way we create with AI: vibe coding. You describe what you want, and the AI builds it. You don't write code, you express an intention. In most tools, this generates code. In KryllOS, it lets you create trading strategies, editor blocks, and entire applications.</p><hr><h2 id="creating-and-modifying-a-trading-strategy">Creating and modifying a trading strategy</h2><p>In KryllOS, AI isn't integrated separately into each application. It's a standalone app at the system level, capable of interacting with everything you're working on.</p><p>Open the strategy editor, and the AI can act on it directly. Describe the logic of the trading bot you want to create, and the AI places the blocks and connects them.</p><p> Want to modify an existing strategy? It touches what needs to be touched, nothing more. Feel like exploring an idea before building? It brainstorms with you, then waits for your approval before creating anything.</p><p>Anyone who's spent hours wiring blocks by hand knows exactly what this changes.</p><hr><h2 id="auditing-before-deploying">Auditing before deploying</h2><p>Building fast is easy. Building right is another matter.</p><p>KryllOS's AI can read a strategy and surface issues that a classic backtest might miss. A backtest only detects a design flaw if the conditions to trigger it occur during the tested period. The AI reads the logic directly: it identifies flow freezes, dead branches, conditions that are never met, loops with no exit, without waiting for the market to trigger them.</p><p>It also simulates scenarios nobody thinks to test: flash crashes, zero volume, flat markets lasting weeks. And it verifies that the strategy actually does what you think it does. That's usually where the surprises come in.</p><hr><h2 id="creating-your-own-blocks">Creating your own blocks</h2><p>KryllOS lets you create your own editor blocks and add them to your library as if they were native. You can download them from the marketplace, or create them via AI. A few examples of what this enables:</p><ul><li>Adding natively absent indicators: VWAP, CVD, Pivot Points, Futures Funding Rate.</li><li>Encapsulated logic: a "market regime" block that detects trend/range/volatility and outputs a binary signal. A "trading session" block aligned with London or New York opening hours.</li><li>External data: a TradingView signal via webhook, a sentiment API, an on-chain condition before each entry.</li></ul><p>Once created, the block behaves exactly like a native block in KryllOS. And it can be shared or sold on the marketplace.</p><hr><h2 id="creating-kryllos-applications">Creating KryllOS applications</h2><p>KryllOS is a true OS: it supports third-party applications with a signing system, just like a classic operating system. If a native app doesn't do what you want, you build another one. With vibe coding, this promise becomes concrete. Here's what you can build:</p><ul><li>Alerts and notifications: an app that sends a Telegram message when a bot hits a profit threshold or when a trade closes.</li><li>Market data: a real-time screener, an on-chain/DeFi aggregator, a multi-exchange funding rate tracker.</li><li>Orchestration: an app that dynamically allocates capital across your bots based on their performance, or that activates/deactivates strategies based on market conditions.</li><li>Reporting: an automated trading journal, an export to your own tools, a weekly report generated without lifting a finger.</li></ul><p>We pushed the concept so far that our developers had fun building a Doom app. Perfect for unwinding between two backtests 😎</p><figure class="kg-card kg-embed-card"><iframe width="200" height="150" src="https://www.youtube.com/embed/o1WlohegQmc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Traders by Day, Doom Slayers by Night"></iframe></figure><hr><h2 id="kryllos-in-your-pocket-via-telegram">KryllOS in your pocket, via Telegram</h2><p>KryllOS runs on your VPS, but that doesn't mean you need to be at your desk to control it. Thanks to the Telegram integration, you stay in control of everything, wherever you are.</p><p>From a simple conversation, you can remotely start or stop a strategy, check your bots' performance in real time, and receive instant alerts when a trade triggers or a profit threshold is reached.</p><p>One message is all it takes to activate a strategy, pause another, or check the status of your portfolio. It's your dashboard in your pocket.</p><hr><h2 id="your-os-your-playground-">Your OS. Your playground.</h2><p>KryllOS belongs to you, in the most concrete sense of the word. It runs on your VPS, your data never leaves your environment, and you can truly make it whatever you want.</p><p>Everything you create, whether a strategy, a custom block, or an application, can stay private or join the marketplace for others to benefit from. That's how the ecosystem is built.</p><p>The possibilities are endless. The only limit is your imagination, and we can't wait to see what you'll create!</p><hr><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="When AI & Vibe Coding Meet Algorithmic Trading" loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[KryllOS is free. Genuinely free.]]></title><description><![CDATA[Kryll is free and no one can decide to change that. Open source, runs locally, zero access to your funds. What "free" actually means here.]]></description><link>https://blog.kryll.io/kryllos-truly-free/</link><guid isPermaLink="false">69da3621d9e60f88cb3b76bf</guid><category><![CDATA[en]]></category><dc:creator><![CDATA[Svein]]></dc:creator><pubDate>Mon, 20 Apr 2026 13:45:00 GMT</pubDate><media:content url="https://blog.kryll.io/content/images/2026/04/free-2.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.kryll.io/content/images/2026/04/free-1.png" class="kg-image" alt="KryllOS is free. Genuinely free."></figure><img src="https://blog.kryll.io/content/images/2026/04/free-2.png" alt="KryllOS is free. Genuinely free."><p>The word "free" has been so badly abused in the trading industry that it has almost lost all meaning. Behind the label, you'll typically find a fourteen-day trial, a version stripped of its useful features, a percentage taken from each transaction, or a subscription that appears at the exact moment the tool starts being useful to you.</p><p>Kryll follows none of these patterns. What you download is the complete version of the product, with no deferred strings attached.</p><hr><h2 id="what-the-product-doesn-t-include">What the product doesn't include</h2><p>Kryll has no subscription screen. It also has no pricing grid, no trial period, and no feature locked behind an "upgrade to a higher plan" button. The number of bots you can run is subject to no cap, nor is the complexity of your strategies, and no commission is taken on your transactions. Your bank card will never come into play.</p><hr><h2 id="the-practical-consequences">The practical consequences</h2><p>A tool that costs nothing radically changes the way you use it. The small mental profitability calculations you run before every decision disappear, and several uses become possible that weren't really viable with a monthly subscription in mind.</p><p>Testing a strategy idea on a small amount of capital, for example, stops being pointless. Running eight bots in parallel to compare their behavior costs no more than running just one. And nothing stops you from setting the tool aside for six months, long enough for a market cycle to feel readable again, then picking up exactly where you left off. No invoice will have arrived in the meantime.</p><hr><h2 id="a-matter-of-structure-not-commercial-policy">A matter of structure, not commercial policy</h2><p>This point is worth clarifying, because it is often misunderstood: the absence of fees on your trades is not a marketing promise. It stems from the way Kryll is built.</p><p>The software runs on your machine. Your API keys stay there. Your capital never passes through our servers at any point, and we have no access to your funds. Charging a commission on your transactions would be technically impossible for us. The profits generated by a strategy therefore come back to you in full, and this doesn't depend on any decision on our part, it is the product's architecture that guarantees it.</p><hr><h2 id="open-source-as-a-safety-net">Open source as a safety net</h2><p>If Kryll is entirely free, the explanation also lies in its open-source nature. A public, auditable, and freely modifiable codebase does not give its authors the option of deciding, one morning, that access to the software will become paid. The switch would be theoretically possible, but it would immediately give way to a community-maintained fork. That prospect alone is enough to make the idea unattractive.</p><p>Kryll is therefore not merely a product made available to you. It is, to a certain extent, a product that belongs to you.</p><hr><h2 id="frequently-asked-questions">Frequently asked questions</h2><p>A few questions come up regularly enough to be worth addressing.</p><ul><li><em>"Is a subscription planned down the line?"</em>No. Neither the project's business model nor its architecture provide for one, and the open-source nature makes the scenario unconvincing.</li><li><em>"Is the free version limited?"</em>No. All features are present from the very first launch.</li><li><em>"Where's the catch?"</em>There isn't one ;)</li></ul><p>Zero at installation, zero per month, zero on your trades. Kryll, in all of this, is simply the engine that keeps everything running.</p><hr><!--kg-card-begin: html--><div id="kryll-wl-banner-2026">
<style>
  @property --kwl-a {
    syntax: "<angle>";
    inherits: false;
    initial-value: 0deg;
  }

  #kryll-wl-banner-2026,
  #kryll-wl-banner-2026 *,
  #kryll-wl-banner-2026 *::before,
  #kryll-wl-banner-2026 *::after {
    margin: 0 !important;
    padding: 0 !important;
    box-sizing: border-box !important;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;
  }

  #kryll-wl-banner-2026 .kwl-o {
    position: relative !important;
    width: 100% !important;
    max-width: 780px !important;
    margin: 2rem auto !important;
    padding: 3px !important;
    border-radius: 24px !important;
    overflow: hidden !important;
    isolation: isolate !important;
    box-shadow: none !important;
  }

  #kryll-wl-banner-2026 .kwl-o::before {
    content: '' !important;
    position: absolute !important;
    inset: -150% !important;
    background: conic-gradient(
      from var(--kwl-a),
      transparent 0%,
      #6a45e7 10%,
      #926efc 20%,
      #b68dff 30%,
      #926efc 40%,
      transparent 50%,
      transparent 100%
    ) !important;
    animation: kwl-s 3s linear infinite !important;
    z-index: -1 !important;
  }

  #kryll-wl-banner-2026 .kwl-i {
    position: relative !important;
    display: block !important;
    border-radius: 21px !important;
    overflow: hidden !important;
    background: #0d0b1a !important;
    line-height: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-i img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-width: 100% !important;
    object-fit: contain !important;
    pointer-events: none !important;
    user-select: none !important;
    border: none !important;
    border-radius: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c {
    position: absolute !important;
    right: 7% !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    z-index: 2 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a {
    display: inline-block !important;
    padding: 14px 36px !important;
    font-size: 16px !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: .3px !important;
    color: #fff !important;
    text-decoration: none !important;
    background: linear-gradient(135deg, #6a45e7, #926efc) !important;
    border: none !important;
    border-radius: 12px !important;
    cursor: pointer !important;
    position: relative !important;
    overflow: hidden !important;
    transition: transform .25s cubic-bezier(.4, 0, .2, 1), box-shadow .3s ease !important;
    box-shadow: 0 4px 20px rgba(106, 69, 231, .45) !important;
    width: auto !important;
    height: auto !important;
    max-width: none !important;
    min-width: 0 !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::before {
    content: '' !important;
    position: absolute !important;
    inset: 0 !important;
    border-radius: inherit !important;
    background: linear-gradient(120deg, rgba(255,255,255,0) 30%, rgba(255,255,255,.18) 50%, rgba(255,255,255,0) 70%) !important;
    background-size: 200% 100% !important;
    animation: kwl-sh 3s ease-in-out infinite !important;
  }

  #kryll-wl-banner-2026 .kwl-c a::after {
    content: '' !important;
    position: absolute !important;
    inset: -4px !important;
    border-radius: 16px !important;
    border: 2px solid rgba(146, 110, 252, .4) !important;
    animation: kwl-p 2.5s ease-in-out infinite !important;
    pointer-events: none !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:hover {
    transform: scale(1.07) !important;
    color: #fff !important;
    box-shadow: 0 6px 32px rgba(106, 69, 231, .6), 0 0 24px rgba(146, 110, 252, .35) !important;
  }

  #kryll-wl-banner-2026 .kwl-c a:active {
    transform: scale(.97) !important;
    box-shadow: 0 2px 12px rgba(106, 69, 231, .5) !important;
  }

  @keyframes kwl-s {
    to { --kwl-a: 360deg; }
  }

@keyframes kwl-sh { 0% { background-position: 200% 0 } to { background-position: -200% 0 } }
  @keyframes kwl-p  { 0%, 100% { opacity: .3; transform: scale(1) } 50% { opacity: .8; transform: scale(1.04) } }

  @media (max-width: 600px) {
    #kryll-wl-banner-2026 .kwl-c { right: 4% !important }
    #kryll-wl-banner-2026 .kwl-c a { padding: 10px 22px !important; font-size: 13px !important; border-radius: 10px !important }
  }
</style>

<div class="kwl-o">
  <div class="kwl-i">
    <img src="https://blog.kryll.io/content/images/2026/04/kryllOS-join-waitlist-banner-2.png" alt="KryllOS is free. Genuinely free." loading="lazy" decoding="async">
    <div class="kwl-c">
      <a href="https://os.kryll.io/#waitlist" target="_blank" rel="noopener noreferrer">Join the Waitlist</a>
    </div>
  </div>
</div>
</div><!--kg-card-end: html--><!--kg-card-begin: html--><style>
ul li::marker {
    color: #7774FF;
    font-size: 1.2em;
}

ol li::marker {
    color: #7774FF;
    font-size: 1em;
    font-weight: bold;
}

.single-post .post-content a {
    color: #7774FF !important;
}

code {
    color: #7774FF;
    background-color: #EDEDFF;
    padding: 2px 4px;
    border-radius: 4px;
    font-family: monospace;
}
</style>
<!--kg-card-end: html-->]]></content:encoded></item></channel></rss>