<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Czax225</title>
    <description>The latest articles on DEV Community by Czax225 (@czax225).</description>
    <link>https://dev.to/czax225</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3670708%2F5a5c6cd9-3d89-41be-bae2-22f717ecb3cd.png</url>
      <title>DEV Community: Czax225</title>
      <link>https://dev.to/czax225</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/czax225"/>
    <language>en</language>
    <item>
      <title>Title: Ferrum Studio: A Native IDE Built Exclusively for Nim (No Electron, ~12MB)</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Sat, 02 May 2026 13:02:56 +0000</pubDate>
      <link>https://dev.to/czax225/title-ferrum-studio-a-native-ide-built-exclusively-for-nim-no-electron-12mb-294n</link>
      <guid>https://dev.to/czax225/title-ferrum-studio-a-native-ide-built-exclusively-for-nim-no-electron-12mb-294n</guid>
      <description>&lt;p&gt;Every IDE that supports Nim does it as an afterthought. You install a language server plugin, bolt it onto VS Code or Sublime, and hope the latest update didn't break something.&lt;/p&gt;

&lt;p&gt;I wanted something different.&lt;/p&gt;

&lt;p&gt;So I built Ferrum Studio — a lightweight, native desktop IDE built from the ground up exclusively for Nim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/user-attachments/assets/621bf84f-a3b5-4f1c-a7d4-85e3b3e83247" rel="noopener noreferrer"&gt;https://github.com/user-attachments/assets/621bf84f-a3b5-4f1c-a7d4-85e3b3e83247&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No Electron. No bundled Chromium. No 300MB of RAM just to open a file.&lt;/p&gt;

&lt;p&gt;Cold start: &amp;lt; 1 second&lt;/p&gt;

&lt;p&gt;RAM usage (idle): ~35 MB&lt;/p&gt;

&lt;p&gt;Binary size: ~12 MB (Windows)&lt;/p&gt;

&lt;p&gt;Built with Go + Wails, not JavaScript + Node. The backend is compiled Go, the frontend is a native WebView, and the whole thing talks across an auto-generated bridge.&lt;/p&gt;

&lt;h1&gt;
  
  
  What Makes Ferrum Different?
&lt;/h1&gt;

&lt;p&gt;Most editors treat Nim as a plugin. Ferrum treats Nim as the only thing that matters.&lt;/p&gt;

&lt;p&gt;Every feature — snippets, error messages, templates, shortcuts — is designed around how Nim developers actually work.&lt;/p&gt;

&lt;p&gt;Editor Features&lt;br&gt;
Nim syntax highlighting (kept current with new keywords)&lt;/p&gt;

&lt;p&gt;Smart indentation (whitespace-aware)&lt;/p&gt;

&lt;p&gt;Dot-aware autocomplete&lt;/p&gt;

&lt;p&gt;Snippets support&lt;/p&gt;

&lt;p&gt;Inline error squiggles&lt;/p&gt;

&lt;p&gt;Multi-tab editing&lt;/p&gt;

&lt;p&gt;Quick open (Ctrl+P)&lt;/p&gt;

&lt;h1&gt;
  
  
  Nim Integration
&lt;/h1&gt;

&lt;p&gt;F5 → Run (nim c -r)&lt;/p&gt;

&lt;p&gt;F6 → Run with arguments&lt;/p&gt;

&lt;p&gt;F7 → Build&lt;/p&gt;

&lt;p&gt;F8 → Test&lt;/p&gt;

&lt;p&gt;Format via nim pretty&lt;/p&gt;

&lt;p&gt;Fast diagnostics via nim check&lt;/p&gt;

&lt;p&gt;Interactive stdin support&lt;/p&gt;

&lt;p&gt;Problems Panel&lt;br&gt;
Clean error explanations with fix suggestions. Click any error to jump directly to the line. No more cryptic compiler output — Ferrum translates common errors into plain English.&lt;/p&gt;

&lt;h1&gt;
  
  
  Templates
&lt;/h1&gt;

&lt;p&gt;One-click project templates for:&lt;/p&gt;

&lt;p&gt;CLI App&lt;/p&gt;

&lt;p&gt;Library&lt;/p&gt;

&lt;p&gt;Web App&lt;/p&gt;

&lt;p&gt;Async App&lt;/p&gt;

&lt;p&gt;Metaprogramming examples&lt;/p&gt;

&lt;h1&gt;
  
  
  Terminal
&lt;/h1&gt;

&lt;p&gt;Integrated terminal with ANSI colors, command history, and full interactive input support. Plus a "Nim Treasure Map" sidebar with curated code gems for common patterns.&lt;/p&gt;

&lt;h1&gt;
  
  
  Contributing
&lt;/h1&gt;

&lt;p&gt;Contributions are welcome. The best places to help:&lt;/p&gt;

&lt;p&gt;Add more error explanations in enhancements.js&lt;/p&gt;

&lt;p&gt;Keep the syntax highlighter updated with new Nim keywords&lt;/p&gt;

&lt;p&gt;Test on macOS/Linux&lt;/p&gt;

&lt;p&gt;Build a light theme&lt;/p&gt;

