

<!DOCTYPE html>

<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge">

  <link rel="stylesheet" href="/bolt/blog/assets/css/just-the-docs-default.css">

  <link rel="stylesheet" href="/bolt/blog/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet">

  <style id="jtd-nav-activation">
  
    .site-nav ul li a {
      background-image: none;
    }

  </style>

  

  
    <script src="/bolt/blog/assets/js/vendor/lunr.min.js"></script>
  

  <script src="/bolt/blog/assets/js/just-the-docs.js"></script>

  <meta name="viewport" content="width=device-width, initial-scale=1">

  



  <!-- Begin Jekyll SEO tag v2.9.0 -->
<title>Bolt | Bolt is a C++ acceleration library providing a composable, extensible, and high-performance data processing toolkit for analytical systems.</title>
<meta name="generator" content="Jekyll v4.4.1" />
<meta property="og:title" content="Bolt" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Bolt is a C++ acceleration library providing a composable, extensible, and high-performance data processing toolkit for analytical systems." />
<meta name="twitter:description" property="og:description" content="Bolt is a C++ acceleration library providing a composable, extensible, and high-performance data processing toolkit for analytical systems." />
<link rel="canonical" href="https://bytedance.github.io/bolt/blog/assets/css/just-the-docs-head-nav.css" />
<meta property="og:url" content="https://bytedance.github.io/bolt/blog/assets/css/just-the-docs-head-nav.css" />
<meta property="og:site_name" content="Bolt" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="Bolt" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","description":"Bolt is a C++ acceleration library providing a composable, extensible, and high-performance data processing toolkit for analytical systems.","headline":"Bolt","url":"https://bytedance.github.io/bolt/blog/assets/css/just-the-docs-head-nav.css"}</script>
<!-- End Jekyll SEO tag -->


  <link rel="stylesheet" href="/bolt/blog/assets/css/custom.css">

