<?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: dasmat </title>
    <description>The latest articles on DEV Community by dasmat  (@dasmat13).</description>
    <link>https://dev.to/dasmat13</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%2F4024882%2F17c5e963-274d-4a80-86d7-2e87ee97895b.jpg</url>
      <title>DEV Community: dasmat </title>
      <link>https://dev.to/dasmat13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dasmat13"/>
    <language>en</language>
    <item>
      <title>I built kubectl-tripwire to find admission webhook problems before they break a cluster</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Wed, 29 Jul 2026 11:46:39 +0000</pubDate>
      <link>https://dev.to/dasmat13/i-built-kubectl-tripwire-to-find-admission-webhook-problems-before-they-break-a-cluster-4bh2</link>
      <guid>https://dev.to/dasmat13/i-built-kubectl-tripwire-to-find-admission-webhook-problems-before-they-break-a-cluster-4bh2</guid>
      <description>&lt;p&gt;One thing I've noticed while working with Kubernetes is that admission webhooks are easy to forget about... until something goes wrong.&lt;/p&gt;

&lt;p&gt;A webhook might look completely fine, but if its Service has no healthy endpoints, or every backend pod is sitting on one node, or the TLS setup is broken, a fail-closed webhook can suddenly start rejecting API requests.&lt;/p&gt;

&lt;p&gt;I wanted something that could look at the whole dependency chain instead of making me check everything manually.&lt;/p&gt;

&lt;p&gt;So I built kubectl-tripwire.&lt;/p&gt;

&lt;p&gt;It analyses admission webhooks and checks things like:&lt;/p&gt;

&lt;p&gt;failurePolicy&lt;br&gt;
Service and EndpointSlice health&lt;br&gt;
Backend pods&lt;br&gt;
Node and zone spread&lt;br&gt;
PodDisruptionBudgets&lt;br&gt;
TLS configuration&lt;br&gt;
JSON output for automation&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;kubectl tripwire admission&lt;/p&gt;

&lt;p&gt;Instead of only listing webhook configs, it tries to answer questions like:&lt;/p&gt;

&lt;p&gt;"If this webhook goes down, what actually happens?"&lt;/p&gt;

&lt;p&gt;It's still very early (v0.1.0), so there are definitely things I want to improve.&lt;/p&gt;

&lt;p&gt;If you have ideas, find bugs, or think there's something useful to add, I'd love to hear it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Output
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;══════════════════════════════════════════════════════════════════
  KubeTripwire — Admission Failure-Chain Analysis
  Cluster: production-east · 8 webhooks analyzed (5 mutating, 3 validating)
══════════════════════════════════════════════════════════════════

Webhook: istio-sidecar-injector
────────────────────────────────────────────────────────────
  Type:            MutatingWebhookConfiguration
  failurePolicy:   Fail (fail-closed)
  timeoutSeconds:  10
  matchPolicy:     Equivalent
  sideEffects:     None

  Scope:
    - Ops:       CREATE
      Resources: pods
    - Namespaces: 31 of 34 match selector

  Backend:
    Service:       istio-system/istiod (port 443)
    Endpoints:     1 of 3 ready
    Pods:          3
    Owner:         Deployment/istiod
    Nodes:         1 unique nodes
    Zones:         1 unique zones (us-east-1a)

  Findings:
    [HIGH] Fail-closed webhook with degraded endpoints
      Only 1 of 3 endpoints are ready. If the remaining endpoint(s) become unavailable, matching admission requests will be rejected.
      Evidence:
        • Ready endpoints: 1 of 3
        • failurePolicy: Fail
        • Scope: pods/CREATE in 31 namespaces
      Consideration: Investigate why some endpoints are not ready. Check backend pod status and events.

    [MEDIUM] Fail-closed webhook with all backend pods on a single node
      All backend pods are scheduled on the same node. A node failure or drain will remove all backend pods simultaneously.
      Evidence:
        • Backend pods: 3
        • All on node: worker-2a
        • failurePolicy: Fail
      Consideration: Consider pod anti-affinity rules or topology spread constraints to distribute backend pods across nodes.

