<?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: Wahyu K. A.</title>
    <description>The latest articles on DEV Community by Wahyu K. A. (@aliftech).</description>
    <link>https://dev.to/aliftech</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1250115%2Ff3eaa957-7055-49e6-ae1b-26e8b5c1c67e.png</url>
      <title>DEV Community: Wahyu K. A.</title>
      <link>https://dev.to/aliftech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aliftech"/>
    <language>en</language>
    <item>
      <title>🔄 Introducing Galus: A Lightweight and Blazing-Fast Live Reload Tool for Go Developers</title>
      <dc:creator>Wahyu K. A.</dc:creator>
      <pubDate>Sat, 26 Jul 2025 09:49:45 +0000</pubDate>
      <link>https://dev.to/aliftech/introducing-galus-a-lightweight-and-blazing-fast-live-reload-tool-for-go-developers-1glg</link>
      <guid>https://dev.to/aliftech/introducing-galus-a-lightweight-and-blazing-fast-live-reload-tool-for-go-developers-1glg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;⚡ Sick of slow build times with Air or CompileDaemon? Meet Galus — your new best friend for rapid Go development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  👋 Hey, fellow Gophers!
&lt;/h2&gt;

&lt;p&gt;If you’ve built REST APIs in Go using frameworks like Gin, Chi, or Fiber, you probably rely on live reload tools to avoid rebuilding your server manually every time you save a file.&lt;/p&gt;

&lt;p&gt;The usual suspects?&lt;br&gt;
🧊 Air&lt;br&gt;
⚙️ CompileDaemon&lt;/p&gt;

&lt;p&gt;Both are awesome. I’ve used them extensively.&lt;br&gt;
But here's the catch — as my projects grew, so did the wait time.&lt;/p&gt;

&lt;p&gt;Every. Single. Save.&lt;/p&gt;

&lt;p&gt;I was spending more time waiting for builds than actually coding. And let’s be real — ain’t nobody got time for that.&lt;/p&gt;

&lt;p&gt;So I decided to build my own tool.&lt;br&gt;
And thus, Galus was born.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Why I Built Galus
&lt;/h2&gt;

&lt;p&gt;I hit that breaking point where I just wanted something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight 🪶&lt;/li&gt;
&lt;li&gt;Fast as hell ⚡&lt;/li&gt;
&lt;li&gt;Easy to set up 🛠️&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🌀 Galus = Golang Auto Live Update System&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔧 What Makes Galus Different?
&lt;/h2&gt;

&lt;p&gt;✅ No fuss setup — just run galus init and you're good to go.&lt;br&gt;
✅ Insanely fast builds — even on large, complex projects.&lt;br&gt;
✅ Automatic rebuild + restart — zero config watching.&lt;br&gt;
✅ Built with Go developers in mind — minimal overhead, no bloated features.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;br&gt;
&lt;strong&gt;Make your dev loop feel instant, again.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Getting Started
&lt;/h2&gt;

&lt;p&gt;Install Galus&lt;/p&gt;

&lt;p&gt;&lt;code&gt;go get github.com/aliftech/galus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install the binary to make galus available globally&lt;/p&gt;

&lt;p&gt;&lt;code&gt;go install github.com/aliftech/galus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Initialize in your project:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;galus init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;galus&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That’s it. Galus will handle the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  🗺️ Roadmap
&lt;/h2&gt;

&lt;p&gt;Galus is still early-stage, but I’ve got a roadmap full of features I’m actively working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🧪 Custom build commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🌈 Color-coded logs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🔀 Plugin support for advanced workflows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛡️ Better error handling &amp;amp; recovery&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to contribute?&lt;br&gt;
Jump in 👉 github.com/aliftech/galus&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 I Need Your Feedback!
&lt;/h2&gt;

&lt;p&gt;This is where you come in.&lt;/p&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have ever been frustrated with live reload tools...&lt;/li&gt;
&lt;li&gt;Want something faster, simpler, and more Go-centric...&lt;/li&gt;
&lt;li&gt;Like experimenting with new dev tools...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then please give &lt;strong&gt;Galus&lt;/strong&gt; a spin and let me know what you think.&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 Let’s Chat
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What live reload tool do you use today — and why?&lt;/li&gt;
&lt;li&gt;What feature is absolutely essential in your dev workflow?&lt;/li&gt;
&lt;li&gt;Have you tried Galus? How was it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hit me up in the comments or on GitHub — I’d love to collaborate with fellow Gophers.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 If You Like It, Star It!
&lt;/h2&gt;