<script>
  document.addEventListener('DOMContentLoaded', function () {
    var siteNav = document.querySelector('.site-nav');
    var siteTitle = document.querySelector('.site-title');

    if (siteTitle && !siteTitle.querySelector('.bolt-site-logo')) {
      var logo = document.createElement('img');
      logo.className = 'bolt-site-logo';
      logo.src = '/bolt/blog/assets/images/bolt-nav-logo.png';
      logo.alt = 'Bolt logo';
      siteTitle.prepend(logo);
    }

    if (siteTitle && !siteTitle.querySelector('.bolt-sidebar-toggle')) {
      siteTitle.setAttribute('role', 'button');
      siteTitle.setAttribute('aria-controls', 'site-nav');
      siteTitle.setAttribute('aria-expanded', 'true');

      var sidebarToggleIcon = document.createElement('span');
      sidebarToggleIcon.className = 'bolt-sidebar-toggle';
      sidebarToggleIcon.setAttribute('aria-hidden', 'true');
      sidebarToggleIcon.textContent = '‹';
      siteTitle.appendChild(sidebarToggleIcon);

      var setSidebarCollapsed = function (collapsed) {
        document.body.classList.toggle('bolt-sidebar-collapsed', collapsed);
        siteTitle.setAttribute('aria-expanded', collapsed ? 'false' : 'true');
        sidebarToggleIcon.textContent = collapsed ? '›' : '‹';
        sidebarToggleIcon.setAttribute('title', collapsed ? 'Expand sidebar' : 'Collapse sidebar');
        try {
          window.localStorage.setItem('bolt-sidebar-collapsed', collapsed ? 'true' : 'false');
        } catch (error) {}
      };

      try {
        setSidebarCollapsed(window.localStorage.getItem('bolt-sidebar-collapsed') === 'true');
      } catch (error) {
        setSidebarCollapsed(false);
      }

      siteTitle.addEventListener('click', function (event) {
        event.preventDefault();
        setSidebarCollapsed(!document.body.classList.contains('bolt-sidebar-collapsed'));
      });

      siteTitle.addEventListener('keydown', function (event) {
        if (event.key === 'Enter' || event.key === ' ') {
          event.preventDefault();
          setSidebarCollapsed(!document.body.classList.contains('bolt-sidebar-collapsed'));
        }
      });
    }

    if (!siteNav || siteNav.querySelector('.blog-post-links')) {
      return;
    }

    var posts = [
      
      {
        title: "Merging Multi-Level Dictionary Encoding",
        url: "/bolt/blog/2026/07/03/merging-multi-level-dictionary/"
      },
      
      {
        title: "Refactoring HiveHash for Faster Shuffle Hashing",
        url: "/bolt/blog/2026/07/03/hivehash-refactor/"
      },
      
      {
        title: "DenseRow: A Compact Row Format for Shuffle",
        url: "/bolt/blog/2026/07/03/denserow-compact-shuffle-row-format/"
      },
      
      {
        title: "Bolt Shuffle Offload: Turning Gluten Shuffle into Bolt Operators",
        url: "/bolt/blog/2026/07/03/bolt-shuffle-offload/"
      },
      
      {
        title: "Operator Fusion: Reducing Data Layout Conversions",
        url: "/bolt/blog/2026/07/01/operator-fusion-eliminating-row-column-conversion/"
      },
      
      {
        title: "How to Write a Blog Post",
        url: "/bolt/blog/2026/06/27/how-to-write-blog/"
      }
      
    ];

    if (posts.length === 0) {
      return;
    }

    var blogLink = Array.from(siteNav.querySelectorAll('a')).find(function (link) {
      return link.textContent.trim() === 'Blog' || /\/blog\.html$/.test(link.pathname);
    });

    var blogItem = blogLink ? blogLink.closest('li') : null;
    if (!blogItem) {
      var rootList = siteNav.querySelector('.nav-list');
      if (!rootList) {
        return;
      }

      blogItem = document.createElement('li');
      blogItem.className = 'nav-list-item';
      blogItem.innerHTML = '<a class="nav-list-link" href="/bolt/blog/blog.html">Blog</a>';
      rootList.appendChild(blogItem);
      blogLink = blogItem.querySelector('a');
    }

    blogItem.classList.add('blog-nav-item');

    var existingTitles = Array.from(blogItem.querySelectorAll('a')).map(function (link) {
      return link.textContent.trim();
    });
    var alreadyRenderedByTheme = posts.some(function (post) {
      return existingTitles.indexOf(post.title) !== -1;
    });
    if (alreadyRenderedByTheme) {
      return;
    }

    if (blogLink && !blogItem.querySelector('.blog-toggle-button')) {
      var blogToggle = document.createElement('button');
      blogToggle.className = 'blog-toggle-button';
      blogToggle.type = 'button';
      blogToggle.setAttribute('aria-label', 'Toggle blog posts');
      blogToggle.setAttribute('aria-expanded', 'true');
      blogToggle.textContent = '▾';
      blogLink.insertAdjacentElement('afterend', blogToggle);

      var setBlogCollapsed = function (collapsed) {
        blogItem.classList.toggle('blog-posts-collapsed', collapsed);
        blogToggle.setAttribute('aria-expanded', collapsed ? 'false' : 'true');
        try {
          window.localStorage.setItem('bolt-blog-posts-collapsed', collapsed ? 'true' : 'false');
        } catch (error) {}
      };

      try {
        setBlogCollapsed(window.localStorage.getItem('bolt-blog-posts-collapsed') === 'true');
      } catch (error) {
        setBlogCollapsed(false);
      }

      blogToggle.addEventListener('click', function (event) {
        event.preventDefault();
        event.stopPropagation();
        setBlogCollapsed(!blogItem.classList.contains('blog-posts-collapsed'));
      });
    }

    var postList = document.createElement('ul');
    postList.className = 'nav-list blog-post-links';
    postList.setAttribute('aria-label', 'Blog posts');

    posts.forEach(function (post) {
      var item = document.createElement('li');
      item.className = 'nav-list-item';

      var link = document.createElement('a');
      link.className = 'nav-list-link';
      link.href = post.url;
      link.textContent = post.title;

      item.appendChild(link);
      postList.appendChild(item);
    });

    blogItem.appendChild(postList);
  });
</script>