&lt;p&gt;Note on AI usage: The frontend UI was partially assisted by AI tools. The core backend and architecture were implemented manually.&lt;/p&gt;

&lt;h1&gt;
  
  
  Links
&lt;/h1&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/CzaxStudio/Ferrum-Studio" rel="noopener noreferrer"&gt;https://github.com/CzaxStudio/Ferrum-Studio&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://czaxstudio.github.io/Ferrum-Studio/" rel="noopener noreferrer"&gt;https://czaxstudio.github.io/Ferrum-Studio/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>performance</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Building Your First Cybersecurity Tool with Spectator: A New Language for Pentesters</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Wed, 29 Apr 2026 05:39:14 +0000</pubDate>
      <link>https://dev.to/czax225/building-your-first-cybersecurity-tool-with-spectator-a-new-language-for-pentesters-2fm9</link>
      <guid>https://dev.to/czax225/building-your-first-cybersecurity-tool-with-spectator-a-new-language-for-pentesters-2fm9</guid>
      <description>&lt;p&gt;The Problem We All Face&lt;br&gt;
Let's be honest: when you're in the middle of a penetration test or red team engagement, the last thing you want to do is wrestle with boilerplate code. You need to scan, exploit, and report — fast.&lt;/p&gt;

&lt;p&gt;Python is great, but:&lt;/p&gt;

&lt;p&gt;You need to install dependencies&lt;/p&gt;

&lt;p&gt;Virtual environments everywhere&lt;/p&gt;

&lt;p&gt;"It works on my machine" syndrome&lt;/p&gt;

&lt;p&gt;GUI tools? That means Electron (hello, 200MB hello world)&lt;/p&gt;

&lt;p&gt;Bash is powerful but... let's not talk about parsing JSON.&lt;/p&gt;

&lt;p&gt;Enter Spectator — a new programming language built from the ground up for cybersecurity work.&lt;/p&gt;

&lt;p&gt;What Is Spectator?&lt;br&gt;
Spectator is an interpreted scripting language (written in Go) that puts security operations front and center.&lt;/p&gt;
&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;# This is all it takes to recon a target
&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"scanme.nmap.org"&lt;/span&gt;
&lt;span class="n"&gt;ips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"IPs: "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ips&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;", "&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;PortScan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;SSLInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Your First Spectator Tool: A Smart Port Scanner
&lt;/h2&gt;

&lt;p&gt;Step 1: Installation&lt;br&gt;
Download the binary from releases:&lt;/p&gt;
&lt;h1&gt;
  
  
  Linux/macOS
&lt;/h1&gt;

&lt;p&gt;chmod +x spectator&lt;br&gt;
./spectator version&lt;/p&gt;
&lt;h1&gt;
  
  
  Windows
&lt;/h1&gt;

&lt;p&gt;Spectator.exe version&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2: Create Your First Script
&lt;/h2&gt;

&lt;p&gt;Save this as smart_scan.str&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Capture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Target IP or domain: "&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[+] Scanning: "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="cp"&gt;## Define common ports and their services
&lt;/span&gt;&lt;span class="n"&gt;ports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;445&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3306&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5432&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;27017&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;svcs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s"&gt;"21"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"FTP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"22"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"SSH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"23"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Telnet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"25"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"SMTP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"80"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"HTTP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"443"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"HTTPS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"445"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"SMB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"3306"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"MySQL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"3389"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"RDP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"5432"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"PostgreSQL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"8080"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"HTTP-Alt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"8443"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"HTTPS-Alt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"27017"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"MongoDB"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;open_ports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[+] Scanning ports...&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ports&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;hasPort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;svcs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"   OPEN     "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"  ("&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;")"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="cp"&gt;## Store results
&lt;/span&gt;    &lt;span class="n"&gt;open_ports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;open_ports&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;

    &lt;span class="cp"&gt;## Grab banner if it's HTTP/HTTPS
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;8443&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;proto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https"&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;proto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"http"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;proto&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"://"&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;":"&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"      → Grabbing banner from "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

      &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"timeout"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"follow"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"server"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"      → Server: "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"_banner"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cp"&gt;## Generate report