&lt;p&gt;If Galus helps you, even just a little, consider giving it a ⭐ on GitHub. It helps a ton!&lt;/p&gt;

&lt;p&gt;👉 github.com/aliftech/galus&lt;/p&gt;

&lt;p&gt;Let’s make Go dev faster, together. 💪&lt;/p&gt;

</description>
      <category>go</category>
      <category>api</category>
      <category>devtool</category>
    </item>
    <item>
      <title>Jin: A Passive OSINT &amp; Recon CLI Toolkit Built with Go</title>
      <dc:creator>Wahyu K. A.</dc:creator>
      <pubDate>Sat, 22 Jun 2024 14:32:25 +0000</pubDate>
      <link>https://dev.to/aliftech/jin-a-light-weight-hacking-tool-project-3hkc</link>
      <guid>https://dev.to/aliftech/jin-a-light-weight-hacking-tool-project-3hkc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This article describes a tool intended for ethical, educational, and authorized security work. Only use it against targets you own or have explicit permission to test. Unauthorized scanning is illegal in most jurisdictions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you start a security assessment — bug bounty, penetration test, or even just hardening your own infrastructure — the first thing you reach for is &lt;strong&gt;reconnaissance&lt;/strong&gt;. You want answers to questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is this server actually running?&lt;/li&gt;
&lt;li&gt;Which ports are exposed to the internet?&lt;/li&gt;
&lt;li&gt;Is that WordPress install behind a CDN? Which framework is it using?&lt;/li&gt;
&lt;li&gt;Are there subdomains I don't know about?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many tools that answer each of these questions. But most of them are heavyweight, require lots of setup, or spread the answers across multiple utilities with different output formats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/sapiuwu/jin" rel="noopener noreferrer"&gt;Jin&lt;/a&gt;&lt;/strong&gt; is a single Go binary that answers all of them — with a friendly interactive shell, clean human-readable output, and JSON mode for scripting. Let me show you what it does and why I think it earns a spot in your toolkit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Jin?
&lt;/h2&gt;

&lt;p&gt;Jin (&lt;strong&gt;J&lt;/strong&gt;ust &lt;strong&gt;I&lt;/strong&gt;ntelligence &lt;strong&gt;N&lt;/strong&gt;etwork) is an open-source, passive-first OSINT and reconnaissance CLI toolkit. It's an evolution of a Python project that focused on ethical port scanning, rewritten in Go and redesigned around a clean, testable architecture.&lt;/p&gt;

&lt;p&gt;The current version ships three commands, all usable interactively or as one-shot commands:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full server reconnaissance: headers, TLS, cloud provider, plus an automated &lt;strong&gt;security score&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ports&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TCP connect scan for open ports, with service detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tech-stack&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fingerprints the tech stack (CMS, frameworks, CDN, WAF...) with confidence levels and evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tech-stack --subdomains&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Also discovers subdomains from certificate transparency logs and pulls DNS records&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every command has a &lt;code&gt;--json&lt;/code&gt; flag for structured output, so you can pipe results into other tools or CI pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Go?
&lt;/h2&gt;

&lt;p&gt;The original version of Jin was written in Python. The rewrite in Go brings some serious quality-of-life improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One static binary&lt;/strong&gt; — no runtime, no virtualenv, no dependency headaches. Copy it to a box and it works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast startup&lt;/strong&gt; — a scan kicks off in milliseconds, which matters a lot in an interactive REPL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goroutines&lt;/strong&gt; for concurrency — subdomain discovery and fingerprinting run in parallel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small container footprint&lt;/strong&gt; — the Docker image is Alpine-based and statically linked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean architecture&lt;/strong&gt; — the codebase uses hexagonal (ports &amp;amp; adapters) design, which makes the tool easy to extend with new scanners without touching the domain logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The three commands
&lt;/h2&gt;

&lt;p&gt;Let's walk through each command with real output shapes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;info&lt;/code&gt; — full server reconnaissance
&lt;/h3&gt;

&lt;p&gt;Point Jin at any URL and it fetches the response, extracts the interesting headers, detects the cloud provider, and — my favorite part — produces a &lt;strong&gt;weighted security report&lt;/strong&gt; with a letter grade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🌐 URL:          https://example.com
🗃️  Base Domain:  example.com
☁️  Cloud:        Cloudflare
✅ Status:       200
🖥️  Server:      cloudflare
📄 Content-Type: text/html; charset=UTF-8
⏱️  Scan Time:   423ms

