<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: tylerflint</title><link>https://news.ycombinator.com/user?id=tylerflint</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 24 Sep 2026 20:26:46 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tylerflint" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Show HN: QTap DevTools – Chrome-style encrypted traffic inspector for Linux]]></title><description><![CDATA[
<p>Hi HN, I'm Tyler Flint. Eight months ago we shared qtap here (<a href="https://news.ycombinator.com/item?id=43928118">https://news.ycombinator.com/item?id=43928118</a>).<p>Today we're releasing DevTools - a browser-based interface that gives you the Chrome Network tab experience for server-side HTTP/S traffic.<p>The problem: You're debugging a production issue. An external dependency is returning errors. Your logs say "request failed" but not what was actually sent. Adding debug logging means redeploying and restarting services - which takes time and often changes the conditions you're trying to debug. tcpdump shows encrypted blobs. Setting up mitmproxy means certificates, restarts, reconfiguration.<p>Our solution: install qtap, enable DevTools, open localhost:10001 in your browser. You're now watching live HTTP/S traffic - every request, response, header, body - in plaintext. No restarts, no certificates, no code changes.<p>It works by hooking into TLS libraries (OpenSSL, Go crypto, Java SSL, Node.js, etc) via eBPF before encryption happens.<p>Getting started:<p><pre><code>    # Option A: Install script (inspect it first if you prefer)
    curl -s https://get.qpoint.io/install | less
    curl -s https://get.qpoint.io/install | sudo sh
    sudo qtap --enable-dev-tools
</code></pre>
If you're (rightly) skeptical of curl | sh, grab the binary directly or build from source. We get it.<p><pre><code>    # Option B: Direct binary download (use the link for your architecture)
    curl -L https://downloads.qpoint.io/qpoint/qtap-latest-linux-amd64.tgz -o qtap.tgz
    # curl -L https://downloads.qpoint.io/qpoint/qtap-latest-linux-arm64.tgz -o qtap.tgz
    tar -xzf qtap.tgz
    sudo ./qtap --enable-dev-tools
</code></pre>
Then open http://localhost:10001<p><pre><code>    # For remote servers, use SSH port forwarding or Tailscale/Twingate
    ssh -L 10001:localhost:10001 user@remote-server