&lt;/span&gt;&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[+] Summary:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"    Open ports found: "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;open_ports&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"    Results saved to scan_results.json and scan_report.html"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="cp"&gt;## Save JSON output
&lt;/span&gt;&lt;span class="n"&gt;json_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jsonStr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"scan_results.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="cp"&gt;## Create HTML report
&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Scan Report - "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/title&amp;gt;"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;style&amp;gt;body{font-family:monospace;background:#0a0f1a;color:#e2e8f0;padding:20px}"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"h1{color:#00d4aa} table{border-collapse:collapse;width:100%}"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"th,td{border:1px solid #334155;padding:8px;text-align:left}"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"th{background:#1e293b}&amp;lt;/style&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;h1&amp;gt; Spectator Scan Report&amp;lt;/h1&amp;gt;"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Target:&amp;lt;/strong&amp;gt; "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/p&amp;gt;"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Timestamp:&amp;lt;/strong&amp;gt; "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/p&amp;gt;"&lt;/span&gt;
&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;h2&amp;gt; Open Ports&amp;lt;/h2&amp;gt;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Port&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Service&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Banner&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;

&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;open_ports&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;port_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;port_str&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;banner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;hasKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port_str&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"_banner"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;banner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;port_str&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"_banner"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;banner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"-"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;port_str&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;banner&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;p&amp;gt;&amp;lt;i&amp;gt;Generated by Spectator - See Everything. Miss Nothing.&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"&lt;/span&gt;
&lt;span class="n"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"scan_report.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;Trace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[+] Done! Open scan_report.html in your browser."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Run Your Tool&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spectator run smart_scan.str
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No dependencies, no virtual environments, no "pip install requests." Just run.&lt;/p&gt;

&lt;p&gt;Level Up: Adding a GUI&lt;br&gt;
Here's where Spectator gets really interesting. Let's wrap that scanner in a native GUI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#Import Spec.GUI
&lt;/span&gt;
&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Spectator Port Scanner"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"width"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"height"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;700&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"bg"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"#0a0f1a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s"&gt;"accent"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"#00d4aa"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Spectator Port Scanner"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Enter target (IP or domain)..."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Start Scan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"scan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"color"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"#00d4aa"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"height"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"scan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Please enter a target"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"[+] Scanning: "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"[+] Checking common ports..."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="n"&gt;ports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;445&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3306&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3389&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5432&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8443&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ports&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;hasPort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"  ✓ Port "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;" is OPEN"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"  ✗ Port "&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;--&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;" is closed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="n"&gt;GUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;[+] Scan complete!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Build
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows executable&lt;/span&gt;
spectator build scanner.str to PortScanner.exe &lt;span class="k"&gt;for &lt;/span&gt;windows

&lt;span class="c"&gt;# Linux binary&lt;/span&gt;
spectator build scanner.str to portscanner &lt;span class="k"&gt;for &lt;/span&gt;linux

&lt;span class="c"&gt;# macOS (Intel)&lt;/span&gt;
spectator build scanner.str to PortScanner &lt;span class="k"&gt;for &lt;/span&gt;mac
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your users don't need Spectator installed. The binary is completely self-contained.&lt;/p&gt;

&lt;p&gt;*GUI available only for windows.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Built-in Modules That Shine
&lt;/h1&gt;

&lt;p&gt;After playing with Spectator, here are the modules I found most useful:&lt;/p&gt;

&lt;h2&gt;
  
  
  Recon
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;ips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"target.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;whois&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WHOIs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"target.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;geo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GeoIP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"8.8.8.8"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;subs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SubdomainEnum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"target.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"wordlist.txt"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Web Testing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HeaderAudit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://target.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tech&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TechDetect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://target.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sqli_test&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SQLiTest&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://target.com/page?id=1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mission Reporting
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;missionStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Web App Pentest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"target.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;missionStage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Recon"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;missionFind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"HIGH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Missing CSP header"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"XSS possible"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;missionFind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"CRITICAL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"SQLi in login form"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Auth bypass"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;missionEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;missionReport&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"pentest_report.html"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  The Package Manager: Space
&lt;/h1&gt;

&lt;p&gt;Installing community libraries is straightforward and secure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="n"&gt;spectator&lt;/span&gt; &lt;span class="n"&gt;space&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;ghost&lt;/span&gt;

&lt;span class="n"&gt;spectator&lt;/span&gt; &lt;span class="n"&gt;space&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt; &lt;span class="n"&gt;ghost&lt;/span&gt;

&lt;span class="cp"&gt;#Import ghost
&lt;/span&gt;&lt;span class="n"&gt;ghost_full&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"target.com"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Full&lt;/span&gt; &lt;span class="n"&gt;OSINT&lt;/span&gt; &lt;span class="n"&gt;sweep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Who Is This For?
&lt;/h1&gt;

&lt;p&gt;Penetration testers who want to automate repetitive tasks without fighting tooling.&lt;/p&gt;

&lt;p&gt;Red teamers who need quick, reliable scripts that work everywhere (thanks to standalone binaries).&lt;/p&gt;

&lt;p&gt;Bug bounty hunters who want to build custom scanners without dependency hell.&lt;/p&gt;

&lt;p&gt;Security researchers who need to prototype attack techniques rapidly.&lt;/p&gt;

&lt;p&gt;Tool builders who want to distribute GUI security tools without Electron bloat.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting Started Today
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Download&lt;/span&gt;
wget https://github.com/CzaxStudio/Spectator/releases/latest/download/spectator-linux
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x spectator-linux

&lt;span class="c"&gt;# 2. Run REPL&lt;/span&gt;
./spectator-linux repl

&lt;span class="c"&gt;# 3. Try hello world&lt;/span&gt;
Trace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Hello, Spectator!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# 4. Install a library&lt;/span&gt;
./spectator-linux space get coffee

&lt;span class="c"&gt;# 5. Build something&lt;/span&gt;
./spectator-linux build mytool.str to scanner
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Documentation: spectatorlang.pages.dev&lt;br&gt;
GitHub: github.com/CzaxStudio/Spectator&lt;br&gt;
Examples: Check the examples/ directory in the repo&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Is Spectator going to replace Python for security work? Not tomorrow. But it's solving real problems that Python has ignored for years — dependency management, cross-platform GUI apps, and built-in security primitives.&lt;/p&gt;

&lt;p&gt;For pentesters tired of the "pip install → version conflict → break everything" cycle, Spectator is a breath of fresh air. And at 7 stars on GitHub (as of writing), you can get in on the ground floor.&lt;/p&gt;

&lt;p&gt;Try it on your next CTF or internal tool. You might be surprised how fast you can go from idea to working executable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks
&lt;/h2&gt;

&lt;p&gt;What tools would you build with a language like this? Drop a comment below!&lt;/p&gt;

&lt;p&gt;Follow for more: I'll be posting Spectator tutorials, security tools, and red team automation scripts in the coming weeks.&lt;/p&gt;

&lt;p&gt;Spectator v2.0.0 — "See Everything. Miss Nothing."&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>go</category>
      <category>spectator</category>
      <category>programming</category>
    </item>
    <item>
      <title>Introducing Mamba: A Powerful Python OSINT Library for Security Researchers</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Wed, 29 Apr 2026 05:09:08 +0000</pubDate>
      <link>https://dev.to/czax225/introducing-mamba-a-powerful-python-osint-library-for-security-researchers-1fa6</link>
      <guid>https://dev.to/czax225/introducing-mamba-a-powerful-python-osint-library-for-security-researchers-1fa6</guid>
      <description>&lt;p&gt;What is Mamba?&lt;br&gt;
Mamba is a production-ready OSINT (Open Source Intelligence) library that makes security research and reconnaissance simple in Python. With just a few lines of code, you can investigate emails, domains, usernames, phone numbers, and IP addresses.&lt;/p&gt;

&lt;p&gt;GitHub: CzaxStudio/Mamba&lt;br&gt;
PyPI: pip install mamba-security&lt;/p&gt;

&lt;p&gt;Why I Built Mamba&lt;br&gt;
As a security researcher, I found myself writing the same code repeatedly for OSINT investigations. Each project needed:&lt;/p&gt;

&lt;p&gt;Email breach checking&lt;/p&gt;

&lt;p&gt;WHOIS lookups&lt;/p&gt;

&lt;p&gt;Username enumeration&lt;/p&gt;

&lt;p&gt;Phone validation&lt;/p&gt;

&lt;p&gt;IP geolocation&lt;/p&gt;

&lt;p&gt;I built Mamba to solve this. It's designed to be:&lt;/p&gt;

&lt;p&gt;Easy to use - One line of code for complex OSINT tasks&lt;/p&gt;

&lt;p&gt;Production ready - Rate limiting, caching, and error handling built-in&lt;/p&gt;

&lt;p&gt;Well tested - Comprehensive test suite&lt;/p&gt;

&lt;p&gt;Industry standard - Type hints, proper documentation&lt;/p&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mamba&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MambaClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;EmailReputation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DomainIntel&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;MambaClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Check email
&lt;/span&gt;    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;EmailReputation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate_format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Valid email: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;valid_format&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Domain WHOIS
&lt;/span&gt;    &lt;span class="n"&gt;domain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DomainIntel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;whois_lookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Registrar: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;registrar&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Requirements&lt;br&gt;
Python 3.8+&lt;/p&gt;

&lt;p&gt;Internet connection for API calls&lt;/p&gt;

&lt;h1&gt;
  
  
  Documentation &amp;amp; Learning
&lt;/h1&gt;

&lt;p&gt;Complete Mamba Documentation: GitHub - MambaDocumentation&lt;/p&gt;

&lt;p&gt;The documentation repository includes:&lt;/p&gt;

&lt;p&gt;Step-by-step tutorials&lt;/p&gt;

&lt;p&gt;Complete API reference&lt;/p&gt;

&lt;p&gt;Real-world examples&lt;/p&gt;

&lt;p&gt;Best practices for OSINT&lt;/p&gt;

&lt;p&gt;Roadmap&lt;br&gt;
Add more breach databases&lt;/p&gt;

&lt;p&gt;Support for Dark Web monitoring&lt;/p&gt;

&lt;p&gt;Social media API integration&lt;/p&gt;

&lt;p&gt;Machine learning for threat detection&lt;/p&gt;

&lt;p&gt;Plugin system for custom sources&lt;/p&gt;

&lt;p&gt;Contributing&lt;br&gt;
Contributions are welcome! Open issues, submit PRs, or suggest features.&lt;/p&gt;

&lt;p&gt;License&lt;br&gt;
MIT License - Free for commercial and personal use&lt;/p&gt;

&lt;p&gt;Connect With Me&lt;br&gt;
GitHub: CzaxStudio&lt;/p&gt;

&lt;p&gt;Star the Repo ⭐&lt;br&gt;
If Mamba helps you, please star the repository on GitHub. It helps others discover the project!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CzaxStudio/Mamba" rel="noopener noreferrer"&gt;https://github.com/CzaxStudio/Mamba&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy OSINT investigations!&lt;/p&gt;

</description>
      <category>python</category>
      <category>osint</category>
      <category>cybersecurity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a lightweight IDE for Nim — focused, fast, and simple</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Thu, 23 Apr 2026 08:36:44 +0000</pubDate>
      <link>https://dev.to/czax225/i-built-a-lightweight-ide-for-zig-focused-fast-and-simple-40m7</link>
      <guid>https://dev.to/czax225/i-built-a-lightweight-ide-for-zig-focused-fast-and-simple-40m7</guid>
      <description>&lt;p&gt;Most Nim developers today use tools like Visual Studio Code with extensions.&lt;/p&gt;

&lt;p&gt;It works — but I kept wondering:&lt;/p&gt;

&lt;p&gt;What would a Nim-first IDE feel like if it was designed around simplicity and speed?&lt;/p&gt;

&lt;p&gt;So I built one.&lt;/p&gt;

&lt;p&gt;Ferrum Studio.&lt;/p&gt;

&lt;p&gt;Why I built this&lt;/p&gt;

&lt;p&gt;While learning and working with Nim, I noticed the workflow often feels adapted rather than designed for the language.&lt;/p&gt;

&lt;p&gt;You install an editor, configure extensions, tweak settings… and eventually it works.&lt;/p&gt;

&lt;p&gt;But I wanted something simpler:&lt;/p&gt;

&lt;p&gt;Open a Nim file&lt;br&gt;
Press run&lt;br&gt;
See output immediately&lt;/p&gt;

&lt;p&gt;No friction. No setup overhead.&lt;/p&gt;

&lt;p&gt;What Ferrum Studio does&lt;/p&gt;

&lt;p&gt;Ferrum Studio is a lightweight IDE focused specifically on Nim.&lt;/p&gt;

&lt;p&gt;A few things upfront:&lt;/p&gt;

&lt;p&gt;Built with Go + Wails (uses a system webview — no bundled Chromium)&lt;br&gt;
Frontend parts were built with help from AI tools (I’m still learning JavaScript)&lt;br&gt;
Backend, Nim integration, and overall structure are written by me&lt;br&gt;
Features (current)&lt;br&gt;
Run Nim files with live output&lt;br&gt;
Build (nim build), test, and ast-check integration&lt;br&gt;
Inline error display with simplified explanations&lt;br&gt;
Basic autocomplete and snippets&lt;br&gt;
Project templates (CLI, library, TCP server, embedded)&lt;br&gt;
Integrated terminal with stdin support&lt;br&gt;
Nim auto-detection&lt;br&gt;
The main goal: a smooth workflow&lt;/p&gt;

&lt;p&gt;The focus is on making this loop fast and simple:&lt;/p&gt;

&lt;p&gt;open → run → see output → interact → fix errors&lt;/p&gt;

&lt;p&gt;Handling things like:&lt;/p&gt;

&lt;p&gt;real-time output streaming&lt;br&gt;
stdin interaction&lt;br&gt;
process control&lt;/p&gt;

&lt;p&gt;…took more work than expected, but this is the part I’m most proud of.&lt;/p&gt;

&lt;p&gt;Who should use this (right now)&lt;/p&gt;

&lt;p&gt;Ferrum Studio is still early, but it’s already useful for:&lt;/p&gt;

&lt;p&gt;Developers learning Nim who want a simple environment&lt;br&gt;
People who prefer lightweight tools over heavier setups&lt;br&gt;
Anyone who wants a fast “open → run → test” workflow&lt;/p&gt;

&lt;p&gt;If you rely heavily on advanced IDE features (full LSP, deep refactoring, debugging), tools like Visual Studio Code are still better today.&lt;/p&gt;

&lt;p&gt;But if you want a focused, minimal Nim workflow — this already works well.&lt;/p&gt;

&lt;p&gt;What I learned&lt;/p&gt;

&lt;p&gt;This project taught me a lot:&lt;/p&gt;

&lt;p&gt;How Nim tooling works in practice (run, build, test, ast-check)&lt;br&gt;
Managing subprocesses and terminal interaction&lt;br&gt;
Designing an editor around a single language&lt;br&gt;
Using AI tools effectively for parts I’m less experienced in&lt;br&gt;
What’s next&lt;br&gt;
Deciding between lightweight autocomplete vs full LSP (ZLS)&lt;br&gt;
Improving error explanations&lt;br&gt;
Exploring debugging support&lt;br&gt;
Cleaning up and improving the codebase&lt;br&gt;
Feedback?&lt;/p&gt;

&lt;p&gt;I’d really appreciate input:&lt;/p&gt;

&lt;p&gt;What do you expect from a Nim-focused IDE?&lt;br&gt;
What slows you down in your current workflow?&lt;br&gt;
What would make this genuinely useful for you?&lt;br&gt;
Project&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/CzaxStudio/Ferrum-Studio" rel="noopener noreferrer"&gt;https://github.com/CzaxStudio/Ferrum-Studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Final thoughts&lt;/p&gt;

&lt;p&gt;This started as an experiment — but it’s already shaping how I think about developer tools.&lt;/p&gt;

&lt;p&gt;Simple, fast, and focused.&lt;/p&gt;

&lt;p&gt;Thanks for reading 🙂&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ide</category>
      <category>nim</category>
    </item>
    <item>
      <title>Spectator - A programming language for cybersecurity(GUI, CLI, TUI built in)</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Sat, 04 Apr 2026 06:51:30 +0000</pubDate>
      <link>https://dev.to/czax225/spectator-a-programming-language-for-cybersecuritygui-cli-tui-built-in-1moe</link>
      <guid>https://dev.to/czax225/spectator-a-programming-language-for-cybersecuritygui-cli-tui-built-in-1moe</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbaebplzipyfxb87hicw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbaebplzipyfxb87hicw.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Spectator — A Cybersecurity Language That Actually Gets Work Done
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;███████╗██████╗ ███████╗ ██████╗████████╗ █████╗ ████████╗ ██████╗ ██████╗
██╔════╝██╔══██╗██╔════╝██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗
███████╗██████╔╝█████╗  ██║        ██║   ███████║   ██║   ██║   ██║██████╔╝
╚════██║██╔═══╝ ██╔══╝  ██║        ██║   ██╔══██║   ██║   ██║   ██║██╔══██╗
███████║██║     ███████╗╚██████╗   ██║   ██║  ██║   ██║   ╚██████╔╝██║  ██║
╚══════╝╚═╝     ╚══════╝ ╚═════╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝    ╚═════╝ ╚═╝  ╚═╝
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;See Everything. Miss Nothing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What if your entire cybersecurity workflow lived inside one language?&lt;/p&gt;

&lt;p&gt;No switching between Python, Bash, and dozens of disconnected tools.&lt;br&gt;
No glue scripts. No messy pipelines.&lt;/p&gt;

&lt;p&gt;Just one clean, purpose-built system.&lt;/p&gt;

&lt;p&gt;That’s Spectator.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Modern security workflows are fragmented by design.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python for scripting&lt;/li&gt;
&lt;li&gt;Bash for automation&lt;/li&gt;
&lt;li&gt;Standalone tools for scanning and fuzzing&lt;/li&gt;
&lt;li&gt;Separate stacks for GUI tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything works — but nothing works together.&lt;/p&gt;

&lt;p&gt;You spend more time connecting tools than actually testing systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Idea Behind Spectator
&lt;/h2&gt;

&lt;p&gt;Spectator is a cybersecurity-first scripting language designed to unify your workflow.&lt;/p&gt;

&lt;p&gt;It combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple, readable syntax&lt;/li&gt;
&lt;li&gt;Built-in security modules&lt;/li&gt;
&lt;li&gt;Native GUI framework&lt;/li&gt;
&lt;li&gt;Integrated package manager&lt;/li&gt;
&lt;li&gt;Standalone binary compilation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All inside a single runtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  Recon in 5 Lines
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;target = "scanme.nmap.org"
ips = resolve(target)
Trace("IPs: " --&amp;gt; join(ips, ", "))
do --&amp;gt; PortScan(target, 1, 1024)
do --&amp;gt; SSLInfo(target)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No imports. No external dependencies. No setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build a Real GUI Tool
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Import Spec.GUI

open.window({"title": "Ghost Recon", "bg": "#070b14", "accent": "#00d4aa"})
GUI.input("target", "Enter target...")
GUI.button("Scan", "run", {"color": "#00d4aa"})
GUI.output("out", {"height": 400})

GUI.on("run", func() {
  t = GUI.get("target")
  ips = resolve(t)
  each ip : ips {
    GUI.print("out", "IP: " --&amp;gt; ip)
  }
})
end()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Electron. No web stack. No Python GUI frameworks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built-in Security Modules
&lt;/h2&gt;

&lt;p&gt;Spectator includes native support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recon: PortScan, DNSLookup, CIDRScan&lt;/li&gt;
&lt;li&gt;OSINT: WHOIS, GeoIP, Subdomain Enumeration&lt;/li&gt;
&lt;li&gt;Web: HTTP probing, header analysis, SSL inspection&lt;/li&gt;
&lt;li&gt;Exploitation: SQLi, CORS, Open Redirect testing&lt;/li&gt;
&lt;li&gt;Fuzzing: Directory busting, URL fuzzing&lt;/li&gt;
&lt;li&gt;Payload generation for multiple attack vectors&lt;/li&gt;
&lt;li&gt;Encoding, hashing, and cryptographic utilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is directly accessible from the language.&lt;/p&gt;




&lt;h2&gt;
  
  
  HTTP Engine Included
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resp = http("GET", "https://target.com", {"timeout": 5000})
Trace(httpStatus(resp))
Trace(extractTitle(httpBody(resp)))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No external libraries required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Mission Engine for Structured Testing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;m = missionStart("Web App Pentest", "target.com")

missionStage(m, "Recon")
missionFind(m, "CRITICAL", ".env exposed", "Credentials leaked")

missionEnd(m)
missionReport(m, "report.html")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate structured reports automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Space Package Manager
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spectator space get coffee
spectator space verify coffee
spectator space registry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All packages are SHA-256 verified by default.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Standalone Tools
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spectator build tool.str to Tool.exe for windows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No runtime required for end users.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Spectator Exists
&lt;/h2&gt;

&lt;p&gt;Because cybersecurity tooling is unnecessarily complex.&lt;/p&gt;

&lt;p&gt;Because developers keep rebuilding the same pipelines.&lt;/p&gt;

&lt;p&gt;Because switching between tools breaks flow.&lt;/p&gt;

&lt;p&gt;Spectator removes that friction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Website: &lt;a href="https://spectatorlang.pages.dev/" rel="noopener noreferrer"&gt;https://spectatorlang.pages.dev/&lt;/a&gt;&lt;br&gt;
Documentation: &lt;a href="https://github.com/CzaxStudio/SpectatorDocs/" rel="noopener noreferrer"&gt;https://github.com/CzaxStudio/SpectatorDocs/&lt;/a&gt;&lt;br&gt;
Source: &lt;a href="https://github.com/CzaxStudio/Spectator" rel="noopener noreferrer"&gt;https://github.com/CzaxStudio/Spectator&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Spectator is not trying to replace existing tools.&lt;/p&gt;

&lt;p&gt;It is trying to replace the need to glue them together.&lt;/p&gt;

&lt;p&gt;If you build tools, automate testing, or work in offensive security — this is for you.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>cybersecurity</category>
      <category>opensource</category>
      <category>go</category>
    </item>
    <item>
      <title>I Built a Cybersecurity-Only Programming Language (So You Don’t Need 200 Lines of Python)</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Sat, 03 Jan 2026 05:54:23 +0000</pubDate>
      <link>https://dev.to/czax225/i-built-a-cybersecurity-only-programming-language-so-you-dont-need-200-lines-of-python-1ime</link>
      <guid>https://dev.to/czax225/i-built-a-cybersecurity-only-programming-language-so-you-dont-need-200-lines-of-python-1ime</guid>
      <description>&lt;p&gt;Cybersecurity scripting today mostly relies on general-purpose languages like Python, Bash, or Go.&lt;/p&gt;

&lt;p&gt;They work — but they come with problems:&lt;/p&gt;

&lt;p&gt;Too many libraries&lt;/p&gt;

&lt;p&gt;Long scripts for simple tasks&lt;/p&gt;

&lt;p&gt;Environment setup issues&lt;/p&gt;

&lt;p&gt;Slower execution for small utilities&lt;/p&gt;

&lt;p&gt;So I asked a simple question:&lt;/p&gt;

&lt;p&gt;Why isn’t there a programming language made only for cybersecurity?&lt;/p&gt;

&lt;p&gt;That’s how Cyber+ was born.&lt;/p&gt;

&lt;p&gt;What is Cyber+?&lt;/p&gt;

&lt;p&gt;Cyber+ is a domain-specific programming language (DSL) built exclusively for cybersecurity tasks.&lt;/p&gt;

&lt;p&gt;It is not a replacement for Python or Go.&lt;br&gt;
It is a workflow language for security operations.&lt;/p&gt;

&lt;p&gt;Instead of writing long scripts and importing heavy libraries, Cyber+ provides built-in security commands.&lt;/p&gt;

&lt;p&gt;And because it’s implemented in Go, it’s fast and distributed as a single binary.&lt;/p&gt;

&lt;p&gt;The Problem with Current Approaches&lt;/p&gt;

&lt;p&gt;Let’s take a very common task: hashing.&lt;/p&gt;

&lt;p&gt;Python&lt;br&gt;
import hashlib&lt;/p&gt;

&lt;p&gt;data = "password".encode()&lt;br&gt;
hash_value = hashlib.sha256(data).hexdigest()&lt;br&gt;
print(hash_value)&lt;/p&gt;

&lt;p&gt;That’s fine — but this is a simple example.&lt;/p&gt;

&lt;p&gt;Now imagine:&lt;/p&gt;

&lt;p&gt;Encoding / decoding&lt;/p&gt;

&lt;p&gt;Password generation&lt;/p&gt;

&lt;p&gt;Port scanning&lt;/p&gt;

&lt;p&gt;File integrity checks&lt;/p&gt;

&lt;p&gt;Repetitive CTF automation&lt;/p&gt;

&lt;p&gt;Scripts quickly become long and repetitive.&lt;/p&gt;

&lt;p&gt;The Cyber+ Approach&lt;/p&gt;

&lt;p&gt;In Cyber+, the same task looks like this:&lt;/p&gt;

&lt;p&gt;Hash_Compute("password", "sha256")&lt;/p&gt;

&lt;p&gt;That’s it.&lt;/p&gt;

&lt;p&gt;No imports.&lt;br&gt;
No setup.&lt;br&gt;
No boilerplate.&lt;/p&gt;

&lt;p&gt;Why a DSL?&lt;/p&gt;

&lt;p&gt;Cybersecurity already uses DSLs successfully:&lt;/p&gt;

&lt;p&gt;SQL for databases&lt;/p&gt;

&lt;p&gt;Bash for automation&lt;/p&gt;

&lt;p&gt;YARA for malware detection&lt;/p&gt;

&lt;p&gt;Cyber+ follows the same idea:&lt;/p&gt;

&lt;p&gt;One language, one domain, maximum clarity.&lt;/p&gt;

&lt;p&gt;Each Cyber+ command directly represents a security action, not a programming construct.&lt;/p&gt;

&lt;p&gt;Core Design Goals&lt;/p&gt;

&lt;p&gt;Cyber+ is designed to be:&lt;/p&gt;

&lt;p&gt;Security-first (only cybersecurity features)&lt;/p&gt;

&lt;p&gt;Fast (Go-powered execution)&lt;/p&gt;

&lt;p&gt;Beginner-friendly&lt;/p&gt;

&lt;p&gt;Minimal syntax&lt;/p&gt;

&lt;p&gt;Single binary (no runtime hell)&lt;/p&gt;

&lt;p&gt;Who is Cyber+ For?&lt;/p&gt;

&lt;p&gt;Cyber+ is especially useful for:&lt;/p&gt;

&lt;p&gt;Cybersecurity students&lt;/p&gt;

&lt;p&gt;CTF players&lt;/p&gt;

&lt;p&gt;Security automation&lt;/p&gt;

&lt;p&gt;Learning-focused environments&lt;/p&gt;

&lt;p&gt;Quick scripting tasks&lt;/p&gt;

&lt;p&gt;It’s not meant to replace full frameworks — it’s meant to remove friction.&lt;/p&gt;

&lt;p&gt;Real Use Cases&lt;/p&gt;

&lt;p&gt;Automating CTF challenges&lt;/p&gt;

&lt;p&gt;Quick hashing / encoding utilities&lt;/p&gt;

&lt;p&gt;Password and wordlist operations&lt;/p&gt;

&lt;p&gt;Lightweight recon scripts&lt;/p&gt;

&lt;p&gt;Teaching cybersecurity fundamentals&lt;/p&gt;

&lt;p&gt;Why It’s Written in Go&lt;/p&gt;

&lt;p&gt;Using Go allows Cyber+ to:&lt;/p&gt;

&lt;p&gt;Run fast&lt;/p&gt;

&lt;p&gt;Compile to static binaries&lt;/p&gt;

&lt;p&gt;Avoid dependency issues&lt;/p&gt;

&lt;p&gt;Work across platforms easily&lt;/p&gt;

&lt;p&gt;This matters a lot in security workflows.&lt;/p&gt;

&lt;p&gt;Open Source &amp;amp; Early Stage&lt;/p&gt;

&lt;p&gt;Cyber+ is open source and still evolving.&lt;/p&gt;

&lt;p&gt;Feedback, ideas, and contributions are welcome — especially from:&lt;/p&gt;

&lt;p&gt;Security professionals&lt;/p&gt;

&lt;p&gt;Students&lt;/p&gt;

&lt;p&gt;Educators&lt;/p&gt;

&lt;p&gt;Tool builders&lt;/p&gt;

&lt;p&gt;GitHub&lt;/p&gt;

&lt;p&gt;Project repository:&lt;br&gt;
 &lt;a href="https://github.com/TanmayCzax/Cyber-Programming-language-Alpha" rel="noopener noreferrer"&gt;https://github.com/TanmayCzax/Cyber-Programming-language-Alpha&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Cyber+ isn’t trying to be the next Python.&lt;/p&gt;

&lt;p&gt;It’s trying to be something simpler:&lt;/p&gt;

&lt;p&gt;A language that lets you focus on cybersecurity, not code overhead.&lt;/p&gt;

&lt;p&gt;If you’ve ever thought “this script shouldn’t be this long” — Cyber+ might be for you.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>programming</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>I Built a Cybersecurity Programming Language in Go (Cyber+)</title>
      <dc:creator>Czax225</dc:creator>
      <pubDate>Fri, 19 Dec 2025 12:41:56 +0000</pubDate>
      <link>https://dev.to/czax225/i-built-a-cybersecurity-programming-language-in-go-cyber-1jdo</link>
      <guid>https://dev.to/czax225/i-built-a-cybersecurity-programming-language-in-go-cyber-1jdo</guid>
      <description>&lt;p&gt;I’m experimenting with a small domain-specific language for ethical cyber security tasks&lt;br&gt;
(recon, DNS, OSINT, HTTP inspection).&lt;/p&gt;

&lt;p&gt;The idea is to reduce reliance on Bash scripts and multiple tools&lt;br&gt;
by offering a minimal, command-based syntax.&lt;/p&gt;

&lt;p&gt;Example usage:&lt;br&gt;
Recon("example.com");&lt;br&gt;
Phone_Info("+91XXXXXXXXXX");&lt;br&gt;
Scan_Port("8.8.8.8", 53);&lt;/p&gt;

&lt;p&gt;I’m mainly looking for feedback on:&lt;br&gt;
• Syntax readability&lt;br&gt;
• Whether this feels more like a language or a wrapper&lt;br&gt;
• What features you’d expect in a security DSL&lt;/p&gt;

&lt;p&gt;Here is the repo link -- &lt;a href="https://github.com/TanmayCzax/Cyber-Programming-language" rel="noopener noreferrer"&gt;https://github.com/TanmayCzax/Cyber-Programming-language&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>discuss</category>
      <category>showdev</category>
      <category>go</category>
    </item>
  </channel>
</rss>