🔒 TLS Version:  TLS 1.3
🔐 Cipher Suite: TLS_AES_128_GCM_SHA256

🛡️  Security Insights: B+ (82/100)
  ✅ TLS:                       Serving over TLS 1.3
  ⚠️  HSTS:                     Missing Strict-Transport-Security header
  ✅ Content-Security-Policy:   Policy enforced
  ✅ X-Frame-Options:           Clickjacking protection enforced
  ✅ X-Content-Type-Options:    nosniff set
  ✅ Referrer-Policy:           Set to strict-origin-when-cross-origin
  ℹ️  Permissions-Policy:        Not set
  ✅ Cookie Flags:              No obvious cookie issues
  ✅ CORS:                      Restricted to: https://app.example.com
  ✅ Version Disclosure:        No version numbers exposed in Server/X-Powered-By

📋 Headers:
  cache-control:       max-age=0, private, must-revalidate
  content-encoding:    br
  content-security-policy: default-src 'self'; ...
  set-cookie:          __cf_bm=&amp;lt;redacted&amp;gt; [Secure, HttpOnly, SameSite=None]
  ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The security checks cover the OWASP-relevant quick wins: TLS, HSTS, Content-Security-Policy (including a linter that flags &lt;code&gt;unsafe-inline&lt;/code&gt;, &lt;code&gt;unsafe-eval&lt;/code&gt;, and overly broad sources), X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy, cookie flags (Secure / HttpOnly / SameSite), CORS misconfigurations (like &lt;code&gt;*&lt;/code&gt; combined with &lt;code&gt;credentials=true&lt;/code&gt;), and version disclosure in headers.&lt;/p&gt;

&lt;p&gt;Each check has a weight, so the final score is a genuine 0–100 weighted grade (A+ down to F) — not just a checklist. Notice the &lt;code&gt;set-cookie&lt;/code&gt; header above: cookie &lt;strong&gt;values are redacted&lt;/strong&gt; in output while security-relevant attributes are preserved, because you don't want to leak a real session token into a report.&lt;/p&gt;

&lt;p&gt;You can also run &lt;code&gt;jin https://example.com&lt;/code&gt; directly — a bare URL is treated as an &lt;code&gt;info&lt;/code&gt; scan.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;ports&lt;/code&gt; — TCP connect scan
&lt;/h3&gt;

&lt;p&gt;Jin scans a curated default list of common services, or your own:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔍 Open ports:
  22/ssh
  80/http
  443/https
  5432/postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jin ports -t example.com -p 80,443,8080,8443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default ports include FTP, SSH, SMTP, DNS, HTTP(S), mail, MySQL, PostgreSQL, Redis, and MongoDB — and you can pass a comma-separated custom list with &lt;code&gt;-p&lt;/code&gt;. Each port is mapped to its service name, and output is clean enough to grep or script against.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;tech-stack&lt;/code&gt; — fingerprinting, subdomains &amp;amp; DNS
&lt;/h3&gt;

&lt;p&gt;This is the most fun one. Jin fingerprints a target across &lt;strong&gt;13 categories&lt;/strong&gt; — CMS, web server, backend runtime, programming language, web framework, JS framework, JS library, CSS framework, WAF/reverse proxy, analytics, CDN, security, and other:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🧩 Stack:  WordPress, Nginx, PHP, jQuery, Cloudflare
⏱️  Scan Time: 1.2s

▸ CMS
  WordPress (6.5.2)          High (80%)
    • Meta tag: generator=WordPress 6.5.2
▸ Web Server
  Nginx                      Very High (97%)
    • Header: Server: nginx
▸ Programming Language
  PHP                        High (80%)
    • Header: X-Powered-By: PHP/8.2.9
▸ JavaScript Library
  jQuery (3.7.1)             High (80%)
    • Markup: jquery-3.7.1.min.js
▸ WAF / Reverse Proxy
  Cloudflare                 Very High (97%)
    • Header: Server: cloudflare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every detection comes with a &lt;strong&gt;confidence level&lt;/strong&gt; and the &lt;strong&gt;evidence&lt;/strong&gt; that produced it — the actual header value, meta tag, cookie, or script path. No black box.&lt;/p&gt;