══════════════════════════════════════════════════════════════════
  Admission Compound Risks
══════════════════════════════════════════════════════════════════

  ⚠ Fail-closed webhook with endpoint issues affecting wide scope
    Webhook:  istio-sidecar-injector
    Scenario: Matching API requests in 31 namespaces are at risk of rejection. If all endpoints become unavailable, no matching resources can be created or modified.

──────────────────────────────────────────────────────────
Summary:
  Webhooks analyzed: 8
  Critical findings: 0
  High findings:     1
  Medium findings:   1
  Low findings:      0
  Info observations: 0
  Compound risks:    1
  Scan duration:     42ms
──────────────────────────────────────────────────────────
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






</description>
      <category>go</category>
      <category>kubernetes</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Looking for the best Go (Golang) course on YouTube</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Mon, 20 Jul 2026 08:00:24 +0000</pubDate>
      <link>https://dev.to/dasmat13/looking-for-the-best-go-golang-course-on-youtube-39k9</link>
      <guid>https://dev.to/dasmat13/looking-for-the-best-go-golang-course-on-youtube-39k9</guid>
      <description>&lt;p&gt;Hi everyone!&lt;/p&gt;

&lt;p&gt;I'm looking for a high-quality Go (Golang) course on YouTube and would love to hear recommendations from the community.&lt;/p&gt;

&lt;p&gt;A bit about me:&lt;/p&gt;

&lt;p&gt;I already have programming experience.&lt;br&gt;
I contribute to open-source projects, especially in the Kubernetes ecosystem.&lt;br&gt;
I want to improve my Go skills for backend development and cloud-native projects.&lt;/p&gt;

&lt;p&gt;I'm looking for a course that covers:&lt;/p&gt;

&lt;p&gt;Go fundamentals&lt;br&gt;
Interfaces&lt;br&gt;
Error handling&lt;br&gt;
Goroutines &amp;amp; channels&lt;br&gt;
Concurrency patterns&lt;br&gt;
Context package&lt;br&gt;
Testing&lt;br&gt;
Building REST APIs&lt;br&gt;
Project structure and best practices&lt;/p&gt;

&lt;p&gt;If you've learned Go from YouTube, which course would you recommend and why? Are there any channels or playlists that you think stand out?&lt;/p&gt;

&lt;p&gt;Thanks in advance!&lt;/p&gt;

</description>
      <category>backend</category>
      <category>discuss</category>
      <category>go</category>
      <category>learning</category>
    </item>
    <item>
      <title>Chronological K8s Debugging: Merging Logs, Events, and Node Alerts on the Fly</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Wed, 15 Jul 2026 21:37:03 +0000</pubDate>
      <link>https://dev.to/dasmat13/chronological-k8s-debugging-merging-logs-events-and-node-alerts-on-the-fly-c62</link>
      <guid>https://dev.to/dasmat13/chronological-k8s-debugging-merging-logs-events-and-node-alerts-on-the-fly-c62</guid>
      <description>&lt;h1&gt;
  
  
  Chronological K8s Debugging: Merging Logs, Events, and Node Alerts on the Fly
&lt;/h1&gt;

&lt;p&gt;If you've ever had to debug a failing Kubernetes microservice in real time, you know the "context-shift trap" all too well. &lt;/p&gt;

&lt;p&gt;You find yourself with three terminal split panes open:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One running &lt;code&gt;kubectl logs -f pod-xyz&lt;/code&gt; (or &lt;code&gt;stern&lt;/code&gt;) to tail application output.&lt;/li&gt;
&lt;li&gt;A second running &lt;code&gt;kubectl get events -w&lt;/code&gt; to see if there are liveness probe failures or scheduling issues.&lt;/li&gt;
&lt;li&gt;A third polling &lt;code&gt;kubectl describe node&lt;/code&gt; to track resource pressure or disk problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hard part isn't getting the information—it's stitching it together. When your app throws a database connection timeout at &lt;code&gt;14:02:15.102&lt;/code&gt;, did it happen before or after the Kubelet posted a &lt;code&gt;MemoryPressure&lt;/code&gt; alert on the node? Did a ConfigMap update trigger a rolling update that caused the database pod to restart? &lt;/p&gt;