<script>
  // Dark/light theme toggle: defaults to light, remembers user choice.
  (function () {
    var KEY = 'bolt-theme';
    function applyTheme(isDark) {
      document.body.classList.toggle('bolt-dark', isDark);
    }
    document.addEventListener('DOMContentLoaded', function () {
      var saved = null;
      try { saved = window.localStorage.getItem(KEY); } catch (e) {}
      var isDark = saved === 'dark';
      applyTheme(isDark);

      var btn = document.createElement('button');
      btn.className = 'bolt-theme-toggle';
      btn.type = 'button';
      btn.setAttribute('aria-label', 'Toggle dark mode');
      btn.textContent = isDark ? '\u2600\uFE0F' : '\uD83C\uDF19';
      btn.addEventListener('click', function () {
        var nowDark = !document.body.classList.contains('bolt-dark');
        applyTheme(nowDark);
        btn.textContent = nowDark ? '\u2600\uFE0F' : '\uD83C\uDF19';
        try { window.localStorage.setItem(KEY, nowDark ? 'dark' : 'light'); } catch (e) {}
      });

      // Place the toggle at the far right of the top aux-nav toolbar,
      // so "Bolt on GitHub" sits to its left and nothing overlaps.
      var auxNav = document.querySelector('.aux-nav .aux-nav-list')
        || document.querySelector('.aux-nav');
      if (auxNav) {
        if (auxNav.classList.contains('aux-nav-list')) {
          var li = document.createElement('li');
          li.className = 'aux-nav-list-item bolt-theme-toggle-item';
          li.appendChild(btn);
          auxNav.appendChild(li);
        } else {
          auxNav.appendChild(btn);
        }
      } else {
        document.body.appendChild(btn);
      }
    });
  })();
</script>

<script>
  // Resizable sidebar: drag the right edge to change the sidebar width.
  (function () {
    var KEY = 'bolt-sidebar-width';
    var MIN = 180;   // px
    var MAX = 520;   // px
    var root = document.documentElement;

    function clamp(px) { return Math.max(MIN, Math.min(MAX, px)); }
    function applyWidth(px) {
      root.style.setProperty('--bolt-sidebar-width', px + 'px');
    }

    document.addEventListener('DOMContentLoaded', function () {
      var sideBar = document.querySelector('.side-bar');
      if (!sideBar) { return; }

      // Only enable on desktop layout where the sidebar is fixed on the left.
      if (!window.matchMedia('(min-width: 50rem)').matches) { return; }

      document.body.classList.add('bolt-resizable-ready');

      // Restore saved width (fallback to current rendered width).
      var saved = null;
      try { saved = window.localStorage.getItem(KEY); } catch (e) {}
      if (saved && !isNaN(parseInt(saved, 10))) {
        applyWidth(clamp(parseInt(saved, 10)));
      } else {
        applyWidth(clamp(sideBar.getBoundingClientRect().width));
      }

      var resizer = document.createElement('div');
      resizer.className = 'bolt-sidebar-resizer';
      resizer.setAttribute('role', 'separator');
      resizer.setAttribute('aria-orientation', 'vertical');
      resizer.setAttribute('aria-label', 'Resize sidebar');
      document.body.appendChild(resizer);

      var dragging = false;

      function onMove(clientX) {
        var px = clamp(clientX);
        applyWidth(px);
      }
      function onMouseMove(e) { if (dragging) { onMove(e.clientX); } }
      function onTouchMove(e) {
        if (dragging && e.touches && e.touches[0]) { onMove(e.touches[0].clientX); }
      }
      function stop() {
        if (!dragging) { return; }
        dragging = false;
        resizer.classList.remove('bolt-dragging');
        document.body.classList.remove('bolt-resizing');
        var cur = parseInt(getComputedStyle(root).getPropertyValue('--bolt-sidebar-width'), 10);
        if (!isNaN(cur)) {
          try { window.localStorage.setItem(KEY, String(cur)); } catch (e) {}
        }
        document.removeEventListener('mousemove', onMouseMove);
        document.removeEventListener('mouseup', stop);
        document.removeEventListener('touchmove', onTouchMove);
        document.removeEventListener('touchend', stop);
      }
      function start() {
        dragging = true;
        resizer.classList.add('bolt-dragging');
        document.body.classList.add('bolt-resizing');
        document.addEventListener('mousemove', onMouseMove);
        document.addEventListener('mouseup', stop);
        document.addEventListener('touchmove', onTouchMove, { passive: false });
        document.addEventListener('touchend', stop);
      }

      resizer.addEventListener('mousedown', function (e) { e.preventDefault(); start(); });
      resizer.addEventListener('touchstart', function (e) { e.preventDefault(); start(); }, { passive: false });
      // Double-click resets to the default width.
      resizer.addEventListener('dblclick', function () {
        applyWidth(264);
        try { window.localStorage.setItem(KEY, '264'); } catch (e) {}
      });
    });
  })();