&lt;p&gt;Run it with &lt;code&gt;--subdomains&lt;/code&gt; (or &lt;code&gt;-s&lt;/code&gt;) and Jin goes deeper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jin tech-stack -t example.com --subdomains
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subdomain discovery&lt;/strong&gt; queries &lt;a href="https://crt.sh" rel="noopener noreferrer"&gt;crt.sh&lt;/a&gt;, the public certificate transparency log. This is a &lt;em&gt;purely passive&lt;/em&gt; technique — it reads public certificate data and never sends a single packet to the target, so there's no scanning footprint.&lt;/li&gt;
&lt;li&gt;Each discovered subdomain is probed and &lt;strong&gt;fingerprinted independently&lt;/strong&gt;, so you get a map of the whole attack surface: &lt;code&gt;blog.example.com&lt;/code&gt; runs WordPress, &lt;code&gt;api.example.com&lt;/code&gt; runs Express, &lt;code&gt;mail.example.com&lt;/code&gt; is unreachable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS records&lt;/strong&gt; (nameservers, MX, TXT) are pulled with the Go standard library, which is great for spotting SPF/DKIM/DMARC posture and hosting infrastructure at a glance:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🗂️  DNS Records:
  Nameservers: ns1.cloudflare.com, ns2.cloudflare.com
  MX Records:  aspmx.l.google.com, ...
  TXT Records:
    • v=spf1 include:_spf.google.com ~all
    • google-site-verification=...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The interactive REPL
&lt;/h2&gt;

&lt;p&gt;Running &lt;code&gt;jin&lt;/code&gt; with no arguments drops you into a proper REPL — not a crude loop, but a real &lt;code&gt;readline&lt;/code&gt; shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;jin
&lt;/span&gt;&lt;span class="gp"&gt;jin&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;https://example.com
&lt;span class="gp"&gt;jin&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ports &lt;span class="nt"&gt;-t&lt;/span&gt; example.com &lt;span class="nt"&gt;-p&lt;/span&gt; 80,443
&lt;span class="gp"&gt;jin&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;tech-stack &lt;span class="nt"&gt;-t&lt;/span&gt; example.com &lt;span class="nt"&gt;--subdomains&lt;/span&gt;
&lt;span class="gp"&gt;jin&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nice touches that make it genuinely usable for research sessions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tab completion&lt;/strong&gt; for all commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Command history&lt;/strong&gt; persisted to &lt;code&gt;~/.jin_history&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Up/Down arrow&lt;/strong&gt; to recall previous commands.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ctrl+C&lt;/strong&gt; aborts the in-flight scan &lt;em&gt;and&lt;/em&gt; exits cleanly; &lt;code&gt;exit&lt;/code&gt;/&lt;code&gt;quit&lt;/code&gt;/&lt;code&gt;Ctrl+D&lt;/code&gt; (EOF) also work.&lt;/li&gt;
&lt;li&gt;Even a &lt;strong&gt;plain line reader fallback&lt;/strong&gt; when stdin isn't a TTY.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One-shot usage still works exactly as before, which keeps Docker and scripting happy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jin ports &lt;span class="nt"&gt;-t&lt;/span&gt; example.com
jin tech-stack &lt;span class="nt"&gt;-t&lt;/span&gt; example.com &lt;span class="nt"&gt;--subdomains&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt; | jq &lt;span class="s1"&gt;'.categories'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  JSON output for automation
&lt;/h2&gt;

&lt;p&gt;Every command accepts &lt;code&gt;--json&lt;/code&gt;. The output is a stable, well-shaped document designed for parsing — with &lt;code&gt;scanned_at&lt;/code&gt;, &lt;code&gt;duration_ms&lt;/code&gt;, and machine-friendly fields. For example, the tech-stack JSON groups detections by category and includes per-technology evidence and confidence scores, plus the subdomain and DNS sections when requested.&lt;/p&gt;

&lt;p&gt;This makes Jin easy to slot into recon pipelines, dashboards, or internal asset-discovery tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  From source
&lt;/h3&gt;

&lt;p&gt;Requires Go 1.25+:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/sapiuwu/jin.git
&lt;span class="nb"&gt;cd &lt;/span&gt;jin
go build &lt;span class="nt"&gt;-o&lt;/span&gt; jin ./cmd/
./jin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  With Docker
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull wahyouka/jin:v2.3.0

&lt;span class="c"&gt;# interactive REPL&lt;/span&gt;
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--entrypoint&lt;/span&gt; jin wahyouka/jin:v2.3.0

&lt;span class="c"&gt;# one-shot&lt;/span&gt;
docker run &lt;span class="nt"&gt;-it&lt;/span&gt; wahyouka/jin:v2.3.0 tech-stack &lt;span class="nt"&gt;-t&lt;/span&gt; example.com &lt;span class="nt"&gt;--subdomains&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The image is a static, Alpine-based build with CA certificates and timezone data baked in.&lt;/p&gt;