&lt;p&gt;Answering these questions down to the millisecond requires tedious manual correlation. I wanted a way to see everything in one place, so I built &lt;strong&gt;KubeCorrelate&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;KubeCorrelate&lt;/strong&gt; (&lt;code&gt;kubecorrelate&lt;/code&gt;) is a lightweight, zero-dependency CLI tool written in Go. It operates purely client-side using your existing &lt;code&gt;kubeconfig&lt;/code&gt; context to multiplex container logs, Kubernetes events, configuration changes, and node pressure warnings into a single, chronological, color-coded stream.&lt;/p&gt;

&lt;p&gt;Here is what a live debugging session looks like in action:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[23:55:01.002] [LOG] Processing order #98213...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[23:55:02.155] [CONFIG] ConfigMap "app-config" was modified&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[23:55:03.441] [LOG] Reloading routing rules...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[23:55:05.801] [EVENT] [WARN] LivenessProbeFailed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[23:55:07.100] [NODE] [WARN] MemoryPressure: System memory usage exceeded 95%&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[23:55:07.350] [EVENT] [WARN] Container restarted (Reason: OOMKilled)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of switching tabs, you see the exact sequence of events that led to the crash.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;KubeCorrelate uses the &lt;code&gt;client-go&lt;/code&gt; libraries to spin up lightweight watch goroutines for different telemetry signals:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log Streams&lt;/strong&gt;: Pulls real-time container logs with &lt;code&gt;Timestamps: true&lt;/code&gt; enabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes Events&lt;/strong&gt;: Watches pod-specific warnings and lifecycle state transitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurations&lt;/strong&gt;: Monitors ConfigMaps and Secrets referenced by the target pod.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node Metrics&lt;/strong&gt;: Listens for resource pressure signals (Memory, Disk, PID pressure) on the specific node hosting the pod.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Solving the Out-of-Order Logging Problem
&lt;/h3&gt;

&lt;p&gt;If you simply print these streams as they arrive, they will be out of order. Network latencies, API aggregation delays, and container runtime flush intervals mean that a log line from a container might reach your client machine &lt;em&gt;after&lt;/em&gt; a Kubernetes event that actually occurred later.&lt;/p&gt;

&lt;p&gt;To solve this, KubeCorrelate implements a client-side &lt;strong&gt;Bounded Slop Sorting Buffer&lt;/strong&gt; (defaulting to &lt;code&gt;1.5s&lt;/code&gt;, customizable via &lt;code&gt;--buffer-delay&lt;/code&gt;):&lt;/p&gt;

&lt;p&gt;Telemetry Sources [Logs] [Events] [Configs] [Node Alerts] │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────┐ │ Bounded Slop Sorting Buffer │ &amp;lt;-- Queues and sorts client-side └─────────────────────────────────────────┘ │ ▼ Sorted Terminal Output&lt;/p&gt;

&lt;h2&gt;
  
  
  Incoming events are temporarily queued in the buffer. After the buffer delay passes, the events are flushed in guaranteed chronological order down to the millisecond.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Built for Production Clusters
&lt;/h2&gt;

&lt;p&gt;When writing KubeCorrelate, I focused on making it safe for real-world enterprise environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Graceful RBAC Degradation&lt;/strong&gt;: If you're running in a locked-down namespace where you don't have cluster-wide permissions to watch Nodes or ConfigMaps, KubeCorrelate doesn't crash. It outputs a single warning and keeps monitoring the logs and events you &lt;em&gt;do&lt;/em&gt; have access to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Pod Discovery&lt;/strong&gt;: In a rolling deployment, pods are constantly terminated and replaced. KubeCorrelate automatically detects when a new pod starts, attaches watchers to it, and tears down the old ones cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  * &lt;strong&gt;Zero Dependencies&lt;/strong&gt;: Built entirely with standard Go libraries and official Kubernetes packages. No extra agents or CRDs required in your cluster.
&lt;/h2&gt;

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