</script>


</head>

<body>
  <a class="skip-to-main" href="#main-content">Skip to main content</a>
  <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
  <symbol id="svg-link" viewBox="0 0 24 24">
  <title>Link</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link">
    <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
  </svg>
</symbol>

  <symbol id="svg-menu" viewBox="0 0 24 24">
  <title>Menu</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu">
    <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line>
  </svg>
</symbol>

  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
  <title>Expand</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right">
    <polyline points="9 18 15 12 9 6"></polyline>
  </svg>
</symbol>

  <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE -->
<symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link">
  <title id="svg-external-link-title">(external link)</title>
  <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line>
</symbol>

  
    <symbol id="svg-doc" viewBox="0 0 24 24">
  <title>Document</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file">
    <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline>
  </svg>
</symbol>

    <symbol id="svg-search" viewBox="0 0 24 24">
  <title>Search</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search">
    <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line>
  </svg>
</symbol>

  
  
    <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md -->
<symbol id="svg-copy" viewBox="0 0 16 16">
  <title>Copy</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16">
    <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
    <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
  </svg>
</symbol>
<symbol id="svg-copied" viewBox="0 0 16 16">
  <title>Copied</title>
  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16">
    <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/>
    <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/>
  </svg>
</symbol>

  
</svg>

  
    <header class="side-bar">
  <div class="site-header">
    <a href="/bolt/blog/" class="site-title lh-tight">
  Bolt

</a>
    <button id="menu-button" class="site-button btn-reset" aria-label="Menu" aria-expanded="false">
      <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg>
    </button>
  </div>

  <nav aria-label="Main" id="site-nav" class="site-nav">
  
  
    <ul class="nav-list"><li class="nav-list-item"><a href="/bolt/blog/" class="nav-list-link">Overview</a></li><li class="nav-list-item"><a href="/bolt/blog/blog/" class="nav-list-link">Blog</a></li></ul>
  <ul class="nav-list"><li class="nav-list-item external">
          <a href="https://github.com/bytedance/bolt" class="nav-list-link external"
            
          >
            GitHub
            <svg viewBox="0 0 24 24" aria-labelledby="svg-external-link-title"><use xlink:href="#svg-external-link"></use></svg>
          </a>
        </li></ul>
</nav>


<div class="d-md-block d-none site-footer">
  
  
    This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
  
  </div>
</header>

  
  <div class="main" id="top">
    <div id="main-header" class="main-header">
  
    

<div class="search" role="search">
  <div class="search-input-wrap">
    <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search Bolt" autocomplete="off">
    <label for="search-input" class="search-label">
      <span class="sr-only">Search Bolt</span>
      <svg viewBox="0 0 24 24" class="search-icon" aria-hidden="true"><use xlink:href="#svg-search"></use></svg>
    </label>
  </div>
  <div id="search-results" class="search-results"></div>
</div>

  
  
  
    <nav aria-label="Auxiliary" class="aux-nav">
  <ul class="aux-nav-list">
    
      <li class="aux-nav-list-item">
        <a href="https://github.com/bytedance/bolt" class="site-button"
          
        >
          Bolt on GitHub
        </a>
      </li>
    
  </ul>
</nav>

  
</div>

    <div class="main-content-wrap">
      
      <div id="main-content" class="main-content">
        <main>
          
            <h.site-nav ul li a {
  background-image: linear-gradient(-90deg, rgb(234.8, 236.82, 244.9) 0%, rgba(234.8, 236.82, 244.9, 0.8) 80%, rgba(234.8, 236.82, 244.9, 0) 100%);
}

          

          
            
          
        </main>
        
<hr>
<footer>
  

  <p class="text-small mb-0">Bolt is licensed under the Apache License 2.0.</p>

  <div class="d-md-none mt-4 fs-2">
    
    
      This site uses <a href="https://github.com/just-the-docs/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.
    
  </div>
</footer>

      </div>
    </div>
    
      

<div class="search-overlay"></div>

    
  </div>

  
</body>
</html>