&lt;h2&gt;
  
  
  A peek under the hood
&lt;/h2&gt;

&lt;p&gt;If you're the kind of person who reads the source before trusting a security tool (you should be), Jin won't disappoint. It's organized as a textbook &lt;strong&gt;hexagonal architecture&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd/          → composition root (main.go)
internal/
  domain/     → pure domain models, no dependencies
  port/       → driving ports (services) &amp;amp; driven ports (scanners)
  application/→ use-case services (scan orchestration, security scoring)
  adapter/
    in/cli/   → CLI + REPL, argument parsing, rendering
    out/scanner/ → HTTP scanner, TCP port scanner, CT-log enumerator, DNS lookup
  config/     → centralized timeouts &amp;amp; tuning knobs
  container/  → dependency wiring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each scanner is an &lt;em&gt;out adapter&lt;/em&gt; implementing a &lt;em&gt;driven port&lt;/em&gt;, and the CLI is the &lt;em&gt;in adapter&lt;/em&gt; talking to &lt;em&gt;driving ports&lt;/em&gt;. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding a new detection signature is a self-contained change.&lt;/li&gt;
&lt;li&gt;Swapping &lt;code&gt;crt.sh&lt;/code&gt; for another CT log source doesn't touch application code.&lt;/li&gt;
&lt;li&gt;The rendering layer is fully decoupled from the scanning layer.&lt;/li&gt;
&lt;li&gt;Everything is testable with fake adapters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When would you actually use this?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bug bounty / pentest recon&lt;/strong&gt; — map the attack surface before touching a target: what runs, where, on which ports, and which subdomains exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Own-infrastructure hygiene&lt;/strong&gt; — run &lt;code&gt;info&lt;/code&gt; against your own sites and fix the "free wins": missing HSTS, missing CSP, cookie flags, CORS misconfigs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive intel (legally)&lt;/strong&gt; — a quick fingerprint of public-facing stacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning security&lt;/strong&gt; — watching the &lt;em&gt;evidence&lt;/em&gt; lines is a great way to learn how fingerprinting actually works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rapid triage&lt;/strong&gt; — one binary, one command, one screen, instead of assembling nmap + whatweb + dnsrecon output by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The honest limits
&lt;/h2&gt;

&lt;p&gt;Jin is not a replacement for a full arsenal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The port scanner is a &lt;strong&gt;TCP connect scan&lt;/strong&gt; — it's slower and more detectable than SYN scanning, and it won't detect UDP services.&lt;/li&gt;
&lt;li&gt;Fingerprinting is &lt;strong&gt;signature-based&lt;/strong&gt; — heavily obfuscated or custom-built apps may come back with nothing.&lt;/li&gt;
&lt;li&gt;Subdomain discovery relies on &lt;strong&gt;certificate transparency only&lt;/strong&gt; — it won't find subdomains that never got a public certificate.&lt;/li&gt;
&lt;li&gt;The security score is a &lt;strong&gt;starting point&lt;/strong&gt;, not a certification. It can't catch logic bugs, auth flaws, or injection vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Jin is a thoughtful, well-engineered little tool that makes the &lt;em&gt;first five minutes&lt;/em&gt; of any recon fast and pleasant — a passive OSINT pass, a port overview, and a tech-stack map, all from one binary with output you can actually read.&lt;/p&gt;

&lt;p&gt;If that sounds useful to you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/sapiuwu/jin" rel="noopener noreferrer"&gt;github.com/sapiuwu/jin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install it, run &lt;code&gt;jin&lt;/code&gt; with no arguments, and scan something you own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And remember — with great recon power comes great responsibility. Only point it at targets you're authorized to investigate. Happy (ethical) hunting.&lt;/p&gt;