&lt;p&gt;KubeCorrelate is officially accepted in the CNCF Krew index. You can install it directly as a &lt;code&gt;kubectl&lt;/code&gt; plugin:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
kubectl krew install correlate
Once installed, use it as:

bash
kubectl correlate -l app=order-processor
Alternatively, you can build from source:

bash
go install github.com/Dasmat13/kubecorrelate/cmd/kubecorrelate@latest
Try it out!
Check out the repository on GitHub: Dasmat13/kubecorrelate.

Would love to hear your thoughts, feedback, and feature requests. If you find it useful, feel free to drop a star!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>kubernetes</category>
      <category>go</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Inside a Kubernetes Bug Fix: Investigating an Integer Overflow in Dynamic Resource Allocation (DRA)</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Mon, 13 Jul 2026 09:05:55 +0000</pubDate>
      <link>https://dev.to/dasmat13/inside-a-kubernetes-bug-fix-investigating-an-integer-overflow-in-dynamic-resource-allocation-dra-2mn2</link>
      <guid>https://dev.to/dasmat13/inside-a-kubernetes-bug-fix-investigating-an-integer-overflow-in-dynamic-resource-allocation-dra-2mn2</guid>
      <description>&lt;p&gt;Contributing to a project as large as Kubernetes can feel intimidating at first. Millions of lines of code, hundreds of active contributors, and a rigorous review process make every contribution a learning experience.&lt;/p&gt;

&lt;p&gt;Recently, while exploring the Dynamic Resource Allocation (DRA) subsystem, I came across an integer overflow issue related to resource range calculations. In this post, I'll walk through how I approached understanding the problem and preparing a fix.&lt;/p&gt;

&lt;p&gt;Why This Bug Matters&lt;/p&gt;

&lt;p&gt;Overflow bugs don't usually show up during normal usage. They tend to appear only with extreme values, making them difficult to spot and easy to overlook.&lt;/p&gt;

&lt;p&gt;Even though these edge cases are rare, production systems should still handle them correctly. That's especially important in a project like Kubernetes, where correctness and predictability are critical.&lt;/p&gt;

&lt;p&gt;My Approach&lt;/p&gt;

&lt;p&gt;Before making any code changes, I focused on understanding the surrounding implementation.&lt;/p&gt;

&lt;p&gt;My workflow looked like this:&lt;/p&gt;

&lt;p&gt;Read the implementation carefully.&lt;br&gt;
Follow every helper function it called.&lt;br&gt;
Search for all call sites.&lt;br&gt;
Read the existing unit tests.&lt;br&gt;
Understand the assumptions the code relied on.&lt;/p&gt;

&lt;p&gt;Only after understanding the code did I start thinking about a possible fix.&lt;/p&gt;

&lt;p&gt;Finding the Root Cause&lt;/p&gt;

&lt;p&gt;The issue came from arithmetic performed during resource range alignment.&lt;/p&gt;

&lt;p&gt;When values approach the upper limit of a 64-bit integer (math.MaxInt64), intermediate calculations can overflow before the final result is computed.&lt;/p&gt;

&lt;p&gt;Rather than producing a predictable value, overflow can lead to incorrect behavior that is difficult to detect.&lt;/p&gt;

&lt;p&gt;Designing a Safer Solution&lt;/p&gt;

&lt;p&gt;The approach I proposed was to use saturating arithmetic for the calculation.&lt;/p&gt;

&lt;p&gt;The basic idea is straightforward:&lt;/p&gt;

&lt;p&gt;Perform the calculation normally when it is safe.&lt;br&gt;
If the result would exceed the maximum representable value, clamp it to math.MaxInt64.&lt;/p&gt;

&lt;p&gt;This avoids overflow while keeping the behavior deterministic.&lt;/p&gt;

