<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Rebel Scrolls</title>
        <link>https://rebelscrolls.com/blog/</link>
        <description>Security research, software development, and ideas.</description>
        <lastBuildDate>Sat, 08 Aug 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright (c) 2026 Rebel Scrolls</copyright>
        <item>
            <title><![CDATA[theHarvester 5.0: A New Era]]></title>
            <link>https://rebelscrolls.com/blog/theharvester-new-era/</link>
            <guid>https://rebelscrolls.com/blog/theharvester-new-era/</guid>
            <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A development preview of theHarvester 5.0's new evidence model, discovery capabilities, and HarvestView web app.]]></description>
            <content:encoded><![CDATA[<div class="theme-admonition theme-admonition-caution admonition_Rmk0 alert alert--warning"><div class="admonitionHeading_kTUZ"><span class="admonitionIcon_M0R0"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Development preview</div><div class="admonitionContent_bXnT"><p>This post covers work in progress toward theHarvester 5.0. Features and interfaces may change before release, and the public v5.0.0 release is not available yet.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_q9xe" id="why-this-release-matters">Why this release matters<a href="https://rebelscrolls.com/blog/theharvester-new-era/#why-this-release-matters" class="hash-link" aria-label="Direct link to Why this release matters" title="Direct link to Why this release matters" translate="no">​</a></h2>
<p>It has been a few years since I worked seriously on theHarvester. After graduating college and coding professionally, I found it much harder to want to code when I was not working. The rise of increasingly capable AI tools has reignited my passion for development. It makes me wonder what the tool would look like now if those tools had been available when I was porting it to Python 3 or making it fully asynchronous with Stack Overflow as my copilot.</p>
<!-- -->
<p>I can now apply the skills I have learned over the past few months to a tool many people use and take it to the next level. This is the biggest release since the tool's inception, so this post focuses on four changes:</p>
<ul>
<li class="">richer, source-attributed JSONL and SQLite evidence;</li>
<li class="">more precise source selection and discovery controls;</li>
<li class="">new discovery capabilities, including vhost, PTR, and bounded recursive DNS discovery; and</li>
<li class="">HarvestView, a web app for running searches and examining saved results.</li>
</ul>
<p>There is much more than I can cover here. The full list is in the <a href="https://github.com/laramies/theHarvester/blob/master/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="">changelog</a>. I preserved legacy behavior where it still made sense, and the documented migration path should make the necessary convention changes straightforward. If anything is unclear, feedback is only a <a href="https://github.com/laramies/theHarvester/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">GitHub issue</a> away. With that, let's dive in.</p>
<h2 class="anchor anchorTargetStickyNavbar_q9xe" id="enhanced-output-and-db-storage">Enhanced Output and DB Storage<a href="https://rebelscrolls.com/blog/theharvester-new-era/#enhanced-output-and-db-storage" class="hash-link" aria-label="Direct link to Enhanced Output and DB Storage" title="Direct link to Enhanced Output and DB Storage" translate="no">​</a></h2>
<p>One of the main goals of this release was to enrich the results theHarvester obtains and preserve them more effectively. Previously, there were three storage options: a SQLite database, a JSON output file, and an XML output file. An older HTML output option had already been removed; HarvestView now provides a much more capable way to inspect results in a browser.</p>
<p>Each option had its own flaws. The biggest were missing source attribution, incomplete storage for some sources and modes, and formats that were difficult to parse or understand at a glance.</p>
<p>That has changed. The database has been rebuilt with <a href="https://www.sqlalchemy.org/" target="_blank" rel="noopener noreferrer" class="">SQLAlchemy</a>, and every run now receives a UUID before being stored in one unified database.</p>
<p>The <code>-f</code> flag now produces a third output format: JSONL. It carries richer data while remaining straightforward to stream and parse. The legacy JSON and XML files are still generated for compatibility, but they do not contain the same level of detail. The following figures compare the legacy JSON and SQLite formats with the new evidence-oriented models.</p>
<figure class="rs-technical-figure"><div class="rs-technical-figure__viewport" role="region" tabindex="0" aria-label="Scrollable JSON and JSONL comparison"><p><img decoding="async" loading="lazy" alt="Comparison of the legacy grouped JSON report and the new source-attributed JSONL records" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzIwIiBoZWlnaHQ9IjYwMCIgdmlld0JveD0iMCAwIDcyMCA2MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsbGVkYnk9Impzb24tdnMtanNvbmwtdGl0bGUganNvbi12cy1qc29ubC1kZXNjIj4KICA8dGl0bGUgaWQ9Impzb24tdnMtanNvbmwtdGl0bGUiPkpTT04gYW5kIEpTT05MIG91dHB1dCBjb21wYXJpc29uPC90aXRsZT4KICA8ZGVzYyBpZD0ianNvbi12cy1qc29ubC1kZXNjIj5KU09OIHN0b3JlcyBvbmUgZ3JvdXBlZCBjb21wYXRpYmlsaXR5IHJlcG9ydCwgd2hpbGUgSlNPTkwgc3RvcmVzIGEgcnVuIHJlY29yZCBmb2xsb3dlZCBieSBpbmRlcGVuZGVudGx5IHByb2Nlc3NhYmxlIGZpbmRpbmdzIHdpdGggc291cmNlIGF0dHJpYnV0aW9uLjwvZGVzYz4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgOnJvb3R7LS1wYXBlcjojMDQwYTEwOy0tc3VyZmFjZTojMGExMjFjOy0taW5rOiNkZGVhZjI7LS1tdXRlZDojOThhZWJmOy0tcnVsZTojMjY0MDU2Oy0tYWNjZW50OiMwMGRkZWY7LS1hY2NlbnQtdGludDpyZ2JhKDAsMjIxLDIzOSwuMTApOy0tbGluazojYTA5Y2YwOy0tbGluay10aW50OnJnYmEoMTYwLDE1NiwyNDAsLjEwKX0KICAgICAgLmJne2ZpbGw6dmFyKC0tcGFwZXIpfS5wYW5lbHtmaWxsOnZhcigtLXN1cmZhY2UpO3N0cm9rZTp2YXIoLS1ydWxlKTtzdHJva2Utd2lkdGg6MX0ucGFuZWwtZm9jYWx7ZmlsbDp2YXIoLS1hY2NlbnQtdGludCk7c3Ryb2tlOnZhcigtLWFjY2VudCk7c3Ryb2tlLXdpZHRoOjEuMn0ucm93e2ZpbGw6cmdiYSgyMjEsMjM0LDI0MiwuMDQpO3N0cm9rZTp2YXIoLS1ydWxlKTtzdHJva2Utd2lkdGg6MX0ucm93LWZvY2Fse2ZpbGw6cmdiYSgwLDIyMSwyMzksLjA4KTtzdHJva2U6dmFyKC0tYWNjZW50KTtzdHJva2Utd2lkdGg6MX0udGFne2ZpbGw6dmFyKC0tcGFwZXIpO3N0cm9rZTp2YXIoLS1ydWxlKTtzdHJva2Utd2lkdGg6MX0udGFnLWZvY2Fse2ZpbGw6dmFyKC0tcGFwZXIpO3N0cm9rZTp2YXIoLS1hY2NlbnQpO3N0cm9rZS13aWR0aDoxfQogICAgICAudGl0bGV7Zm9udDo3MDAgMzJweCAnSUJNIFBsZXggU2FucyBDb25kZW5zZWQnLCdBcmlhbCBOYXJyb3cnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDp2YXIoLS1pbmspfS5zdWJ0aXRsZXtmb250OjQwMCAxNnB4IHN5c3RlbS11aSxzYW5zLXNlcmlmO2ZpbGw6dmFyKC0tbXV0ZWQpfS5sYWJlbHtmb250OjYwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7bGV0dGVyLXNwYWNpbmc6LjEyZW07ZmlsbDp2YXIoLS1tdXRlZCl9LmxhYmVsLWZvY2Fse2ZpbGw6dmFyKC0tYWNjZW50KX0uaGVhZGluZ3tmb250OjcwMCAyNHB4ICdJQk0gUGxleCBTYW5zIENvbmRlbnNlZCcsJ0FyaWFsIE5hcnJvdycsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOnZhcigtLWluayl9LmNvcHl7Zm9udDo0MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLW11dGVkKX0uY29weS1zdHJvbmd7Zm9udDo2MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLWluayl9Lm1vbm97Zm9udDo1MDAgMTJweCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO2ZpbGw6dmFyKC0tbXV0ZWQpfS5tb25vLXN0cm9uZ3tmb250OjYwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7ZmlsbDp2YXIoLS1pbmspfS5zb3VyY2V7Zm9udDo2MDAgMTJweCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO2ZpbGw6dmFyKC0tbGluayl9LmZvb3Rlcntmb250OjYwMCAxNnB4IHN5c3RlbS11aSxzYW5zLXNlcmlmO2ZpbGw6dmFyKC0taW5rKX0uZm9vdGVyLWFjY2VudHtmaWxsOnZhcigtLWFjY2VudCl9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KCiAgPHJlY3Qgd2lkdGg9IjcyMCIgaGVpZ2h0PSI2MDAiIGNsYXNzPSJiZyIvPgogIDx0ZXh0IHg9IjQwIiB5PSI1MiIgY2xhc3M9InRpdGxlIj5KU09OIGtlZXBzIGEgcmVwb3J0LiBKU09OTCBrZWVwcyBhIHRyYWlsLjwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iODAiIGNsYXNzPSJzdWJ0aXRsZSI+U2FtZSBjb21wbGV0ZWQgcnVuLCBvcHRpbWl6ZWQgZm9yIGRpZmZlcmVudCBqb2JzLjwvdGV4dD4KCiAgPHJlY3QgeD0iNDAiIHk9IjExMiIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzODAiIGNsYXNzPSJwYW5lbCIvPgogIDx0ZXh0IHg9IjY0IiB5PSIxNDQiIGNsYXNzPSJsYWJlbCI+SlNPTiDCtyBDT01QQVRJQklMSVRZPC90ZXh0PgogIDx0ZXh0IHg9IjY0IiB5PSIxODAiIGNsYXNzPSJoZWFkaW5nIj5PbmUgZ3JvdXBlZCBkb2N1bWVudDwvdGV4dD4KICA8dGV4dCB4PSI2NCIgeT0iMjA0IiBjbGFzcz0iY29weSI+QmVzdCBmb3IgZXhpc3RpbmcgaW50ZWdyYXRpb25zLjwvdGV4dD4KCiAgPHJlY3QgeD0iNjQiIHk9IjIyOCIgd2lkdGg9IjI1MiIgaGVpZ2h0PSIyMDgiIGNsYXNzPSJyb3ciLz4KICA8dGV4dCB4PSI4NCIgeT0iMjYwIiBjbGFzcz0iY29weS1zdHJvbmciPnJlcG9ydC5qc29uPC90ZXh0PgogIDxsaW5lIHgxPSI2NCIgeTE9IjI3NiIgeDI9IjMxNiIgeTI9IjI3NiIgc3Ryb2tlPSJ2YXIoLS1ydWxlKSIgc3Ryb2tlLXdpZHRoPSIxIi8+CiAgPHRleHQgeD0iODQiIHk9IjMwOCIgY2xhc3M9Im1vbm8tc3Ryb25nIj5ob3N0bmFtZXM8L3RleHQ+CiAgPHRleHQgeD0iMTk2IiB5PSIzMDgiIGNsYXNzPSJtb25vIj5bIGFwaS5leGFtcGxlLnRlc3QsIOKApiBdPC90ZXh0PgogIDx0ZXh0IHg9Ijg0IiB5PSIzNDAiIGNsYXNzPSJtb25vLXN0cm9uZyI+aXBzPC90ZXh0PgogIDx0ZXh0IHg9IjE5NiIgeT0iMzQwIiBjbGFzcz0ibW9ubyI+WyAxOTIuMC4yLjEwLCDigKYgXTwvdGV4dD4KICA8dGV4dCB4PSI4NCIgeT0iMzcyIiBjbGFzcz0ibW9uby1zdHJvbmciPmFzbnM8L3RleHQ+CiAgPHRleHQgeD0iMTk2IiB5PSIzNzIiIGNsYXNzPSJtb25vIj5bIEFTNjQ1MDAsIOKApiBdPC90ZXh0PgogIDx0ZXh0IHg9Ijg0IiB5PSI0MDQiIGNsYXNzPSJtb25vLXN0cm9uZyI+b3RoZXI8L3RleHQ+CiAgPHRleHQgeD0iMTk2IiB5PSI0MDQiIGNsYXNzPSJtb25vIj5lbWFpbHMgwrcgVVJMcyDCtyDigKY8L3RleHQ+CiAgPHRleHQgeD0iNjQiIHk9IjQ2OCIgY2xhc3M9ImNvcHkiPlJlYWQgYW5kIHByb2Nlc3NlZCBhcyBvbmUgZmlsZS48L3RleHQ+CgogIDxyZWN0IHg9IjM4MCIgeT0iMTEyIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjM4MCIgY2xhc3M9InBhbmVsLWZvY2FsIi8+CiAgPHRleHQgeD0iNDA0IiB5PSIxNDQiIGNsYXNzPSJsYWJlbCBsYWJlbC1mb2NhbCI+SlNPTkwgwrcgUkVDT01NRU5ERUQ8L3RleHQ+CiAgPHRleHQgeD0iNDA0IiB5PSIxODAiIGNsYXNzPSJoZWFkaW5nIj5PbmUgdXNlZnVsIHJlY29yZCBwZXIgbGluZTwvdGV4dD4KICA8dGV4dCB4PSI0MDQiIHk9IjIwNCIgY2xhc3M9ImNvcHkiPlN0cmVhbWFibGUsIGF0dHJpYnV0YWJsZSBldmlkZW5jZS48L3RleHQ+CgogIDxyZWN0IHg9IjQwNCIgeT0iMjI4IiB3aWR0aD0iMjUyIiBoZWlnaHQ9IjQ0IiBjbGFzcz0icm93LWZvY2FsIi8+CiAgPHJlY3QgeD0iNDE2IiB5PSIyNDAiIHdpZHRoPSI0OCIgaGVpZ2h0PSIyMCIgY2xhc3M9InRhZy1mb2NhbCIvPgogIDx0ZXh0IHg9IjQ0MCIgeT0iMjU2IiBjbGFzcz0ibW9ubyBsYWJlbC1mb2NhbCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+UlVOPC90ZXh0PgogIDx0ZXh0IHg9IjQ4MCIgeT0iMjU2IiBjbGFzcz0ibW9uby1zdHJvbmciPmV4YW1wbGUudGVzdCDCtyBjb21wbGV0ZTwvdGV4dD4KCiAgPHJlY3QgeD0iNDA0IiB5PSIyODQiIHdpZHRoPSIyNTIiIGhlaWdodD0iNDQiIGNsYXNzPSJyb3ciLz4KICA8cmVjdCB4PSI0MTYiIHk9IjI5NiIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjIwIiBjbGFzcz0idGFnIi8+CiAgPHRleHQgeD0iNDQwIiB5PSIzMTIiIGNsYXNzPSJtb25vIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5IT1NUPC90ZXh0PgogIDx0ZXh0IHg9IjQ4MCIgeT0iMzA0IiBjbGFzcz0ibW9uby1zdHJvbmciPmFwaS5leGFtcGxlLnRlc3Q8L3RleHQ+CiAgPHRleHQgeD0iNjQ0IiB5PSIzMjAiIGNsYXNzPSJzb3VyY2UiIHRleHQtYW5jaG9yPSJlbmQiPmNydHNoIMK3IHVybHNjYW48L3RleHQ+CgogIDxyZWN0IHg9IjQwNCIgeT0iMzQwIiB3aWR0aD0iMjUyIiBoZWlnaHQ9IjQ0IiBjbGFzcz0icm93Ii8+CiAgPHJlY3QgeD0iNDE2IiB5PSIzNTIiIHdpZHRoPSI0OCIgaGVpZ2h0PSIyMCIgY2xhc3M9InRhZyIvPgogIDx0ZXh0IHg9IjQ0MCIgeT0iMzY4IiBjbGFzcz0ibW9ubyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+SVA8L3RleHQ+CiAgPHRleHQgeD0iNDgwIiB5PSIzNjAiIGNsYXNzPSJtb25vLXN0cm9uZyI+MTkyLjAuMi4xMDwvdGV4dD4KICA8dGV4dCB4PSI2NDQiIHk9IjM3NiIgY2xhc3M9InNvdXJjZSIgdGV4dC1hbmNob3I9ImVuZCI+RE5TIMK3IFNob2RhbjwvdGV4dD4KCiAgPHJlY3QgeD0iNDA0IiB5PSIzOTYiIHdpZHRoPSIyNTIiIGhlaWdodD0iNDQiIGNsYXNzPSJyb3ciLz4KICA8cmVjdCB4PSI0MTYiIHk9IjQwOCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjIwIiBjbGFzcz0idGFnIi8+CiAgPHRleHQgeD0iNDQwIiB5PSI0MjQiIGNsYXNzPSJtb25vIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5BU048L3RleHQ+CiAgPHRleHQgeD0iNDgwIiB5PSI0MTYiIGNsYXNzPSJtb25vLXN0cm9uZyI+QVM2NDUwMDwvdGV4dD4KICA8dGV4dCB4PSI2NDQiIHk9IjQzMiIgY2xhc3M9InNvdXJjZSIgdGV4dC1hbmNob3I9ImVuZCI+Um91dGVWaWV3czwvdGV4dD4KICA8dGV4dCB4PSI0MDQiIHk9IjQ2OCIgY2xhc3M9ImNvcHkiPlByb2Nlc3MgcmVjb3JkcyB3aXRob3V0IGxvYWRpbmcgaXQgYWxsLjwvdGV4dD4KCiAgPGxpbmUgeDE9IjQwIiB5MT0iNTI4IiB4Mj0iNjgwIiB5Mj0iNTI4IiBzdHJva2U9InZhcigtLXJ1bGUpIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8dGV4dCB4PSI0MCIgeT0iNTYwIiBjbGFzcz0ibGFiZWwiPlRIRSBTSE9SVCBWRVJTSU9OPC90ZXh0PgogIDx0ZXh0IHg9IjQwIiB5PSI1ODQiIGNsYXNzPSJmb290ZXIiPkpTT04gZm9yIGNvbXBhdGliaWxpdHkuIDx0c3BhbiBjbGFzcz0iZm9vdGVyLWFjY2VudCI+SlNPTkwgZm9yIGF1dG9tYXRpb24gYW5kIGEgc291cmNlIHRyYWlsLjwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K" width="720" height="600" class="img_TYmd"></p></div><figcaption><span>JSON preserves compatibility; JSONL provides independently processable, source-attributed evidence.</span><span class="rs-technical-figure__mobile-hint">Scroll to inspect</span></figcaption></figure>
<figure class="rs-technical-figure"><div class="rs-technical-figure__viewport" role="region" tabindex="0" aria-label="Scrollable SQLite model comparison"><p><img decoding="async" loading="lazy" alt="Comparison of the legacy SQLite findings table and the new run-centered SQLite evidence model" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzIwIiBoZWlnaHQ9IjYwMCIgdmlld0JveD0iMCAwIDcyMCA2MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsbGVkYnk9InNxbGl0ZS1iZWZvcmUtYWZ0ZXItdGl0bGUgc3FsaXRlLWJlZm9yZS1hZnRlci1kZXNjIj4KICA8dGl0bGUgaWQ9InNxbGl0ZS1iZWZvcmUtYWZ0ZXItdGl0bGUiPlNRTGl0ZSBzdG9yYWdlIGJlZm9yZSBhbmQgYWZ0ZXIgdmVyc2lvbiA1LjAuMDwvdGl0bGU+CiAgPGRlc2MgaWQ9InNxbGl0ZS1iZWZvcmUtYWZ0ZXItZGVzYyI+VmVyc2lvbiA0LjEuMSBzdG9yZWQgaW5kaXZpZHVhbCBmaW5kaW5ncywgd2hpbGUgdmVyc2lvbiA1LjAuMCBzdG9yZXMgYSByZXVzYWJsZSBydW4gd2l0aCBmaW5kaW5ncywgcHJvdmVuYW5jZSwgcHJvdmlkZXIgb3V0Y29tZXMsIGFuZCBleHBvcnRhYmxlIGV2aWRlbmNlLjwvZGVzYz4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgOnJvb3R7LS1wYXBlcjojMDQwYTEwOy0tc3VyZmFjZTojMGExMjFjOy0taW5rOiNkZGVhZjI7LS1tdXRlZDojOThhZWJmOy0tcnVsZTojMjY0MDU2Oy0tYWNjZW50OiMwMGRkZWY7LS1hY2NlbnQtdGludDpyZ2JhKDAsMjIxLDIzOSwuMTApOy0tbGluazojYTA5Y2YwOy0tbGluay10aW50OnJnYmEoMTYwLDE1NiwyNDAsLjEwKX0KICAgICAgLmJne2ZpbGw6dmFyKC0tcGFwZXIpfS5wYW5lbHtmaWxsOnZhcigtLXN1cmZhY2UpO3N0cm9rZTp2YXIoLS1ydWxlKTtzdHJva2Utd2lkdGg6MX0ucGFuZWwtZm9jYWx7ZmlsbDp2YXIoLS1hY2NlbnQtdGludCk7c3Ryb2tlOnZhcigtLWFjY2VudCk7c3Ryb2tlLXdpZHRoOjEuMn0uY2FyZHtmaWxsOnZhcigtLXBhcGVyKTtzdHJva2U6dmFyKC0tcnVsZSk7c3Ryb2tlLXdpZHRoOjF9LmNhcmQtbGlua3tmaWxsOnZhcigtLWxpbmstdGludCk7c3Ryb2tlOnZhcigtLWxpbmspO3N0cm9rZS13aWR0aDoxfS5ydW57ZmlsbDpyZ2JhKDAsMjIxLDIzOSwuMDgpO3N0cm9rZTp2YXIoLS1hY2NlbnQpO3N0cm9rZS13aWR0aDoxLjJ9LnRhZ3tmaWxsOnZhcigtLXN1cmZhY2UpO3N0cm9rZTp2YXIoLS1ydWxlKTtzdHJva2Utd2lkdGg6MX0udGFnLWZvY2Fse2ZpbGw6dmFyKC0tcGFwZXIpO3N0cm9rZTp2YXIoLS1hY2NlbnQpO3N0cm9rZS13aWR0aDoxfQogICAgICAudGl0bGV7Zm9udDo3MDAgMzJweCAnSUJNIFBsZXggU2FucyBDb25kZW5zZWQnLCdBcmlhbCBOYXJyb3cnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDp2YXIoLS1pbmspfS5zdWJ0aXRsZXtmb250OjQwMCAxNnB4IHN5c3RlbS11aSxzYW5zLXNlcmlmO2ZpbGw6dmFyKC0tbXV0ZWQpfS5sYWJlbHtmb250OjYwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7bGV0dGVyLXNwYWNpbmc6LjEyZW07ZmlsbDp2YXIoLS1tdXRlZCl9LmxhYmVsLWZvY2Fse2ZpbGw6dmFyKC0tYWNjZW50KX0uaGVhZGluZ3tmb250OjcwMCAyNHB4ICdJQk0gUGxleCBTYW5zIENvbmRlbnNlZCcsJ0FyaWFsIE5hcnJvdycsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOnZhcigtLWluayl9LmNvcHl7Zm9udDo0MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLW11dGVkKX0uY29weS1zdHJvbmd7Zm9udDo2MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLWluayl9Lm1vbm97Zm9udDo1MDAgMTJweCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO2ZpbGw6dmFyKC0tbXV0ZWQpfS5tb25vLXN0cm9uZ3tmb250OjYwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7ZmlsbDp2YXIoLS1pbmspfS5zb3VyY2V7Zm9udDo2MDAgMTJweCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO2ZpbGw6dmFyKC0tbGluayl9LmZvb3Rlcntmb250OjYwMCAxNnB4IHN5c3RlbS11aSxzYW5zLXNlcmlmO2ZpbGw6dmFyKC0tYWNjZW50KX0KICAgIDwvc3R5bGU+CiAgICA8bWFya2VyIGlkPSJzcWxpdGUtYXJyb3ciIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjYiIHJlZlg9IjciIHJlZlk9IjMiIG9yaWVudD0iYXV0byI+PHBvbHlnb24gcG9pbnRzPSIwIDAsOCAzLDAgNiIgZmlsbD0iIzAwZGRlZiIvPjwvbWFya2VyPgogIDwvZGVmcz4KCiAgPHJlY3Qgd2lkdGg9IjcyMCIgaGVpZ2h0PSI2MDAiIGNsYXNzPSJiZyIvPgogIDx0ZXh0IHg9IjQwIiB5PSI1MiIgY2xhc3M9InRpdGxlIj5TUUxpdGUgbm93IHNhdmVzIHRoZSB3aG9sZSBydW4uPC90ZXh0PgogIDx0ZXh0IHg9IjQwIiB5PSI4MCIgY2xhc3M9InN1YnRpdGxlIj5WZXJzaW9uIDUuMC4wIHByZXNlcnZlcyBlbm91Z2ggY29udGV4dCB0byB0cnVzdCBhbmQgcmV1c2UgdGhlIGV2aWRlbmNlLjwvdGV4dD4KCiAgPGxpbmUgeDE9IjM0MCIgeTE9IjMwNCIgeDI9IjM4MCIgeTI9IjMwNCIgc3Ryb2tlPSJ2YXIoLS1hY2NlbnQpIiBzdHJva2Utd2lkdGg9IjEuMiIgbWFya2VyLWVuZD0idXJsKCNzcWxpdGUtYXJyb3cpIi8+CgogIDxyZWN0IHg9IjQwIiB5PSIxMTIiIHdpZHRoPSIzMDAiIGhlaWdodD0iMzgwIiBjbGFzcz0icGFuZWwiLz4KICA8dGV4dCB4PSI2NCIgeT0iMTQ0IiBjbGFzcz0ibGFiZWwiPkJFRk9SRSDCtyA0LjEuMTwvdGV4dD4KICA8dGV4dCB4PSI2NCIgeT0iMTgwIiBjbGFzcz0iaGVhZGluZyI+QSBsaXN0IG9mIGZpbmRpbmdzPC90ZXh0PgogIDx0ZXh0IHg9IjY0IiB5PSIyMDQiIGNsYXNzPSJjb3B5Ij5PbmUgcmVzdWx0IHJvdyBhdCBhIHRpbWUuPC90ZXh0PgoKICA8cmVjdCB4PSI2NCIgeT0iMjI4IiB3aWR0aD0iMjUyIiBoZWlnaHQ9IjE4MCIgY2xhc3M9ImNhcmQiLz4KICA8dGV4dCB4PSI4NCIgeT0iMjYwIiBjbGFzcz0iY29weS1zdHJvbmciPnJlc3VsdHM8L3RleHQ+CiAgPGxpbmUgeDE9IjY0IiB5MT0iMjc2IiB4Mj0iMzE2IiB5Mj0iMjc2IiBzdHJva2U9InZhcigtLXJ1bGUpIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8cmVjdCB4PSI4NCIgeT0iMjkyIiB3aWR0aD0iNDgiIGhlaWdodD0iMjAiIGNsYXNzPSJ0YWciLz4KICA8dGV4dCB4PSIxMDgiIHk9IjMwOCIgY2xhc3M9Im1vbm8iIHRleHQtYW5jaG9yPSJtaWRkbGUiPkhPU1Q8L3RleHQ+CiAgPHRleHQgeD0iMTQ4IiB5PSIzMDgiIGNsYXNzPSJtb25vLXN0cm9uZyI+YXBpLmV4YW1wbGUudGVzdDwvdGV4dD4KICA8cmVjdCB4PSI4NCIgeT0iMzI0IiB3aWR0aD0iNDgiIGhlaWdodD0iMjAiIGNsYXNzPSJ0YWciLz4KICA8dGV4dCB4PSIxMDgiIHk9IjM0MCIgY2xhc3M9Im1vbm8iIHRleHQtYW5jaG9yPSJtaWRkbGUiPklQPC90ZXh0PgogIDx0ZXh0IHg9IjE0OCIgeT0iMzQwIiBjbGFzcz0ibW9uby1zdHJvbmciPjE5Mi4wLjIuMTA8L3RleHQ+CiAgPHJlY3QgeD0iODQiIHk9IjM1NiIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjIwIiBjbGFzcz0idGFnIi8+CiAgPHRleHQgeD0iMTA4IiB5PSIzNzIiIGNsYXNzPSJtb25vIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5BU048L3RleHQ+CiAgPHRleHQgeD0iMTQ4IiB5PSIzNzIiIGNsYXNzPSJtb25vLXN0cm9uZyI+QVM2NDUwMDwvdGV4dD4KCiAgPHRleHQgeD0iNjQiIHk9IjQ0NCIgY2xhc3M9ImNvcHktc3Ryb25nIj5JdCBhbnN3ZXJlZDog4oCcV2hhdCBkaWQgd2UgZmluZD/igJ08L3RleHQ+CiAgPHRleHQgeD0iNjQiIHk9IjQ3MiIgY2xhc3M9ImNvcHkiPlJ1biBzdGF0dXMgYW5kIGZhaWx1cmVzIHdlcmUgbG9zdC48L3RleHQ+CgogIDxyZWN0IHg9IjM4MCIgeT0iMTEyIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjM4MCIgY2xhc3M9InBhbmVsLWZvY2FsIi8+CiAgPHRleHQgeD0iNDA0IiB5PSIxNDQiIGNsYXNzPSJsYWJlbCBsYWJlbC1mb2NhbCI+Tk9XIMK3IDUuMC4wPC90ZXh0PgogIDx0ZXh0IHg9IjQwNCIgeT0iMTgwIiBjbGFzcz0iaGVhZGluZyI+QSByZXVzYWJsZSBydW4gcmVjb3JkPC90ZXh0PgogIDx0ZXh0IHg9IjQwNCIgeT0iMjA0IiBjbGFzcz0iY29weSI+RmluZGluZ3Mga2VlcCB0aGVpciBjb250ZXh0LjwvdGV4dD4KCiAgPHJlY3QgeD0iNDA0IiB5PSIyMjgiIHdpZHRoPSIyNTIiIGhlaWdodD0iNDgiIGNsYXNzPSJydW4iLz4KICA8dGV4dCB4PSI0MjQiIHk9IjI2MCIgY2xhc3M9ImNvcHktc3Ryb25nIj5SdW46IGV4YW1wbGUudGVzdDwvdGV4dD4KCiAgPHJlY3QgeD0iNDA0IiB5PSIyODgiIHdpZHRoPSIyNTIiIGhlaWdodD0iOTIiIGNsYXNzPSJjYXJkIi8+CiAgPHRleHQgeD0iNDI0IiB5PSIzMTYiIGNsYXNzPSJjb3B5LXN0cm9uZyI+RmluZGluZ3MgKyBwcm92ZW5hbmNlPC90ZXh0PgogIDx0ZXh0IHg9IjQyNCIgeT0iMzQ0IiBjbGFzcz0ibW9uby1zdHJvbmciPkhPU1QgwrcgYXBpLmV4YW1wbGUudGVzdDwvdGV4dD4KICA8dGV4dCB4PSI2MzYiIHk9IjM2NCIgY2xhc3M9InNvdXJjZSIgdGV4dC1hbmNob3I9ImVuZCI+Y3J0c2ggwrcgdXJsc2NhbjwvdGV4dD4KCiAgPHJlY3QgeD0iNDA0IiB5PSIzOTIiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGNsYXNzPSJjYXJkIi8+CiAgPHRleHQgeD0iNDIwIiB5PSI0MjAiIGNsYXNzPSJjb3B5LXN0cm9uZyI+T3V0Y29tZXM8L3RleHQ+CiAgPHRleHQgeD0iNDIwIiB5PSI0NDQiIGNsYXNzPSJtb25vIj5wYXJ0aWFsIMK3IGZhaWw8L3RleHQ+CgogIDxyZWN0IHg9IjUzNiIgeT0iMzkyIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBjbGFzcz0iY2FyZC1saW5rIi8+CiAgPHRleHQgeD0iNTUyIiB5PSI0MjAiIGNsYXNzPSJjb3B5LXN0cm9uZyI+UG9ydGFibGU8L3RleHQ+CiAgPHRleHQgeD0iNTUyIiB5PSI0NDQiIGNsYXNzPSJtb25vIj5KU09OTCDCtyBTUUxpdGU8L3RleHQ+CgogIDxsaW5lIHgxPSI0MCIgeTE9IjUyOCIgeDI9IjY4MCIgeTI9IjUyOCIgc3Ryb2tlPSJ2YXIoLS1ydWxlKSIgc3Ryb2tlLXdpZHRoPSIxIi8+CiAgPHRleHQgeD0iNDAiIHk9IjU2MCIgY2xhc3M9ImxhYmVsIj5XSFkgSVQgTUFUVEVSUzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNTg0IiBjbGFzcz0iZm9vdGVyIj5XaGF0IHJhbiDCtyB3aGF0IHdhcyBmb3VuZCDCtyB3aGVyZSBpdCBjYW1lIGZyb20gwrcgd2hhdCBmYWlsZWQ8L3RleHQ+Cjwvc3ZnPgo=" width="720" height="600" class="img_TYmd"></p></div><figcaption><span>SQLite 5.0 stores a reusable run record instead of an isolated list of findings.</span><span class="rs-technical-figure__mobile-hint">Scroll to inspect</span></figcaption></figure>
<p class="rs-figure-note">These diagrams were created with GPT-5.6 Sol and the <a href="https://github.com/cathrynlavery/diagram-design">Diagram Design skill</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_q9xe" id="source-capability-mapping-and-easier-source-selection">Source Capability Mapping and Easier Source Selection<a href="https://rebelscrolls.com/blog/theharvester-new-era/#source-capability-mapping-and-easier-source-selection" class="hash-link" aria-label="Direct link to Source Capability Mapping and Easier Source Selection" title="Direct link to Source Capability Mapping and Easier Source Selection" translate="no">​</a></h2>
<p>Speaking of data storage, it is important to talk about the sources themselves. Each source is now categorized by a <code>ResultRoute</code> that describes the type of data it can return.</p>
<div class="language-py codeBlockContainer_hJj0 theme-code-block" style="--prism-background-color:#0a121c;--prism-color:#ddeaf2"><div class="codeBlockTitle_Gu_1">theHarvester/result_routes.py</div><div class="codeBlockContent_WJIg"><pre tabindex="0" class="prism-code language-py codeBlock_zNss thin-scrollbar" style="background-color:#0a121c;color:#ddeaf2"><code class="codeBlockLines_JO4j"><div class="token-line" style="color:#ddeaf2"><span class="token keyword" style="color:#a09cf0;font-weight:700">class</span><span class="token plain"> </span><span class="token class-name" style="color:#ddeaf2;font-weight:700">ResultRoute</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token plain">Enum</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    </span><span class="token triple-quoted-string string" style="color:#00ddef">"""Normalized result collections a source can contribute.</span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token triple-quoted-string string" style="display:inline-block;color:#00ddef"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token triple-quoted-string string" style="color:#00ddef">    ``SUBDOMAINS`` contains in-scope descendant names reported by a source. It</span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token triple-quoted-string string" style="color:#00ddef">    does not imply DNS resolution or current addressability. Legacy adapters</span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token triple-quoted-string string" style="color:#00ddef">    and output formats may still call these values hosts for compatibility.</span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token triple-quoted-string string" style="color:#00ddef">    """</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    SUBDOMAINS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    EMAILS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    IPS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ASNS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    PEOPLE </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    LINKS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    URLS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    INTERESTING_URLS </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    BREACHES </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> auto</span><span class="token punctuation" style="color:#98aebf">(</span><span class="token punctuation" style="color:#98aebf">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">_ROUTE_CAPABILITIES </span><span class="token operator" style="color:#98aebf">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#98aebf">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">SUBDOMAINS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'subdomains'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">EMAILS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'emails'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">IPS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'ips'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">ASNS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'asns'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">PEOPLE</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'people'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">LINKS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'urls'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">URLS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'urls'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">INTERESTING_URLS</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'urls'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain">    ResultRoute</span><span class="token punctuation" style="color:#98aebf">.</span><span class="token plain">BREACHES</span><span class="token punctuation" style="color:#98aebf">:</span><span class="token plain"> </span><span class="token string" style="color:#00ddef">'breaches'</span><span class="token punctuation" style="color:#98aebf">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#ddeaf2"><span class="token plain"></span><span class="token punctuation" style="color:#98aebf">}</span><br></div></code></pre></div></div>
<p>This enables more precise source selection than <code>-b all</code> or <code>-b source1,source2,source3</code>. For example, <code>-b subdomains</code> or <code>-b asns</code> runs only sources with those route capabilities. Routes and sources can also be combined, as in <code>-b subdomains,asns</code> or <code>-b subdomains,asns,hunter,ips</code>. <code>-b all</code> remains available, but selecting the information you actually need can save time and resources. The <a href="https://github.com/laramies/theHarvester#discovery-sources" target="_blank" rel="noopener noreferrer" class="">README</a> contains a complete source-capability table.</p>
<h2 class="anchor anchorTargetStickyNavbar_q9xe" id="additional-discovery-capabilities">Additional Discovery Capabilities<a href="https://rebelscrolls.com/blog/theharvester-new-era/#additional-discovery-capabilities" class="hash-link" aria-label="Direct link to Additional Discovery Capabilities" title="Direct link to Additional Discovery Capabilities" translate="no">​</a></h2>
<p>I suspect most people ran <code>uv run theHarvester -d example.com -f results -b all</code> and called it a day. However, theHarvester has many additional features. Screenshot capture, DNS brute forcing, API route discovery, DNS resolution, and subdomain takeover checks have all been refactored and upgraded.</p>
<p>This release also introduces vhost discovery, PTR record discovery, neighboring IP CIDR analysis, RouteViews enrichment, and bounded recursive DNS discovery. New capabilities were not the release's only focus, but they extend the kinds of investigations theHarvester can support. Every source has also been reviewed: new sources were added, API routes were upgraded, and existing integrations were reworked where they could return better results. The <a href="https://github.com/laramies/theHarvester/wiki" target="_blank" rel="noopener noreferrer" class="">wiki</a> has been rebuilt with more detail about each capability.</p>
<p>Results from these features flow into the SQLite database and JSONL output alongside the rest of the run evidence.</p>
<p>The following diagram shows how discovery and enrichment now converge on a normalized evidence contract.</p>
<figure class="rs-technical-figure"><div class="rs-technical-figure__viewport" role="region" tabindex="0" aria-label="Scrollable discovery and evidence architecture"><p><img decoding="async" loading="lazy" alt="theHarvester discovery, enrichment, evidence, and output architecture" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzIwIiBoZWlnaHQ9IjY4MCIgdmlld0JveD0iMCAwIDcyMCA2ODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsbGVkYnk9InJ1bi1ldmlkZW5jZS10aXRsZSBydW4tZXZpZGVuY2UtZGVzYyI+CiAgPHRpdGxlIGlkPSJydW4tZXZpZGVuY2UtdGl0bGUiPnRoZUhhcnZlc3RlciBkaXNjb3ZlcnkgYW5kIGV2aWRlbmNlIGFyY2hpdGVjdHVyZTwvdGl0bGU+CiAgPGRlc2MgaWQ9InJ1bi1ldmlkZW5jZS1kZXNjIj5TZWxlY3RlZCBkaXNjb3Zlcnkgc291cmNlcyBhbmQgZXhwbGljaXQgYWN0aW9ucyBjb252ZXJnZSBvbiBvbmUgbm9ybWFsaXplZCBldmlkZW5jZSBjb250cmFjdCwgd2hpY2ggcm91dGVzIGF0dHJpYnV0YWJsZSBpZGVudGl0eSwgbmV0d29yaywgYWN0aW9uLCBhbmQgb3V0cHV0IGV2aWRlbmNlLjwvZGVzYz4KICA8ZGVmcz4KICAgIDxzdHlsZT4KICAgICAgOnJvb3R7LS1wYXBlcjojMDQwYTEwOy0tc3VyZmFjZTojMGExMjFjOy0taW5rOiNkZGVhZjI7LS1tdXRlZDojOThhZWJmOy0tcnVsZTojMjY0MDU2Oy0tYWNjZW50OiMwMGRkZWY7LS1hY2NlbnQtdGludDpyZ2JhKDAsMjIxLDIzOSwuMTApOy0tbGluazojYTA5Y2YwOy0tbGluay10aW50OnJnYmEoMTYwLDE1NiwyNDAsLjEwKX0KICAgICAgLmJne2ZpbGw6dmFyKC0tcGFwZXIpfS56b25le2ZpbGw6cmdiYSgzOCw2NCw4NiwuMTIpO3N0cm9rZTp2YXIoLS1ydWxlKTtzdHJva2Utd2lkdGg6MX0uem9uZS1tYXNre2ZpbGw6dmFyKC0tcGFwZXIpfS5ub2Rle2ZpbGw6dmFyKC0tc3VyZmFjZSk7c3Ryb2tlOnZhcigtLXJ1bGUpO3N0cm9rZS13aWR0aDoxfS5ub2RlLWZvY2Fse2ZpbGw6dmFyKC0tYWNjZW50LXRpbnQpO3N0cm9rZTp2YXIoLS1hY2NlbnQpO3N0cm9rZS13aWR0aDoxLjJ9Lm5vZGUtbGlua3tmaWxsOnZhcigtLWxpbmstdGludCk7c3Ryb2tlOnZhcigtLWxpbmspO3N0cm9rZS13aWR0aDoxfS50YWd7ZmlsbDp2YXIoLS1wYXBlcik7c3Ryb2tlOnZhcigtLXJ1bGUpO3N0cm9rZS13aWR0aDoxfS50YWctZm9jYWx7ZmlsbDp2YXIoLS1wYXBlcik7c3Ryb2tlOnZhcigtLWFjY2VudCk7c3Ryb2tlLXdpZHRoOjF9LnRhZy1saW5re2ZpbGw6dmFyKC0tcGFwZXIpO3N0cm9rZTp2YXIoLS1saW5rKTtzdHJva2Utd2lkdGg6MX0KICAgICAgLnRpdGxle2ZvbnQ6NzAwIDMycHggJ0lCTSBQbGV4IFNhbnMgQ29uZGVuc2VkJywnQXJpYWwgTmFycm93JyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6dmFyKC0taW5rKX0uc3VidGl0bGV7Zm9udDo0MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLW11dGVkKX0ubGFiZWx7Zm9udDo2MDAgMTJweCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZpbGw6dmFyKC0tbXV0ZWQpfS5sYWJlbC1mb2NhbHtmaWxsOnZhcigtLWFjY2VudCl9LmxhYmVsLWxpbmt7ZmlsbDp2YXIoLS1saW5rKX0ubm9kZS10aXRsZXtmb250OjcwMCAyMHB4ICdJQk0gUGxleCBTYW5zIENvbmRlbnNlZCcsJ0FyaWFsIE5hcnJvdycsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOnZhcigtLWluayl9LmNvcHl7Zm9udDo0MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLW11dGVkKX0ubW9ub3tmb250OjUwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7ZmlsbDp2YXIoLS1tdXRlZCl9Lm1vbm8tc3Ryb25ne2ZvbnQ6NjAwIDEycHggdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtmaWxsOnZhcigtLWluayl9LmxlZ2VuZHtmb250OjUwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7ZmlsbDp2YXIoLS1tdXRlZCl9CiAgICAgIC5jb25uZWN0b3J7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1tdXRlZCk7c3Ryb2tlLXdpZHRoOjEuMn0uY29ubmVjdG9yLWFjY2VudHtmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWFjY2VudCk7c3Ryb2tlLXdpZHRoOjEuMn0ubWFya2VyLW11dGVke2ZpbGw6dmFyKC0tbXV0ZWQpfS5tYXJrZXItYWNjZW50e2ZpbGw6dmFyKC0tYWNjZW50KX0KICAgIDwvc3R5bGU+CiAgICA8bWFya2VyIGlkPSJydW4tYXJyb3ciIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjYiIHJlZlg9IjciIHJlZlk9IjMiIG9yaWVudD0iYXV0byI+PHBvbHlnb24gcG9pbnRzPSIwIDAsOCAzLDAgNiIgY2xhc3M9Im1hcmtlci1tdXRlZCIvPjwvbWFya2VyPgogICAgPG1hcmtlciBpZD0icnVuLWFycm93LWFjY2VudCIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iNiIgcmVmWD0iNyIgcmVmWT0iMyIgb3JpZW50PSJhdXRvIj48cG9seWdvbiBwb2ludHM9IjAgMCw4IDMsMCA2IiBjbGFzcz0ibWFya2VyLWFjY2VudCIvPjwvbWFya2VyPgogIDwvZGVmcz4KCiAgPHJlY3Qgd2lkdGg9IjcyMCIgaGVpZ2h0PSI2ODAiIGNsYXNzPSJiZyIvPgogIDx0ZXh0IHg9IjQwIiB5PSI1MiIgY2xhc3M9InRpdGxlIj5Gcm9tIGRpc2NvdmVyeSB0byBkdXJhYmxlIGV2aWRlbmNlPC90ZXh0PgogIDx0ZXh0IHg9IjQwIiB5PSI4MCIgY2xhc3M9InN1YnRpdGxlIj5FdmVyeSBzZWxlY3RlZCBzb3VyY2UgYW5kIGFjdGlvbiByZXBvcnRzIGFuIG91dGNvbWUgYmVmb3JlIGV4cG9ydC48L3RleHQ+CgogIDxyZWN0IHg9IjI0IiB5PSIxMTIiIHdpZHRoPSI2NzIiIGhlaWdodD0iMTgwIiBjbGFzcz0iem9uZSIvPgogIDxyZWN0IHg9IjQwIiB5PSIxMTYiIHdpZHRoPSIxNTIiIGhlaWdodD0iMjAiIGNsYXNzPSJ6b25lLW1hc2siLz4KICA8dGV4dCB4PSI0OCIgeT0iMTMyIiBjbGFzcz0ibGFiZWwiPlNFTEVDVCArIEVYRUNVVEU8L3RleHQ+CiAgPHJlY3QgeD0iMjQiIHk9IjQ2NCIgd2lkdGg9IjY3MiIgaGVpZ2h0PSIxNTYiIGNsYXNzPSJ6b25lIi8+CiAgPHJlY3QgeD0iNDAiIHk9IjQ2OCIgd2lkdGg9IjEzNiIgaGVpZ2h0PSIyMCIgY2xhc3M9InpvbmUtbWFzayIvPgogIDx0ZXh0IHg9IjQ4IiB5PSI0ODQiIGNsYXNzPSJsYWJlbCI+RVZJREVOQ0UgUk9VVEVTPC90ZXh0PgoKICA8cGF0aCBkPSJNMTk2IDI2MCBWMjg0IFExOTYgMjkyIDIwNCAyOTIgSDI3MiBRMjgwIDI5MiAyODAgMzAwIFYzMjgiIGNsYXNzPSJjb25uZWN0b3IiIG1hcmtlci1lbmQ9InVybCgjcnVuLWFycm93KSIvPgogIDxwYXRoIGQ9Ik01MjQgMjYwIFYyODQgUTUyNCAyOTIgNTE2IDI5MiBINDQ4IFE0NDAgMjkyIDQ0MCAzMDAgVjMyOCIgY2xhc3M9ImNvbm5lY3RvciIgbWFya2VyLWVuZD0idXJsKCNydW4tYXJyb3cpIi8+CiAgPHBhdGggZD0iTTI4MCA0NDAgVjQ1MiBRMjgwIDQ2MCAyNzIgNDYwIEgxNDQgUTEzNiA0NjAgMTM2IDQ2OCBWNTAwIiBjbGFzcz0iY29ubmVjdG9yIiBtYXJrZXItZW5kPSJ1cmwoI3J1bi1hcnJvdykiLz4KICA8bGluZSB4MT0iMzYwIiB5MT0iNDQwIiB4Mj0iMzYwIiB5Mj0iNTAwIiBjbGFzcz0iY29ubmVjdG9yIiBtYXJrZXItZW5kPSJ1cmwoI3J1bi1hcnJvdykiLz4KICA8cGF0aCBkPSJNNDQwIDQ0MCBWNDUyIFE0NDAgNDYwIDQ0OCA0NjAgSDU3NiBRNTg0IDQ2MCA1ODQgNDY4IFY1MDAiIGNsYXNzPSJjb25uZWN0b3ItYWNjZW50IiBtYXJrZXItZW5kPSJ1cmwoI3J1bi1hcnJvdy1hY2NlbnQpIi8+CgogIDxyZWN0IHg9IjQ4IiB5PSIxNDgiIHdpZHRoPSIyOTYiIGhlaWdodD0iMTEyIiBjbGFzcz0ibm9kZSIvPgogIDxyZWN0IHg9IjY0IiB5PSIxNjQiIHdpZHRoPSI4NCIgaGVpZ2h0PSIyNCIgY2xhc3M9InRhZyIvPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTgwIiBjbGFzcz0ibW9ubyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+U09VUkNFUzwvdGV4dD4KICA8dGV4dCB4PSI2NCIgeT0iMjE2IiBjbGFzcz0ibm9kZS10aXRsZSI+U2NvcGUgYW5kIGRpc2NvdmVyeTwvdGV4dD4KICA8dGV4dCB4PSI2NCIgeT0iMjQwIiBjbGFzcz0ibW9uby1zdHJvbmciPjcgY2FwYWJpbGl0aWVzIMK3IDU4IGFkYXB0ZXJzPC90ZXh0PgogIDx0ZXh0IHg9IjY0IiB5PSIyNTYiIGNsYXNzPSJtb25vIj5uYW1lIMK3IHJvdXRlIMK3IGFsbCDCtyBuby1ob3N0czwvdGV4dD4KCiAgPHJlY3QgeD0iMzc2IiB5PSIxNDgiIHdpZHRoPSIyOTYiIGhlaWdodD0iMTEyIiBjbGFzcz0ibm9kZSIvPgogIDxyZWN0IHg9IjM5MiIgeT0iMTY0IiB3aWR0aD0iODQiIGhlaWdodD0iMjQiIGNsYXNzPSJ0YWciLz4KICA8dGV4dCB4PSI0MzQiIHk9IjE4MCIgY2xhc3M9Im1vbm8iIHRleHQtYW5jaG9yPSJtaWRkbGUiPkFDVElPTlM8L3RleHQ+CiAgPHRleHQgeD0iMzkyIiB5PSIyMTYiIGNsYXNzPSJub2RlLXRpdGxlIj5FeHBsaWNpdCBlbnJpY2htZW50PC90ZXh0PgogIDx0ZXh0IHg9IjM5MiIgeT0iMjQwIiBjbGFzcz0ibW9uby1zdHJvbmciPlAwIHByb3ZpZGVyIMK3IFAxIEROUyDCtyBQMiBkaXJlY3Q8L3RleHQ+CiAgPHRleHQgeD0iMzkyIiB5PSIyNTYiIGNsYXNzPSJtb25vIj5yZXNvbHZlIMK3IHJlY3Vyc2Ugwrcgc2NyZWVuc2hvdCDCtyB2aG9zdDwvdGV4dD4KCiAgPHJlY3QgeD0iMTIwIiB5PSIzMjgiIHdpZHRoPSI0ODAiIGhlaWdodD0iMTEyIiBjbGFzcz0ibm9kZS1mb2NhbCIvPgogIDxyZWN0IHg9IjEzNiIgeT0iMzQ0IiB3aWR0aD0iMTA4IiBoZWlnaHQ9IjI0IiBjbGFzcz0idGFnLWZvY2FsIi8+CiAgPHRleHQgeD0iMTkwIiB5PSIzNjAiIGNsYXNzPSJtb25vIGxhYmVsLWZvY2FsIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5OT1JNQUxJWkU8L3RleHQ+CiAgPHRleHQgeD0iMjY0IiB5PSIzNjQiIGNsYXNzPSJub2RlLXRpdGxlIj5Db21wbGV0ZWRSZXN1bHQgY29udHJhY3Q8L3RleHQ+CiAgPHRleHQgeD0iMTM2IiB5PSI0MDAiIGNsYXNzPSJjb3B5Ij5EZWR1cGUgZmluZGluZ3MuIFByZXNlcnZlIHByb3ZlbmFuY2UgYW5kIG91dGNvbWVzLjwvdGV4dD4KICA8dGV4dCB4PSIxMzYiIHk9IjQyNCIgY2xhc3M9Im1vbm8tc3Ryb25nIj5jb21wbGV0ZSDCtyBwYXJ0aWFsIMK3IGZhaWxlZCDCtyBhcnRpZmFjdHM8L3RleHQ+CgogIDxyZWN0IHg9IjQwIiB5PSI1MDAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMTA0IiBjbGFzcz0ibm9kZSIvPgogIDx0ZXh0IHg9IjU2IiB5PSI1MzIiIGNsYXNzPSJub2RlLXRpdGxlIj5JZGVudGl0eSArIGNvbnRhY3Q8L3RleHQ+CiAgPHRleHQgeD0iNTYiIHk9IjU2MCIgY2xhc3M9Im1vbm8tc3Ryb25nIj5zdWJkb21haW5zIMK3IGVtYWlscyDCtyBVUkxzPC90ZXh0PgogIDx0ZXh0IHg9IjU2IiB5PSI1ODAiIGNsYXNzPSJtb25vIj5wZW9wbGUgwrcgbGlua3MgwrcgYnJlYWNoZXM8L3RleHQ+CgogIDxyZWN0IHg9IjI2MCIgeT0iNTAwIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjEwNCIgY2xhc3M9Im5vZGUiLz4KICA8dGV4dCB4PSIyNzYiIHk9IjUzMiIgY2xhc3M9Im5vZGUtdGl0bGUiPk5ldHdvcmsgKyBhY3Rpb248L3RleHQ+CiAgPHRleHQgeD0iMjc2IiB5PSI1NjAiIGNsYXNzPSJtb25vLXN0cm9uZyI+SVBzIMK3IEFTTnMgwrcgRE5TIMK3IHZob3N0czwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjU4MCIgY2xhc3M9Im1vbm8iPnNjcmVlbnNob3RzIMK3IHRha2VvdmVyczwvdGV4dD4KCiAgPHJlY3QgeD0iNDgwIiB5PSI1MDAiIHdpZHRoPSIyMDAiIGhlaWdodD0iMTA0IiBjbGFzcz0ibm9kZS1saW5rIi8+CiAgPHRleHQgeD0iNDk2IiB5PSI1MzIiIGNsYXNzPSJub2RlLXRpdGxlIj5EdXJhYmxlIG91dHB1dHM8L3RleHQ+CiAgPHRleHQgeD0iNDk2IiB5PSI1NjAiIGNsYXNzPSJtb25vLXN0cm9uZyI+VGVybWluYWwgwrcgSlNPTkwgwrcgU1FMaXRlPC90ZXh0PgogIDx0ZXh0IHg9IjQ5NiIgeT0iNTgwIiBjbGFzcz0ibW9ubyBsYWJlbC1saW5rIj5SRVNUIMK3IEhhcnZlc3RWaWV3PC90ZXh0PgoKICA8bGluZSB4MT0iNDAiIHkxPSI2NDAiIHgyPSI2ODAiIHkyPSI2NDAiIHN0cm9rZT0idmFyKC0tcnVsZSkiIHN0cm9rZS13aWR0aD0iMSIvPgogIDxsaW5lIHgxPSI0OCIgeTE9IjY2NCIgeDI9IjgwIiB5Mj0iNjY0IiBjbGFzcz0iY29ubmVjdG9yIiBtYXJrZXItZW5kPSJ1cmwoI3J1bi1hcnJvdykiLz4KICA8dGV4dCB4PSI5MiIgeT0iNjY4IiBjbGFzcz0ibGVnZW5kIj5ldmlkZW5jZSBmbG93PC90ZXh0PgogIDxsaW5lIHgxPSIyODAiIHkxPSI2NjQiIHgyPSIzMTIiIHkyPSI2NjQiIGNsYXNzPSJjb25uZWN0b3ItYWNjZW50IiBtYXJrZXItZW5kPSJ1cmwoI3J1bi1hcnJvdy1hY2NlbnQpIi8+CiAgPHRleHQgeD0iMzI0IiB5PSI2NjgiIGNsYXNzPSJsZWdlbmQiPmR1cmFibGUgaGFuZG9mZjwvdGV4dD4KPC9zdmc+Cg==" width="720" height="680" class="img_TYmd"></p></div><figcaption><span>Discovery sources and explicit actions converge on one attributable evidence contract.</span><span class="rs-technical-figure__mobile-hint">Scroll to inspect</span></figcaption></figure>
<h2 class="anchor anchorTargetStickyNavbar_q9xe" id="harvestview">HarvestView<a href="https://rebelscrolls.com/blog/theharvester-new-era/#harvestview" class="hash-link" aria-label="Direct link to HarvestView" title="Direct link to HarvestView" translate="no">​</a></h2>
<p>Last but certainly not least is the feature I am most excited to discuss: HarvestView, a full web app for running theHarvester and analyzing its results. It replaces the old REST API with a more complete interface. Under the hood, the frontend is deliberately straightforward: a single HTML file and a single JavaScript file use <a href="https://www.tabulator.info/" target="_blank" rel="noopener noreferrer" class="">Tabulator</a> to display tables backed by FastAPI. HarvestView can also schedule scans for continuous coverage.</p>
<p>When I created the original REST API, I mainly wanted a reason to use FastAPI after being impressed by its first release. FastAPI has since become widely adopted, and I have used it for years. This time I wanted to build an accompanying web app with a proper API, parity with the CLI, and a much easier way to use theHarvester. Existing runs can also be exported and imported through JSONL or SQLite files.</p>
<figure class="rs-technical-figure"><div class="rs-technical-figure__viewport" role="region" tabindex="0" aria-label="Scrollable HarvestView architecture"><p><img decoding="async" loading="lazy" alt="HarvestView browser, API, worker, evidence, and interchange architecture" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzIwIiBoZWlnaHQ9IjY4MCIgdmlld0JveD0iMCAwIDcyMCA2ODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsbGVkYnk9ImhhcnZlc3R2aWV3LXRpdGxlIGhhcnZlc3R2aWV3LWRlc2MiPgogIDx0aXRsZSBpZD0iaGFydmVzdHZpZXctdGl0bGUiPkhhcnZlc3RWaWV3IGxvY2FsIHJ1biBkZXNrIGFyY2hpdGVjdHVyZTwvdGl0bGU+CiAgPGRlc2MgaWQ9ImhhcnZlc3R2aWV3LWRlc2MiPkEgbG9jYWwgYnJvd3NlciBzdWJtaXRzIGEgcmV2aWV3ZWQgcGxhbiB0aHJvdWdoIHRoZSBhdXRoZW50aWNhdGVkIEFQSSwgZHVyYWJsZSBydW4gY29udHJvbCwgYW5kIGFuIGlzb2xhdGVkIHdvcmtlciBiZWZvcmUgcmVzdWx0cyBiZWNvbWUgY2Fub25pY2FsIGV2aWRlbmNlIGZvciBpbnNwZWN0aW9uIGFuZCBpbnRlcmNoYW5nZS48L2Rlc2M+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIDpyb290ey0tcGFwZXI6IzA0MGExMDstLXN1cmZhY2U6IzBhMTIxYzstLWluazojZGRlYWYyOy0tbXV0ZWQ6Izk4YWViZjstLXJ1bGU6IzI2NDA1NjstLWFjY2VudDojMDBkZGVmOy0tYWNjZW50LXRpbnQ6cmdiYSgwLDIyMSwyMzksLjEwKTstLWxpbms6I2EwOWNmMDstLWxpbmstdGludDpyZ2JhKDE2MCwxNTYsMjQwLC4xMCl9CiAgICAgIC5iZ3tmaWxsOnZhcigtLXBhcGVyKX0uYm91bmRhcnl7ZmlsbDpyZ2JhKDM4LDY0LDg2LC4xMik7c3Ryb2tlOnZhcigtLXJ1bGUpO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1kYXNoYXJyYXk6OCA4fS5ib3VuZGFyeS1tYXNre2ZpbGw6dmFyKC0tcGFwZXIpfS5ub2Rle2ZpbGw6dmFyKC0tc3VyZmFjZSk7c3Ryb2tlOnZhcigtLXJ1bGUpO3N0cm9rZS13aWR0aDoxfS5ub2RlLWZvY2Fse2ZpbGw6dmFyKC0tYWNjZW50LXRpbnQpO3N0cm9rZTp2YXIoLS1hY2NlbnQpO3N0cm9rZS13aWR0aDoxLjJ9Lm5vZGUtbGlua3tmaWxsOnZhcigtLWxpbmstdGludCk7c3Ryb2tlOnZhcigtLWxpbmspO3N0cm9rZS13aWR0aDoxfS50YWd7ZmlsbDp2YXIoLS1wYXBlcik7c3Ryb2tlOnZhcigtLXJ1bGUpO3N0cm9rZS13aWR0aDoxfS50YWctZm9jYWx7ZmlsbDp2YXIoLS1wYXBlcik7c3Ryb2tlOnZhcigtLWFjY2VudCk7c3Ryb2tlLXdpZHRoOjF9LnRhZy1saW5re2ZpbGw6dmFyKC0tcGFwZXIpO3N0cm9rZTp2YXIoLS1saW5rKTtzdHJva2Utd2lkdGg6MX0KICAgICAgLnRpdGxle2ZvbnQ6NzAwIDMycHggJ0lCTSBQbGV4IFNhbnMgQ29uZGVuc2VkJywnQXJpYWwgTmFycm93JyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6dmFyKC0taW5rKX0uc3VidGl0bGV7Zm9udDo0MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLW11dGVkKX0ubGFiZWx7Zm9udDo2MDAgMTJweCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZpbGw6dmFyKC0tbXV0ZWQpfS5sYWJlbC1mb2NhbHtmaWxsOnZhcigtLWFjY2VudCl9LmxhYmVsLWxpbmt7ZmlsbDp2YXIoLS1saW5rKX0ubm9kZS10aXRsZXtmb250OjcwMCAyMHB4ICdJQk0gUGxleCBTYW5zIENvbmRlbnNlZCcsJ0FyaWFsIE5hcnJvdycsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOnZhcigtLWluayl9LmNvcHl7Zm9udDo0MDAgMTZweCBzeXN0ZW0tdWksc2Fucy1zZXJpZjtmaWxsOnZhcigtLW11dGVkKX0ubW9ub3tmb250OjUwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7ZmlsbDp2YXIoLS1tdXRlZCl9Lm1vbm8tc3Ryb25ne2ZvbnQ6NjAwIDEycHggdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtmaWxsOnZhcigtLWluayl9LmxlZ2VuZHtmb250OjUwMCAxMnB4IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7ZmlsbDp2YXIoLS1tdXRlZCl9CiAgICAgIC5jb25uZWN0b3J7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1tdXRlZCk7c3Ryb2tlLXdpZHRoOjEuMn0uY29ubmVjdG9yLWFjY2VudHtmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWFjY2VudCk7c3Ryb2tlLXdpZHRoOjEuMn0uY29ubmVjdG9yLWxpbmt7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1saW5rKTtzdHJva2Utd2lkdGg6MS4yfS5tYXJrZXItbXV0ZWR7ZmlsbDp2YXIoLS1tdXRlZCl9Lm1hcmtlci1hY2NlbnR7ZmlsbDp2YXIoLS1hY2NlbnQpfS5tYXJrZXItbGlua3tmaWxsOnZhcigtLWxpbmspfQogICAgPC9zdHlsZT4KICAgIDxtYXJrZXIgaWQ9ImhhcnZlc3QtYXJyb3ciIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjYiIHJlZlg9IjciIHJlZlk9IjMiIG9yaWVudD0iYXV0byI+PHBvbHlnb24gcG9pbnRzPSIwIDAsOCAzLDAgNiIgY2xhc3M9Im1hcmtlci1tdXRlZCIvPjwvbWFya2VyPgogICAgPG1hcmtlciBpZD0iaGFydmVzdC1hcnJvdy1hY2NlbnQiIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjYiIHJlZlg9IjciIHJlZlk9IjMiIG9yaWVudD0iYXV0byI+PHBvbHlnb24gcG9pbnRzPSIwIDAsOCAzLDAgNiIgY2xhc3M9Im1hcmtlci1hY2NlbnQiLz48L21hcmtlcj4KICAgIDxtYXJrZXIgaWQ9ImhhcnZlc3QtYXJyb3ctbGluayIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iNiIgcmVmWD0iNyIgcmVmWT0iMyIgb3JpZW50PSJhdXRvIj48cG9seWdvbiBwb2ludHM9IjAgMCw4IDMsMCA2IiBjbGFzcz0ibWFya2VyLWxpbmsiLz48L21hcmtlcj4KICA8L2RlZnM+CgogIDxyZWN0IHdpZHRoPSI3MjAiIGhlaWdodD0iNjgwIiBjbGFzcz0iYmciLz4KICA8dGV4dCB4PSI0MCIgeT0iNTIiIGNsYXNzPSJ0aXRsZSI+T25lIHJ1biBkZXNrLCBvbmUgZHVyYWJsZSBldmlkZW5jZSBwYXRoPC90ZXh0PgogIDx0ZXh0IHg9IjQwIiB5PSI4MCIgY2xhc3M9InN1YnRpdGxlIj5QbGFuLCB2YWxpZGF0ZSwgZXhlY3V0ZSwgaW5zcGVjdCwgYW5kIG1vdmUgY29tcGxldGVkIGV2aWRlbmNlLjwvdGV4dD4KCiAgPHJlY3QgeD0iMjQiIHk9IjExMiIgd2lkdGg9IjY3MiIgaGVpZ2h0PSI0NjgiIGNsYXNzPSJib3VuZGFyeSIvPgogIDxyZWN0IHg9IjQwIiB5PSIxMTYiIHdpZHRoPSIyMzIiIGhlaWdodD0iMjAiIGNsYXNzPSJib3VuZGFyeS1tYXNrIi8+CiAgPHRleHQgeD0iNDgiIHk9IjEzMiIgY2xhc3M9ImxhYmVsIj5MT0NBTEhPU1QgwrcgMTI3LjAuMC4xOjUwMDA8L3RleHQ+CgogIDxsaW5lIHgxPSIyMzIiIHkxPSIyMDgiIHgyPSIyNjQiIHkyPSIyMDgiIGNsYXNzPSJjb25uZWN0b3IiIG1hcmtlci1lbmQ9InVybCgjaGFydmVzdC1hcnJvdykiLz4KICA8cGF0aCBkPSJNMzI4IDI2NCBWMjg4IFEzMjggMjk2IDMyMCAyOTYgSDE0NCBRMTM2IDI5NiAxMzYgMzA0IFYzMjgiIGNsYXNzPSJjb25uZWN0b3IiIG1hcmtlci1lbmQ9InVybCgjaGFydmVzdC1hcnJvdykiLz4KICA8cGF0aCBkPSJNMzkyIDI2NCBWMjk2IFEzOTIgMzA0IDM4NCAzMDQgSDM2OCBRMzYwIDMwNCAzNjAgMzEyIFYzMjgiIGNsYXNzPSJjb25uZWN0b3IiIG1hcmtlci1lbmQ9InVybCgjaGFydmVzdC1hcnJvdykiLz4KICA8bGluZSB4MT0iMjMyIiB5MT0iMzg0IiB4Mj0iMjY0IiB5Mj0iMzg0IiBjbGFzcz0iY29ubmVjdG9yIiBtYXJrZXItZW5kPSJ1cmwoI2hhcnZlc3QtYXJyb3cpIi8+CiAgPGxpbmUgeDE9IjQ1NiIgeTE9IjM4NCIgeDI9IjQ4OCIgeTI9IjM4NCIgY2xhc3M9ImNvbm5lY3Rvci1hY2NlbnQiIG1hcmtlci1lbmQ9InVybCgjaGFydmVzdC1hcnJvdy1hY2NlbnQpIi8+CiAgPGxpbmUgeDE9IjU4NCIgeTE9IjMyOCIgeDI9IjU4NCIgeTI9IjI2NCIgY2xhc3M9ImNvbm5lY3Rvci1saW5rIiBtYXJrZXItZW5kPSJ1cmwoI2hhcnZlc3QtYXJyb3ctbGluaykiLz4KICA8bGluZSB4MT0iNTg0IiB5MT0iNDQwIiB4Mj0iNTg0IiB5Mj0iNDk2IiBjbGFzcz0iY29ubmVjdG9yLWxpbmsiIG1hcmtlci1lbmQ9InVybCgjaGFydmVzdC1hcnJvdy1saW5rKSIvPgoKICA8cmVjdCB4PSI0MCIgeT0iMTUyIiB3aWR0aD0iMTkyIiBoZWlnaHQ9IjExMiIgY2xhc3M9Im5vZGUiLz4KICA8cmVjdCB4PSI1NiIgeT0iMTY4IiB3aWR0aD0iODAiIGhlaWdodD0iMjQiIGNsYXNzPSJ0YWciLz4KICA8dGV4dCB4PSI5NiIgeT0iMTg0IiBjbGFzcz0ibW9ubyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+QlJPV1NFUjwvdGV4dD4KICA8dGV4dCB4PSI1NiIgeT0iMjIwIiBjbGFzcz0ibm9kZS10aXRsZSI+UGxhbiB0aGUgcnVuPC90ZXh0PgogIDx0ZXh0IHg9IjU2IiB5PSIyNDQiIGNsYXNzPSJtb25vLXN0cm9uZyI+dGFyZ2V0IMK3IHNvdXJjZXMgwrcgYWN0aW9uczwvdGV4dD4KCiAgPHJlY3QgeD0iMjY0IiB5PSIxNTIiIHdpZHRoPSIxOTIiIGhlaWdodD0iMTEyIiBjbGFzcz0ibm9kZSIvPgogIDxyZWN0IHg9IjI4MCIgeT0iMTY4IiB3aWR0aD0iODAiIGhlaWdodD0iMjQiIGNsYXNzPSJ0YWciLz4KICA8dGV4dCB4PSIzMjAiIHk9IjE4NCIgY2xhc3M9Im1vbm8iIHRleHQtYW5jaG9yPSJtaWRkbGUiPkFQSSBHQVRFPC90ZXh0PgogIDx0ZXh0IHg9IjI4MCIgeT0iMjIwIiBjbGFzcz0ibm9kZS10aXRsZSI+QXV0aGVudGljYXRlZCBBUEk8L3RleHQ+CiAgPHRleHQgeD0iMjgwIiB5PSIyNDQiIGNsYXNzPSJtb25vLXN0cm9uZyI+c2NvcGUgwrcgbGltaXRzIMK3IGF1dGg8L3RleHQ+CgogIDxyZWN0IHg9IjQ4OCIgeT0iMTUyIiB3aWR0aD0iMTkyIiBoZWlnaHQ9IjExMiIgY2xhc3M9Im5vZGUtbGluayIvPgogIDxyZWN0IHg9IjUwNCIgeT0iMTY4IiB3aWR0aD0iOTYiIGhlaWdodD0iMjQiIGNsYXNzPSJ0YWctbGluayIvPgogIDx0ZXh0IHg9IjU1MiIgeT0iMTg0IiBjbGFzcz0ibW9ubyBsYWJlbC1saW5rIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XT1JLQkVOQ0g8L3RleHQ+CiAgPHRleHQgeD0iNTA0IiB5PSIyMjAiIGNsYXNzPSJub2RlLXRpdGxlIj5JbnNwZWN0IGFuZCBhY3Q8L3RleHQ+CiAgPHRleHQgeD0iNTA0IiB5PSIyNDQiIGNsYXNzPSJtb25vLXN0cm9uZyI+aGlzdG9yeSDCtyBjaGlsZCBydW5zPC90ZXh0PgoKICA8cmVjdCB4PSI0MCIgeT0iMzI4IiB3aWR0aD0iMTkyIiBoZWlnaHQ9IjExMiIgY2xhc3M9Im5vZGUiLz4KICA8cmVjdCB4PSI1NiIgeT0iMzQ0IiB3aWR0aD0iODAiIGhlaWdodD0iMjQiIGNsYXNzPSJ0YWciLz4KICA8dGV4dCB4PSI5NiIgeT0iMzYwIiBjbGFzcz0ibW9ubyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Q09OVFJPTDwvdGV4dD4KICA8dGV4dCB4PSI1NiIgeT0iMzk2IiBjbGFzcz0ibm9kZS10aXRsZSI+RHVyYWJsZSBsaWZlY3ljbGU8L3RleHQ+CiAgPHRleHQgeD0iNTYiIHk9IjQyMCIgY2xhc3M9Im1vbm8tc3Ryb25nIj5xdWV1ZWQgwrcgcnVubmluZyDCtyBkb25lPC90ZXh0PgoKICA8cmVjdCB4PSIyNjQiIHk9IjMyOCIgd2lkdGg9IjE5MiIgaGVpZ2h0PSIxMTIiIGNsYXNzPSJub2RlIi8+CiAgPHJlY3QgeD0iMjgwIiB5PSIzNDQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIyNCIgY2xhc3M9InRhZyIvPgogIDx0ZXh0IHg9IjMyMCIgeT0iMzYwIiBjbGFzcz0ibW9ubyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V09SS0VSPC90ZXh0PgogIDx0ZXh0IHg9IjI4MCIgeT0iMzk2IiBjbGFzcz0ibm9kZS10aXRsZSI+SXNvbGF0ZWQgd29ya2VyPC90ZXh0PgogIDx0ZXh0IHg9IjI4MCIgeT0iNDIwIiBjbGFzcz0ibW9uby1zdHJvbmciPmNsYWltIMK3IGV4ZWN1dGUgwrcgc2F2ZTwvdGV4dD4KCiAgPHJlY3QgeD0iNDg4IiB5PSIzMjgiIHdpZHRoPSIxOTIiIGhlaWdodD0iMTEyIiBjbGFzcz0ibm9kZS1mb2NhbCIvPgogIDxyZWN0IHg9IjUwNCIgeT0iMzQ0IiB3aWR0aD0iODgiIGhlaWdodD0iMjQiIGNsYXNzPSJ0YWctZm9jYWwiLz4KICA8dGV4dCB4PSI1NDgiIHk9IjM2MCIgY2xhc3M9Im1vbm8gbGFiZWwtZm9jYWwiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkVWSURFTkNFPC90ZXh0PgogIDx0ZXh0IHg9IjUwNCIgeT0iMzk2IiBjbGFzcz0ibm9kZS10aXRsZSI+UnVuIGV2aWRlbmNlPC90ZXh0PgogIDx0ZXh0IHg9IjUwNCIgeT0iNDIwIiBjbGFzcz0ibW9uby1zdHJvbmciPnJlc3VsdHMgwrcgcHJvdmVuYW5jZTwvdGV4dD4KCiAgPHJlY3QgeD0iNDAiIHk9IjQ5NiIgd2lkdGg9IjY0MCIgaGVpZ2h0PSI2NCIgY2xhc3M9Im5vZGUtbGluayIvPgogIDx0ZXh0IHg9IjU2IiB5PSI1MzIiIGNsYXNzPSJub2RlLXRpdGxlIj5JbXBvcnQgYW5kIGV4cG9ydDwvdGV4dD4KICA8dGV4dCB4PSIyNjQiIHk9IjUzMiIgY2xhc3M9Im1vbm8tc3Ryb25nIj5KU09OTCDCtyBvbmUgcnVuPC90ZXh0PgogIDx0ZXh0IHg9IjQ1NiIgeT0iNTMyIiBjbGFzcz0ibW9ubyBsYWJlbC1saW5rIj5TUUxpdGUgwrcgY29tcGxldGVkIHNldDwvdGV4dD4KCiAgPGxpbmUgeDE9IjQwIiB5MT0iNjI0IiB4Mj0iNjgwIiB5Mj0iNjI0IiBzdHJva2U9InZhcigtLXJ1bGUpIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8bGluZSB4MT0iNDgiIHkxPSI2NTYiIHgyPSI4MCIgeTI9IjY1NiIgY2xhc3M9ImNvbm5lY3RvciIgbWFya2VyLWVuZD0idXJsKCNoYXJ2ZXN0LWFycm93KSIvPgogIDx0ZXh0IHg9IjkyIiB5PSI2NjAiIGNsYXNzPSJsZWdlbmQiPnJ1biBjb250cm9sPC90ZXh0PgogIDxsaW5lIHgxPSIyNTYiIHkxPSI2NTYiIHgyPSIyODgiIHkyPSI2NTYiIGNsYXNzPSJjb25uZWN0b3ItYWNjZW50IiBtYXJrZXItZW5kPSJ1cmwoI2hhcnZlc3QtYXJyb3ctYWNjZW50KSIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iNjYwIiBjbGFzcz0ibGVnZW5kIj5ldmlkZW5jZSBoYW5kb2ZmPC90ZXh0PgogIDxsaW5lIHgxPSI1MjAiIHkxPSI2NTYiIHgyPSI1NTIiIHkyPSI2NTYiIGNsYXNzPSJjb25uZWN0b3ItbGluayIgbWFya2VyLWVuZD0idXJsKCNoYXJ2ZXN0LWFycm93LWxpbmspIi8+CiAgPHRleHQgeD0iNTY0IiB5PSI2NjAiIGNsYXNzPSJsZWdlbmQiPmluc3BlY3Rpb24gcGF0aDwvdGV4dD4KPC9zdmc+Cg==" width="720" height="680" class="img_TYmd"></p></div><figcaption><span>HarvestView carries an authorized plan through durable execution, inspection, and interchange.</span><span class="rs-technical-figure__mobile-hint">Scroll to inspect</span></figcaption></figure>
<p>The web app's styling was developed mainly with the <a href="https://impeccable.style/" target="_blank" rel="noopener noreferrer" class="">Impeccable skill</a>. No longer having to visit Stack Overflow to center a <code>div</code> manually is still one of my favorite uses of AI: frontend development no longer has to be a headache.</p>
<h2 class="anchor anchorTargetStickyNavbar_q9xe" id="updating-theharvester-for-the-ai-era-of-development">Updating theHarvester for the AI Era of Development<a href="https://rebelscrolls.com/blog/theharvester-new-era/#updating-theharvester-for-the-ai-era-of-development" class="hash-link" aria-label="Direct link to Updating theHarvester for the AI Era of Development" title="Direct link to Updating theHarvester for the AI Era of Development" translate="no">​</a></h2>
<p>TheHarvester now includes <code>AGENTS.md</code> and <code>CONTEXT.md</code> files that make it easier for developers and coding agents to work with the repository. The wiki, README, and issue templates have also been revised. While vibe coding is a useful way to prototype features, the resulting code must still be readable and maintainable. I will discuss the development process in part two, including how these changes were completed in such a short time.</p>
<p>One of the biggest obstacles was trying to add features or fix bugs with frontier AI models without a proper harness. That led to overengineered code, implementations that missed the bigger picture, and fixes that introduced new bugs. Skills such as <a href="https://github.com/mattpocock/skills" target="_blank" rel="noopener noreferrer" class="">Matt Pocock's engineering skills</a> and <a href="https://github.com/dietrichgebert/ponytail" target="_blank" rel="noopener noreferrer" class="">Ponytail</a> helped me stay on top of the work by grilling assumptions and mapping features before implementation. TheHarvester is now much more developer-friendly, and it is embracing AI-assisted development without treating generated code as automatically correct. This is only the beginning.</p>
<p>Follow <a href="https://github.com/laramies/theHarvester/releases" target="_blank" rel="noopener noreferrer" class="">theHarvester releases</a> for the eventual 5.0.0 release and final notes.</p>
<p>Thank you for taking the time to read this. If you encounter a bug or have an idea for a new feature, <a href="https://github.com/laramies/theHarvester/issues/new/choose" target="_blank" rel="noopener noreferrer" class="">create an issue</a>. I look forward to hearing how the new version feels to use.</p>]]></content:encoded>
            <category>Development</category>
            <category>theHarvester</category>
            <category>OSINT</category>
            <category>Attack Surface Management</category>
            <category>Information Security</category>
        </item>
    </channel>
</rss>