</description>
      <category>go</category>
      <category>osint</category>
      <category>cybersecurity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Introducing EOSAV: A Free and Open-Source Antivirus for Everyone</title>
      <dc:creator>Wahyu K. A.</dc:creator>
      <pubDate>Thu, 01 Feb 2024 04:25:10 +0000</pubDate>
      <link>https://dev.to/aliftech/introducing-eosav-a-free-and-open-source-antivirus-for-everyone-bkg</link>
      <guid>https://dev.to/aliftech/introducing-eosav-a-free-and-open-source-antivirus-for-everyone-bkg</guid>
      <description>&lt;p&gt;In today's digital world, where cyber threats lurk around every corner, safeguarding your devices from malware is not just an option, it's a necessity. Did you know that a malware attack occurs every 39 seconds?** That's why you need a robust antivirus solution that protects you effectively without compromising your budget or privacy. Look no further than EOSAV, the free and open-source antivirus designed to keep your devices safe and secure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EOSAV: Simple, Powerful, and Open&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EOSAV&lt;/strong&gt; stands out from the crowd with its unique combination of simplicity, powerful protection, and open-source development.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Effortless User Experience:&lt;/strong&gt; Say goodbye to complicated interfaces and confusing configurations. EOSAV boasts a clean and intuitive design that makes it easy to navigate and understand, even for users with limited technical knowledge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Protection:&lt;/strong&gt; Don't let the lightweight design fool you. EOSAV packs a punch, employing multiple detection methods like real-time scanning, on-demand scanning, and signature-based detection to shield you from viruses, trojans, ransomware, and other malicious threats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source for Transparency and Trust:&lt;/strong&gt; As an open-source project, EOSAV's code is freely available for inspection and modification. This ensures transparency and security, knowing that your data is never collected or shared without your knowledge.
Why Choose EOSAV?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's why EOSAV should be your go-to choice for antivirus protection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's Free:&lt;/strong&gt; Protect your devices without breaking the bank. EOSAV is completely free to download and use, with no hidden costs or subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's Lightweight:&lt;/strong&gt; Unlike resource-heavy antivirus programs, EOSAV runs smoothly in the background, minimizing impact on your system performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's Customizable:&lt;/strong&gt; Modify the open-source code to tailor EOSAV to your specific needs, adding or removing features as desired.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's a Collaborative Effort:&lt;/strong&gt; Join a vibrant community of developers and security enthusiasts, contributing to continuous improvement and innovation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Join the Fight Against Cybercrime!&lt;/p&gt;

&lt;p&gt;By choosing EOSAV, you're not just protecting your own devices, you're actively contributing to a safer digital environment for everyone. Become part of the open-source movement and help us build a future where everyone can enjoy the internet with peace of mind.&lt;/p&gt;

&lt;p&gt;Download EOSAV today and experience the power of free and open-source antivirus protection!&lt;/p&gt;

&lt;p&gt;Get Started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visit our website:&lt;/strong&gt; &lt;a href="http://eosav.site/" rel="noopener noreferrer"&gt;http://eosav.site/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, let's create a safer digital world!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>software</category>
    </item>
    <item>
      <title>Beyond Signatures: Exploring Modern Antivirus Techniques</title>
      <dc:creator>Wahyu K. A.</dc:creator>
      <pubDate>Wed, 17 Jan 2024 02:52:58 +0000</pubDate>
      <link>https://dev.to/aliftech/beyond-signatures-exploring-modern-antivirus-techniques-54m0</link>
      <guid>https://dev.to/aliftech/beyond-signatures-exploring-modern-antivirus-techniques-54m0</guid>
      <description>&lt;p&gt;Hello everyone, still with me. Today I want to write something different, because for last week, I have learned, explore, and researched about cyber security especially about how malicious code work. But, I am not gonna writing a content about how to hack something. I just want to share my mini research about antivirus. In my mini research, I tried to created my own antivirus, just a simple antivirus with GUI (Graphical User Interface).&lt;/p&gt;

