<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/curl-performance-7nwvdvse5" -->

---
title: curl performance | daily.dev
description: Daniel Stenberg describes building a new performance testing system for curl from scratch, after years of shelving the idea. Running on his own local...
canonical: https://daily.dev/posts/curl-performance-7nwvdvse5
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: curl performance | daily.dev
og:description: Daniel Stenberg describes building a new performance testing system for curl from scratch, after years of shelving the idea. Running on his own local...
og:url: https://daily.dev/posts/curl-performance-7nwvdvse5
og:image: https://api.daily.dev/og/posts/7nWVdvse5.png
og:image:alt: curl performance
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# curl performance

**[daniel.haxx.se](https://daily.dev/sources/danielhaxxse)** · 9 min read · 24 upvotes · 1 comments

## Summary

Daniel Stenberg describes building a new performance testing system for curl from scratch, after years of shelving the idea. Running on his own local development machine (to avoid noisy cloud infrastructure), a shell script pulls the latest git source, builds curl, and runs 24 tests every twenty minutes via crontab, logging results and generating gnuplot graphs. Results are automatically published live at curl.se/perf. The setup already surfaced regressions within hours of going live, prompting quick fixes from curl developers. New concepts introduced include 'stakes' (manually set thresholds to flag regressions), box-and-whisker plots for distribution, LTTB downsampling for long-term graphs, and the Mann-Kendall Test + Sen's Slope for trend detection. The code lives in a new curl/perf GitHub repository, and Stenberg is inviting contributions.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://daniel.haxx.se/blog/2026/08/14/curl-performance-2>

## Questions this post answers

### How does curl measure and track performance regressions over time?

Curl runs an automated performance test suite every twenty minutes from a crontab, building the latest git commit and running about 24 localhost-based tests such as download speed and allocation counts for a single HTTP download. Results are graphed with gnuplot, including box-and-whisker plots showing minimum, maximum, P25, P75, median, and mean per test, published live at curl.se/perf.

_Anyone maintaining a performance-sensitive C library can compare notes on lightweight testing setups via daily.dev._

### What is a 'stake' in curl's performance testing system?

A stake is an arbitrary, manually set threshold for a specific performance test, used as a marker to measure results against over time. When conditions change intentionally, such as new hardware or updated dependencies, the stake gets adjusted; if results deviate too far from a stake in the wrong direction, it can signal that a bad change was merged.

_Teams designing regression alerts for build metrics can track this kind of threshold-based approach on daily.dev._

### What algorithm can downsample long-term performance graph data for many commits?

The Largest-Triangle-Three-Buckets (LTTB) algorithm is used to downsample a full range of build results into a reasonable number of data points for long-term trend graphs, since displaying every commit becomes impractical once hundreds of builds accumulate. A separate Mann-Kendall Test with Sen's Slope is also considered for identifying gradual performance trends across commits.

_Developers charting long-running metrics data can find related downsampling techniques through daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@agustinbarrientos** · 1 upvotes

> The graph needs to mark compiler and test-machine changes. A new toolchain can look like a curl regression.

## Similar posts on daily.dev

- [One hundred curl graphs](https://daily.dev/posts/one-hundred-curl-graphs-qzmnf5wex) · daniel.haxx.se · 2 upvotes · 0 comments
- [10K curl downloads per year](https://daily.dev/posts/10k-curl-downloads-per-year-tewsnuld1) · daniel.haxx.se · 3 upvotes · 0 comments
- [Stenberg: curl summer of bliss](https://daily.dev/posts/stenberg-curl-summer-of-bliss-lng7olbrg) · LWN.net · 0 upvotes · 0 comments
- [A curl mountain movie](https://daily.dev/posts/a-curl-mountain-movie-6jybbphij) · daniel.haxx.se · 4 upvotes · 0 comments

---

Tags: [#open-source](https://daily.dev/tags/open-source), [#curl](https://daily.dev/tags/curl)

[View this post on daily.dev](https://daily.dev/posts/curl-performance-7nwvdvse5)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"curl performance","url":"https://daily.dev/posts/curl-performance-7nwvdvse5","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/curl-performance-7nwvdvse5"},"datePublished":"2026-08-14T11:22:53.462Z","dateModified":"2026-09-13T19:07:24.366Z","description":"Daniel Stenberg describes building a new performance testing system for curl from scratch, after years of shelving the idea. Running on his own local...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6eadb0dd10db182560539241b389d707?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6eadb0dd10db182560539241b389d707?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"daniel.haxx.se","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"daniel.haxx.se","logo":"https://media.daily.dev/image/upload/s--us7Mqjk6--/f_auto/v1714798819/logos/danielhaxxse","url":"https://daily.dev/sources/danielhaxxse"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/curl-performance-7nwvdvse5","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":24},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"open-source,curl","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"daniel.haxx.se","item":"https://daily.dev/sources/danielhaxxse"},{"@type":"ListItem","position":3,"name":"curl performance"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/curl-performance-7nwvdvse5","comment":[{"@type":"Comment","text":"The graph needs to mark compiler and test-machine changes. A new toolchain can look like a curl regression.","datePublished":"2026-08-16T18:42:40.883Z","url":"https://daily.dev/posts/7nWVdvse5#c-ZYYS2kRFc","author":{"@type":"Person","name":"Agustin Barrientos","url":"https://daily.dev/agustinbarrientos","image":"https://media.daily.dev/image/upload/s--5ayxQnqn--/f_auto/v1788281802/avatars/avatar_wQYYVe5Tbj0NJ7C7qPoa8?_a=BAMAMicg0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/curl-performance-7nwvdvse5#faq","mainEntity":[{"@type":"Question","name":"How does curl measure and track performance regressions over time?","acceptedAnswer":{"@type":"Answer","text":"Curl runs an automated performance test suite every twenty minutes from a crontab, building the latest git commit and running about 24 localhost-based tests such as download speed and allocation counts for a single HTTP download. Results are graphed with gnuplot, including box-and-whisker plots showing minimum, maximum, P25, P75, median, and mean per test, published live at curl.se/perf. Anyone maintaining a performance-sensitive C library can compare notes on lightweight testing setups via daily.dev."}},{"@type":"Question","name":"What is a 'stake' in curl's performance testing system?","acceptedAnswer":{"@type":"Answer","text":"A stake is an arbitrary, manually set threshold for a specific performance test, used as a marker to measure results against over time. When conditions change intentionally, such as new hardware or updated dependencies, the stake gets adjusted; if results deviate too far from a stake in the wrong direction, it can signal that a bad change was merged. Teams designing regression alerts for build metrics can track this kind of threshold-based approach on daily.dev."}},{"@type":"Question","name":"What algorithm can downsample long-term performance graph data for many commits?","acceptedAnswer":{"@type":"Answer","text":"The Largest-Triangle-Three-Buckets (LTTB) algorithm is used to downsample a full range of build results into a reasonable number of data points for long-term trend graphs, since displaying every commit becomes impractical once hundreds of builds accumulate. A separate Mann-Kendall Test with Sen's Slope is also considered for identifying gradual performance trends across commits. Developers charting long-running metrics data can find related downsampling techniques through daily.dev."}}]}
```