</code></pre>
Key features:
- Process/container attribution (which container made that call?)
- Real-time SSE streaming
- Copy any request as cURL
- Data never leaves your machine<p>DevTools is free and open source (AGPL-3.0).<p>GitHub: <a href="https://github.com/qpoint-io/qtap" rel="nofollow">https://github.com/qpoint-io/qtap</a>
Docs: <a href="https://docs.qpoint.io/release-notes/devtools" rel="nofollow">https://docs.qpoint.io/release-notes/devtools</a><p>Questions we'd love feedback on:
- What debugging scenarios would you use this for?
- Any protocols beyond HTTP you'd want? (Postgres, MySQL, Redis coming soon)</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46707863">https://news.ycombinator.com/item?id=46707863</a></p>
<p>Points: 30</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 21 Jan 2026 16:26:12 +0000</pubDate><link>https://qpoint.io/products/devtools/</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=46707863</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46707863</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>Java is supported, but currently in the pro version. Since JavaSSL is implemented in Java code, which runs in the Java VM and not exported as static symbols that can be uprobe'd, there is a bit more involved to generate a bridge between the JVM bytecode and static symbols that can be probed.</p>
]]></description><pubDate>Fri, 09 May 2025 02:49:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43933386</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43933386</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43933386</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>Great idea!<p>On an unrelated note, your work has inspired most of my career in Solaris/Illumos/Linux systems and honestly this project likely wouldn't have happened if it wasn't for all of your books/blogs/projects to help me along the way. Thank you!</p>
]]></description><pubDate>Fri, 09 May 2025 01:55:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=43933140</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43933140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43933140</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>The short answer is that we only have to calculate the offset per go version, no expensive runtime scanning is required.<p>The long answer is that the offsets are the byte alignment offsets for the go structs containing the pointers to the file descriptor and buffers. Fortunately we only have to calculate these for each version where the TLS structs within go actually change, so not even for every version. For instance, if a field is added, removed, or changes type then the location in memory where those pointers will be found changes. We can then calculate the actual offset at runtime where we know which architecture (amd64, arm64, etc) with a simple calculation. Within the eBPF probe, when the function is called, it uses pointer arithmetic to extract the location of the file descriptor and buffer directly.</p>
]]></description><pubDate>Thu, 08 May 2025 20:59:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=43931309</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43931309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43931309</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>The main benefit is complete coverage. In production systems there are many different workloads with many different binaries, each with different build processes. Leveraging eBPF enables seeing everything on a system without having to adjust the build pipeline.</p>
]]></description><pubDate>Thu, 08 May 2025 17:39:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=43928897</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43928897</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43928897</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>Just run the qtap agent on whatever Linux machine has apps running on it and it will see everything through the kernel vs eBPF.<p>You can customize config and/or integrate with existing observability pipelines, but initially you just need to turn it on for it to work. No app instrumentation required.</p>
]]></description><pubDate>Thu, 08 May 2025 17:24:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=43928686</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43928686</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43928686</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>We have Go support, but it is not open sourced yet. Go is a bit more complicated but we were able to get it after some cave diving in the ELF formats. To give you a little insight on how this works, because Go is statically linked, we need to pull several different offsets of the functions we are going to hook into.<p>We do this by scanning every version of Go that is released to find offsets in the standard library that won't change. Then when we detect a new Go process, we use an ELF scanner to find some function offsets and hook into those with uprobes. Using both of these, we have all the information we need to see Go pre-encryption content as well as attribute it to connections and processes.</p>
]]></description><pubDate>Thu, 08 May 2025 17:20:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43928612</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43928612</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43928612</guid></item><item><title><![CDATA[New comment by tylerflint in "Show HN: Using eBPF to see through encryption without a proxy"]]></title><description><![CDATA[
<p>Great point! Yes it supports both scenarios. Qtap scans the binary ELF (curl, rust, etc) and looks for the TLS symbols. If they were statically compiled the eBPF probes will be attached directly to the binary, if dynamically linked the probes will be attached to the symbols in the library (.so).</p>
]]></description><pubDate>Thu, 08 May 2025 17:17:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=43928572</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43928572</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43928572</guid></item><item><title><![CDATA[Show HN: Using eBPF to see through encryption without a proxy]]></title><description><![CDATA[
<p>Hi HN, I'm Tyler Flint, one of the creators of qtap.<p>For a while now, my team and I at Qpoint.io have been grappling with the challenge of understanding what's actually happening inside the encrypted traffic leaving our production systems. Modern apps rely heavily on third-party APIs (think payment processors, data providers, etc.), but once TLS kicks in, figuring out exactly what data is being sent, identifying PII exposure, or debugging integration issues becomes incredibly difficult without resorting to complex and often brittle solutions.<p>Traditional approaches like forward proxies require terminating TLS (MITM), managing certificates, and often introduce performance bottlenecks or single points of failure. Network firewalls usually operate at L3/L4 and lack payload visibility. We felt there had to be a better way.<p>That's why we built qtap. It's a lightweight agent that uses eBPF to tap into network traffic at the kernel level. The key idea is to hook into common TLS libraries (like OpenSSL) before encryption and after decryption. This gives us deep visibility into the actual request/response payloads of HTTPS/TLS traffic without needing to terminate the connection or manage certs. Because it leverages eBPF, the performance impact is minimal compared to traditional methods.<p>With qtap, we can now see exactly which external services our apps are talking to, inspect the payloads for debugging or security auditing (e.g., spotting accidental PII leaks), monitor API performance/errors for third-party dependencies, and get a much clearer picture of our egress traffic patterns.<p>We've found this approach really powerful for improving reliability and security posture. We've packaged qtap as a Linux Binary, Docker container, and Helm chart for deployment.<p>This is still evolving, but we're excited about the potential of using eBPF for this kind of deep, yet non-intrusive, visibility.<p>We'd love to get the HN community's feedback:<p><pre><code>    Do you face similar challenges monitoring encrypted egress traffic?
    What are your thoughts on using eBPF for this compared to other methods?
    Any suggestions or potential use cases we haven't considered?
</code></pre>
Happy to answer any questions!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43928118">https://news.ycombinator.com/item?id=43928118</a></p>
<p>Points: 259</p>
<p># Comments: 78</p>
]]></description><pubDate>Thu, 08 May 2025 16:49:11 +0000</pubDate><link>https://github.com/qpoint-io/qtap</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=43928118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43928118</guid></item><item><title><![CDATA[New comment by tylerflint in "Nanobox is now free for developers"]]></title><description><![CDATA[
<p><a href="https://content.nanobox.io/nanobox-vs-docker-swarm-kubernetes/" rel="nofollow">https://content.nanobox.io/nanobox-vs-docker-swarm-kubernete...</a></p>
]]></description><pubDate>Thu, 30 Nov 2017 21:10:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=15819561</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=15819561</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15819561</guid></item><item><title><![CDATA[New comment by tylerflint in "Nanobox is now free for developers"]]></title><description><![CDATA[
<p>That's the highest requested feature! Should be available in Q1 of 2018.</p>
]]></description><pubDate>Thu, 30 Nov 2017 19:40:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=15818825</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=15818825</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15818825</guid></item><item><title><![CDATA[New comment by tylerflint in "Nanobox is now free for developers"]]></title><description><![CDATA[
<p>fixing now. Thanks for the heads up</p>
]]></description><pubDate>Thu, 30 Nov 2017 19:35:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=15818792</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=15818792</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=15818792</guid></item><item><title><![CDATA[New comment by tylerflint in "A Docker Abstraction That Handles Container Security"]]></title><description><![CDATA[
<p><a href="https://nanobox.io/why-nanobox/nanobox-vs-heroku/" rel="nofollow">https://nanobox.io/why-nanobox/nanobox-vs-heroku/</a></p>
]]></description><pubDate>Wed, 26 Jul 2017 02:50:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=14853383</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=14853383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14853383</guid></item><item><title><![CDATA[New comment by tylerflint in "PAAS Comparison – Dokku vs. Flynn vs. Deis vs. Kubernetes vs. Docker Swarm"]]></title><description><![CDATA[
<p>Some of those aren't PaaS, but container orchestration frameworks.<p>If you're reading this list of comparisons out of genuine interest, I would suggest also looking into Nanobox: <a href="https://nanobox.io" rel="nofollow">https://nanobox.io</a></p>
]]></description><pubDate>Sun, 11 Jun 2017 18:25:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=14533067</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=14533067</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14533067</guid></item><item><title><![CDATA[Getting Social with Mastodon and Nanobox]]></title><description><![CDATA[
<p>Article URL: <a href="https://content.nanobox.io/getting-social-with-mastodon-and-nanobox/">https://content.nanobox.io/getting-social-with-mastodon-and-nanobox/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=14419622">https://news.ycombinator.com/item?id=14419622</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 25 May 2017 19:45:44 +0000</pubDate><link>https://content.nanobox.io/getting-social-with-mastodon-and-nanobox/</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=14419622</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14419622</guid></item><item><title><![CDATA[New comment by tylerflint in "Is Magento Worth Revisiting?"]]></title><description><![CDATA[
<p>I don't mean to be controversial here, but I really don't think so. If you're a quality engineer, you should stay away from Magento at all cost. I recently tried to download M2 and take it for a spin. It's very apparent they haven't learned. As an example, Magento still requires flock as a form of application-level locking (ie: the locking semantics of the application depend on a file-system behavior that is often unavailable on network filesystems). The filesystem must be writable for Magento to work at all. The engineering team completely ignores the realities of running Magento on a multi-node setup, or in a cloud environment. Not that a 12-factor app is the end-all specification, but it seems like the engineering team doesn't even understand the challenges of running in a cloud environment at all. This is very discouraging to me. In the beginning, I had very high hopes for Magento and I devoted thousands of hours and dozens of modules back to the community. Sad.</p>
]]></description><pubDate>Thu, 27 Apr 2017 16:49:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=14212937</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=14212937</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14212937</guid></item><item><title><![CDATA[New comment by tylerflint in "Effectively Deploy Elixir Apps with Nanobox"]]></title><description><![CDATA[
<p>Nanobox supports many languages. We are particularly excited about elixir though!</p>
]]></description><pubDate>Wed, 08 Mar 2017 19:06:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=13822687</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=13822687</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13822687</guid></item><item><title><![CDATA[New comment by tylerflint in "Elixir deployments on AWS"]]></title><description><![CDATA[
<p>Nanobox is free for developers to use for personal and open source projects.</p>
]]></description><pubDate>Thu, 09 Feb 2017 17:39:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=13608929</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=13608929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=13608929</guid></item><item><title><![CDATA[New comment by tylerflint in "Nanobox: Local development done right"]]></title><description><![CDATA[
<p>I think you're right. Thanks for the advice!</p>
]]></description><pubDate>Wed, 18 Nov 2015 18:52:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=10589865</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=10589865</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=10589865</guid></item><item><title><![CDATA[New comment by tylerflint in "Nanobox: Local development done right"]]></title><description><![CDATA[
<p>NFS will be the default adapter for nanobox, but can be disabled.</p>
]]></description><pubDate>Wed, 18 Nov 2015 16:48:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=10588876</link><dc:creator>tylerflint</dc:creator><comments>https://news.ycombinator.com/item?id=10588876</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=10588876</guid></item></channel></rss>