&lt;p&gt;Writing Tests&lt;/p&gt;

&lt;p&gt;One of the most valuable lessons I've learned from open source is that a fix isn't complete without tests.&lt;/p&gt;

&lt;p&gt;I focused on adding edge-case tests that exercised values near the maximum range of a 64-bit integer.&lt;/p&gt;

&lt;p&gt;These tests help prevent similar regressions in the future.&lt;/p&gt;

&lt;p&gt;What Open Source Has Taught Me&lt;/p&gt;

&lt;p&gt;Working on Kubernetes has reinforced several important engineering habits:&lt;/p&gt;

&lt;p&gt;Read much more code than you write.&lt;br&gt;
Understand the design before proposing changes.&lt;br&gt;
Keep fixes as small and focused as possible.&lt;br&gt;
Write tests that explain the behavior you're protecting.&lt;br&gt;
Treat code review as an opportunity to learn.&lt;/p&gt;

&lt;p&gt;Sometimes the biggest part of a contribution isn't writing code—it's understanding why the existing code works the way it does.&lt;/p&gt;

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

&lt;p&gt;Whether you're making your first contribution or your fiftieth, large open-source projects are incredible places to grow as an engineer.&lt;/p&gt;

&lt;p&gt;Every bug investigation teaches you something new about system design, testing, and collaborative software development.&lt;/p&gt;

&lt;p&gt;I'm looking forward to continuing contributing to Kubernetes and learning from the review process along the way.&lt;/p&gt;

&lt;p&gt;If you're interested in contributing to open source, my advice is simple: start small, stay curious, and keep learning.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>opensource</category>
      <category>go</category>
      <category>cloud</category>
    </item>
    <item>
      <title>🚀 I just published GitWorld Engine!

It's an open-source GitHub Action that transforms your GitHub contribution graph into an animated pixel-art city.

I'd love your feedback on the idea, implementation, and future features. If you enjoy GitHub profile cu</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Sat, 11 Jul 2026 08:18:27 +0000</pubDate>
      <link>https://dev.to/dasmat13/i-just-published-gitworld-engine-its-an-open-source-github-action-that-transforms-your-4fgm</link>
      <guid>https://dev.to/dasmat13/i-just-published-gitworld-engine-its-an-open-source-github-action-that-transforms-your-4fgm</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302" class="crayons-story__hidden-navigation-link"&gt;I Built GitWorld Engine: A GitHub Action That Turns Your Contributions into an Animated City&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/BGH_xQGKWpU" title="I Built GitWorld Engine: A GitHub Action That Turns Your Contributions into an Animated City"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dasmat13" class="crayons-avatar  crayons-avatar--l  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4024882%2F17c5e963-274d-4a80-86d7-2e87ee97895b.jpg" alt="dasmat13 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dasmat13" class="crayons-story__secondary fw-medium m:hidden"&gt;
              dasmat 
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                dasmat 
                
              
              &lt;div id="story-author-preview-content-4118285" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dasmat13" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4024882%2F17c5e963-274d-4a80-86d7-2e87ee97895b.jpg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;dasmat &lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302" id="article-link-4118285"&gt;
          I Built GitWorld Engine: A GitHub Action That Turns Your Contributions into an Animated City
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/github"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;github&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>github</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>🚀 Just launched GitWorld Engine!

An open-source GitHub Action that turns your GitHub contributions into an animated pixel-art city.

Looking for feedback and feature ideas!