&lt;p&gt;In this article I want to try to explain about the depth of antivirus technologies. And please take a note, in this article I am not going to make a tutorial about how to create antivirus, I just want to explain in the simple way about the technology beyond the antivirus. Ok, enough for pleasantries, lets go to our topic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
In the vast of digital realm, just like in medieval times, we face lurking threats that aim to harm our precious data and systems. But, instead of dragon or sorcerers, we encounter malicious software (malware), often in the form of viruses, worms, and trojan. Thankfully, we have our own digital knights – antivirus software – to defend us from these cyber threats. For more specific information about malware, you can visit this &lt;a href="https://wahyounote.wordpress.com/2024/01/16/demystifying-malware-a-comprehensive-guide/" rel="noopener noreferrer"&gt;article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Antivirus&lt;/strong&gt;&lt;br&gt;
Antivirus software, as the name suggests, is designed to detect, prevent, and remove malware from your computer or device. Imagine it as a security system with multiple layers of protection, constantly scanning your digital terrain for suspicious activity and neutralizing any invaders before they can cause harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A journey through time: The history of antivirus&lt;/strong&gt;&lt;br&gt;
The story of antivirus begin in the early day of computing, around the 1970s, when the first computer viruses started appearing. These early threats were relatively simple, but they served as a wake-up call for the need for digital protection. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1971:&lt;/strong&gt; The first known computer virus, &lt;strong&gt;Creeper&lt;/strong&gt; emerges on DEC PDP-10 mainframe computers. This playful virus displayed the message "I'm the creeper, catch me if you can!" while replicating itself across machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1984:&lt;/strong&gt; The Elk Cloner virus infects Apple II computers, displaying a poem before corrupting floppy disks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1989:&lt;/strong&gt; The Morris Worm becomes the first major internet worm, causing widespread disruption by infecting thousands of computers and crippling internet traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These early encounters with malware led to the development of the first antivirus programs in the late of 1980s. These pioneers, like John McAfee and Eugene Kaspersky, laid the foundation for the sophisticated solution we have today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development and Evolution of Antivirus&lt;/strong&gt;&lt;br&gt;
Early antivirus software relied on &lt;strong&gt;signature-based&lt;/strong&gt; detection, identifying and blocking known malware based on specific digital patterns, like virus signatures. This approach was effective against familiar threats, but it struggled with new and never-before-seen malware.&lt;/p&gt;

&lt;p&gt;As malware creators became more sophisticated, antivirus developers had to adapt. This led to the development of several new technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Heuristic:&lt;/strong&gt; This technique analyzes programs for suspicious behavior, even if they don't match known virus signatures. Think of it as a detective looking for clues rather than just comparing mugshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine Learning:&lt;/strong&gt; Advanced algorithms analyze vast amounts of data to identify patterns and anomalies, allowing antivirus software to detect even zero-day attacks. It's like having a constantly learning and evolving detective on your side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandbox Technology:&lt;/strong&gt; This creates a virtual environment when suspicious files can be safely execute and monitored, revealing their true nature without harming your actual system. Imagine testing a suspicious potion in a controlled lab before drinking it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavioral Analysis:&lt;/strong&gt; By monitoring how programs interact with your system, antivirus software can identify malicious activities, even if they are hidden within seemingly harmless code. It's like watching someone's actions to see if they are up to something shady.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These advancements have made modern antivirus solutions much more effective and adaptable, offering multi-layered protection against an ever-evolving threat landscape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The future of antivirus&lt;/strong&gt;&lt;br&gt;
The battle against malware is an ongoing one, and antivirus developers are constantly innovating to stay ahead of the curve. Emerging technologies like artificial intelligence and blockchain are expected to play a significant role in the future of antivirus, leading to even more intelligent and proactive protection.&lt;/p&gt;

&lt;p&gt;So, the next time you connect to the digital world, remember the tireless knights standing guard in the background – your antivirus software. They may not wear shining armor, but they wield powerful tools to keep your digital kingdom safe from harm.&lt;/p&gt;

</description>
      <category>community</category>
      <category>cybersecurity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Convert JSON Data To YAML in Python</title>
      <dc:creator>Wahyu K. A.</dc:creator>
      <pubDate>Sat, 06 Jan 2024 08:48:10 +0000</pubDate>
      <link>https://dev.to/aliftech/convert-json-data-to-yaml-eec</link>
      <guid>https://dev.to/aliftech/convert-json-data-to-yaml-eec</guid>
      <description>&lt;p&gt;Hello everyone, in this session i would like to share a simple tutorial about &lt;strong&gt;how to convert json data into yaml&lt;/strong&gt;. In this tutorial i am gonna use python as programming language and a library called FormatFusion. FormatFusion is a powerful data converter library for python, you can check the detail in this &lt;a href="https://pypi.org/project/FormatFusion/" rel="noopener noreferrer"&gt;https://pypi.org/project/FormatFusion/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before we start the tutorial, it is important to know what is json and yaml.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;br&gt;