https://github.com/Dasmat13/git-world-action</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Sat, 11 Jul 2026 08:16:50 +0000</pubDate>
      <link>https://dev.to/dasmat13/just-launched-gitworld-engine-an-open-source-github-action-that-turns-your-github-25m4</link>
      <guid>https://dev.to/dasmat13/just-launched-gitworld-engine-an-open-source-github-action-that-turns-your-github-25m4</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://github.com/Dasmat13/git-world-action" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopengraph.githubassets.com%2Ff28762749a9749a887e88368d080620016abae487410dcc96e7d2bb00c66a60c%2FDasmat13%2Fgit-world-action" height="600" class="m-0" width="1200"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://github.com/Dasmat13/git-world-action" rel="noopener noreferrer" class="c-link"&gt;
            GitHub - Dasmat13/git-world-action · GitHub
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Contribute to Dasmat13/git-world-action development by creating an account on GitHub.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Ffavicons%2Ffavicon.svg" width="32" height="32"&gt;
          github.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I Built GitWorld Engine: A GitHub Action That Turns Your Contributions into an Animated City</title>
      <dc:creator>dasmat </dc:creator>
      <pubDate>Sat, 11 Jul 2026 08:03:40 +0000</pubDate>
      <link>https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302</link>
      <guid>https://dev.to/dasmat13/i-built-gitworld-engine-a-github-action-that-turns-your-contributions-into-an-animated-city-302</guid>
      <description>&lt;h1&gt;
  
  
  I Built GitWorld Engine: A GitHub Action That Turns Your Contributions into an Animated City
&lt;/h1&gt;

&lt;p&gt;GitHub profiles have become more than just a list of repositories—they're a way to showcase your work and personality.&lt;/p&gt;

&lt;p&gt;Many developers use the classic GitHub Snake animation to visualize their contribution graph. While I like that idea, I wondered:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if your contributions built something instead of being eaten?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question led me to build &lt;strong&gt;GitWorld Engine&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 What is GitWorld Engine?
&lt;/h2&gt;

&lt;p&gt;GitWorld Engine is an open-source GitHub Action that transforms your GitHub contribution graph into a living, animated pixel-art world for your profile README.&lt;/p&gt;

&lt;p&gt;Instead of displaying a static graph, your GitHub activity becomes part of an evolving world.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🏙️ Repositories become cities&lt;/li&gt;
&lt;li&gt;🏗️ Commits grow buildings&lt;/li&gt;
&lt;li&gt;👑 Pull requests become bosses&lt;/li&gt;
&lt;li&gt;🐛 Issues become roaming monsters&lt;/li&gt;
&lt;li&gt;🌳 Your primary programming language determines the world's biome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time your GitHub activity changes, the world evolves automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ How It Works
&lt;/h2&gt;

&lt;p&gt;The GitHub Action runs on a schedule, collects your public GitHub activity, generates an animated SVG, and updates it in your profile repository.&lt;/p&gt;

&lt;p&gt;Setup only takes a few minutes.&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="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Dasmat13/git-world-action@main&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;github_user_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ github.actor }}&lt;/span&gt;
    &lt;span class="na"&gt;github_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
    &lt;span class="na"&gt;svg_out_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dist/gitworld.svg&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add the generated SVG to your GitHub profile README.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why I Built It
&lt;/h2&gt;

&lt;p&gt;I wanted to create something that felt more interactive and playful than a traditional contribution graph.&lt;/p&gt;

&lt;p&gt;Instead of simply visualizing commits, GitWorld Engine turns your coding activity into a tiny world that grows as you continue building projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What's Next?
&lt;/h2&gt;

&lt;p&gt;I'm planning to add more features, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌙 Day and night cycles&lt;/li&gt;
&lt;li&gt;🌧️ Weather effects&lt;/li&gt;
&lt;li&gt;🚗 Moving vehicles&lt;/li&gt;
&lt;li&gt;🚂 Trains&lt;/li&gt;
&lt;li&gt;🏰 Additional biome themes&lt;/li&gt;
&lt;li&gt;🎮 More pixel-art animations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community feedback will help shape future updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Repository: &lt;a href="https://github.com/Dasmat13/git-world-action" rel="noopener noreferrer"&gt;https://github.com/Dasmat13/git-world-action&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://dasmat13.github.io/git-world-action/" rel="noopener noreferrer"&gt;https://dasmat13.github.io/git-world-action/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have ideas, suggestions, or feature requests, I'd love to hear them. Contributions are always welcome!&lt;/p&gt;

</description>
      <category>github</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