JSON stands for Javascript Object Notation. It is a lightweight data-interchange format that's widely used for transmitting data between computers. Think for it as a language for computers to talk to each other in a way that's both easy to understand and efficient to transmit. For further information about json, you can visit &lt;a href="https://wahyounote.wordpress.com/2024/01/10/json-the-lightweight-data-interchange-format/" rel="noopener noreferrer"&gt;JSON: The Lightweight Data-Interchange Format&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is some keys to know about json:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;human-readable:&lt;/strong&gt; JSON is written in the plaintext, so it is easy for human to read and understand, even if they don't know how to program. This make it a great choice for things like configuration files and API responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;language independent:&lt;/strong&gt; even though it is based on javascript syntax, json can be used with any programming language. There are libraries and frameworks available for all major languages that can read and write json data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;lightweight:&lt;/strong&gt; JSON files are very small and compact, which make them ideal for transmitting data over the internet. This is why json is often used for web APIs and web applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;structured:&lt;/strong&gt; JSON data is organized into key-value pairs and arrays. This make it easy to access and manipulate specifict place of data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are some common uses of JSON:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;web APIs:&lt;/strong&gt; Many web APIs use json to send and receive data. Example, when you use a weather API to get current temperature, the API will return data in json format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;configuration files:&lt;/strong&gt; Many application use json files to store configuration setting. This make it easy to changes the setting without having to modify the code itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;data storage:&lt;/strong&gt; JSON can be used to store data in a file or database. This is a common way to store data for web applications.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the json example data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"person"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"street"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123 Main St"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Anytown"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CA"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;YAML&lt;/strong&gt;&lt;br&gt;
YAML ain't a markup language, though originally it meant Yet Another Markup Language. It is another data serialization language similar to json, often used for configuration files and data exchange. However, unlike json, it prioritize human readability with more intuitive and concise syntax. For further information about yaml, you can check it in my article &lt;a href="https://wahyounote.wordpress.com/2024/01/10/yaml-the-friendly-face-of-data-unveiling-the-depth-of-human-readable-code/" rel="noopener noreferrer"&gt;YAML: The Friendly Face of Data – Unveiling The Depth of Human-Readable Code&lt;/a&gt;. Here are some key points about yaml:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Human-readable&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Use indentation to define structure, similar to python code, make it easier to understand the hierarchy of data.&lt;/li&gt;
&lt;li&gt;No need for closing tags or square bracket like json, simplifying the visual layout.&lt;/li&gt;
&lt;li&gt;Support comments for annotation, further clarifying the meaning of the data.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Powerful and Flexible&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A superset of json, meaning any valid json file is also a valid yaml file.&lt;/li&gt;
&lt;li&gt;Support various data types including strings, numbers, booleans, lists, dictionaries, and often custom types.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allows for anchors and aliases to reference data elsewhere in the document, reducing redundancy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Common Uses&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configuration files for applications and servers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data exchange between programs and services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storing application state and settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Defining automation scripts and playbooks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the yaml example data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;My Application&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;settings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;John Doe&lt;/span&gt;
    &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;john.doe@example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have already talking about both json and yaml. Now, it is the time to go to our main topic. First of all, we need to install FormatFusion library using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;FormatFusion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that we can use the library to convert our json data into yaml format. Here is the example:&lt;br&gt;
&lt;/p&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;FormatFusion.json_to_yaml&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json_to_yaml&lt;/span&gt;

&lt;span class="n"&gt;json_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;{
    &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;John Doe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
    &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: 30,
    &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;New York&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
}&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;yaml_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;json_to_yaml&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="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yaml_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can also convert yaml data into json format using &lt;code&gt;yaml_to_json&lt;/code&gt; function just like the example bellow.&lt;br&gt;
&lt;/p&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;FormatFusion.yaml_to_json&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;yaml_to_json&lt;/span&gt;

&lt;span class="n"&gt;yaml_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
   name: John Doe
   age: 30
   city: New York
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;json_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;yaml_to_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;yaml_data&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="n"&gt;json_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it. How was it? It was easy, right? Converting JSON to YAML with the FormatFusion library is a breeze. In addition to converting YAML and JSON data, FormatFusion can also be used to convert other data formats. For more information, please visit the FormatFusion documentation on the &lt;a href="https://github.com/aliftech/FormatFusion/blob/master/DOCUMENTATION.md" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. That's all for this tutorial. Thank you for reading and I hope it was helpful.&lt;/p&gt;

&lt;p&gt;Here is an image of the FormatFusion library documentation:&lt;/p&gt;

&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%2Fi4z2cl8dkhjgs0jf0k8s.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%2Fi4z2cl8dkhjgs0jf0k8s.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some additional tips for converting JSON to YAML:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If your JSON data is nested, you can use the indent property to control the indentation level of the YAML output.&lt;/li&gt;
&lt;li&gt;If your JSON data contains comments, you can use the comment property to specify how to handle them in the YAML output.&lt;/li&gt;
&lt;li&gt;If your JSON data contains special characters, you can use the escape property to specify how to escape them in the YAML output.
I hope this helps!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>opensource</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
