<?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: Goksel Yesiller</title>
    <description>The latest articles on DEV Community by Goksel Yesiller (@mryesiller).</description>
    <link>https://dev.to/mryesiller</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%2F910582%2F1f0a45df-f63d-4887-bf9a-408b3ba1942c.png</url>
      <title>DEV Community: Goksel Yesiller</title>
      <link>https://dev.to/mryesiller</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mryesiller"/>
    <language>en</language>
    <item>
      <title>Introducing Advanced Markdown Previewer: A Quick Tour</title>
      <dc:creator>Goksel Yesiller</dc:creator>
      <pubDate>Sun, 21 Jun 2026 14:19:26 +0000</pubDate>
      <link>https://dev.to/mryesiller/introducing-advanced-markdown-previewer-a-quick-tour-4h12</link>
      <guid>https://dev.to/mryesiller/introducing-advanced-markdown-previewer-a-quick-tour-4h12</guid>
      <description>&lt;p&gt;Documentation workflows fracture when Markdown content needs precise rendering checks. Developers and technical writers waste cycles toggling between source editors and preview tools, breaking concentration and slowing iteration. A single environment that renders complex Markdown in real time eliminates that friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;The Advanced Markdown Previewer is a browser-based editor with a split-pane layout: source on the left, live preview on the right. It renders Markdown instantly as you type. It supports the full GitHub Flavored Markdown (GFM) specification—including task lists, tables, and autolinks—alongside LaTeX-style mathematical expressions via KaTeX and syntax-highlighted code blocks across dozens of languages. Raw HTML embedding is supported, and external link behavior is configurable. The tool also tracks document statistics such as word count and character count in real time.&lt;/p&gt;

&lt;p&gt;The previewer is one of 200+ free browser tools on DevTools, operating entirely client-side. No signup, no tracking—content never leaves the browser, making it suitable for proprietary or sensitive documentation drafts.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;Open the tool to see the dual-pane interface. Paste existing Markdown into the left editor or start writing from scratch. The preview updates immediately, reflecting GFM extensions and any math or code blocks.&lt;/p&gt;

&lt;p&gt;For inline math, wrap LaTeX in single dollar signs: &lt;code&gt;$E = mc^2$&lt;/code&gt;. Display math uses double dollar signs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;$$
&lt;span class="se"&gt;\i&lt;/span&gt;nt_{-&lt;span class="se"&gt;\i&lt;/span&gt;nfty}^{&lt;span class="se"&gt;\i&lt;/span&gt;nfty} e^{-x^2} dx = &lt;span class="se"&gt;\s&lt;/span&gt;qrt{&lt;span class="se"&gt;\p&lt;/span&gt;i}
$$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Code blocks with language identifiers get syntax highlighting. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fibonacci&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fibonacci&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;fibonacci&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A settings panel lets you toggle GFM features, math rendering, HTML support, and link behavior. You can load sample documents to explore formatting, and export the rendered output as HTML. Real-time statistics—word count, character count—help when you’re working against length constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to reach for it
&lt;/h2&gt;

&lt;p&gt;Use this tool when you need an accurate, zero-latency preview of Markdown destined for GitHub, GitLab, or similar platforms. It’s particularly valuable for documentation that mixes prose with mathematical notation, such as API specs involving formulas, academic papers, or engineering design documents. The KaTeX rendering matches what you’d see in many static site generators and notebook environments.&lt;/p&gt;

&lt;p&gt;Technical writers preparing release notes, README files, or internal specs benefit from the side-by-side view during collaborative reviews, where both source and rendered output must be visible. The statistics panel aids content planning when you’re targeting a specific word count. And because the tool processes everything in the browser, it’s safe to use with confidential material without routing through a server.&lt;/p&gt;

&lt;p&gt;Compared to a local editor’s Markdown preview plugin, this tool offers a dedicated, distraction-free environment with GFM and math support that may not be available in your IDE. It also serves as a quick validation step before pushing documentation to a repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The Advanced Markdown Previewer is available at &lt;a href="https://devtools.tools/markdown-previewer" rel="noopener noreferrer"&gt;https://devtools.tools/markdown-previewer&lt;/a&gt;. It runs entirely in the browser. Try it in about 30 seconds—paste a README or a math-heavy document to see the rendering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devtools.tools/markdown-table-generator" rel="noopener noreferrer"&gt;Markdown Table Generator&lt;/a&gt;&lt;/strong&gt; – Build properly aligned Markdown tables with a visual editor, then copy the formatted output directly into your documents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devtools.tools/github-readme-generator" rel="noopener noreferrer"&gt;GitHub README Generator&lt;/a&gt;&lt;/strong&gt; – Assemble a complete README with project badges, installation instructions, and structured sections tailored for GitHub repositories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these tools streamline the documentation pipeline from drafting to final formatting.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Try it: &lt;a href="https://www.devtools.tools/markdown-previewer" rel="noopener noreferrer"&gt;Advanced Markdown Previewer on DevTools&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Introducing AES Encryption: A Quick Tour</title>
      <dc:creator>Goksel Yesiller</dc:creator>
      <pubDate>Sun, 21 Jun 2026 14:16:20 +0000</pubDate>
      <link>https://dev.to/mryesiller/introducing-aes-encryption-a-quick-tour-3d1d</link>
      <guid>https://dev.to/mryesiller/introducing-aes-encryption-a-quick-tour-3d1d</guid>
      <description>&lt;p&gt;Developers implementing client-side encryption face a fundamental challenge: correctly implementing AES encryption requires deep knowledge of key derivation, initialization vectors, and authentication tags. One mistake in parameter selection or implementation can compromise the entire security model. The AES Encryption tool addresses this by providing a reference implementation that handles the cryptographic complexity while keeping sensitive data entirely within the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it stands out
&lt;/h2&gt;

&lt;p&gt;Most encryption tools fall into two problematic categories: server-based services that require trusting a third party with your plaintext, or complex libraries that require significant integration work. This tool occupies a unique position — it implements proper AES-GCM encryption with PBKDF2 key derivation using only the Web Crypto API, demonstrating how to build secure encryption without external dependencies.&lt;/p&gt;

&lt;p&gt;The implementation choices reflect current cryptographic best practices: AES-GCM for authenticated encryption, PBKDF2 with 100,000 iterations for key stretching, and proper random generation for salts and initialization vectors. As one of 200+ free browser tools on DevTools, it operates with no signup, no tracking — data processed entirely in the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;The AES Encryption tool implements AES-256-GCM encryption with PBKDF2 key derivation through the Web Crypto API. The tool generates cryptographically secure random values for salts and initialization vectors, derives encryption keys from passphrases using PBKDF2-HMAC-SHA256, and produces self-contained encrypted outputs that include all parameters necessary for decryption.&lt;/p&gt;

&lt;p&gt;The architecture ensures that plaintext, passphrases, and derived keys exist only in browser memory. The Web Crypto API provides the underlying cryptographic primitives, leveraging the browser's native implementation for both security and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it
&lt;/h2&gt;

&lt;p&gt;The interface exposes two operations: encryption and decryption. For encryption, enter plaintext and a passphrase. The tool generates a 16-byte salt and 12-byte initialization vector using &lt;code&gt;crypto.getRandomValues()&lt;/code&gt;, then derives a 256-bit key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Key derivation process&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRandomValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Uint8Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;iv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRandomValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Uint8Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;keyMaterial&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subtle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;importKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;raw&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;encoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;passphrase&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PBKDF2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deriveKey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subtle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deriveKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PBKDF2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;iterations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SHA-256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;keyMaterial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AES-GCM&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;encrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;decrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The encryption operation produces a base64-encoded output containing the salt, IV, and ciphertext with authentication tag. This self-contained format ensures portability — the encrypted data includes everything needed for decryption.&lt;/p&gt;

&lt;p&gt;For decryption, paste the encrypted output and provide the original passphrase. The tool parses the embedded parameters, re-derives the key using the same PBKDF2 process, and attempts decryption. Failed authentication (wrong passphrase or tampered data) results in a clear error.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to reach for it
&lt;/h2&gt;

&lt;p&gt;Several scenarios benefit from browser-based AES encryption. During development of applications with client-side encryption requirements, the tool serves as a reference for proper implementation patterns. Developers can encrypt test data, configuration values, or API keys without installing additional software.&lt;/p&gt;

&lt;p&gt;For debugging encryption-related issues, the tool provides a known-good implementation to verify expected outputs. When an application's encryption produces unexpected results, developers can use this tool to isolate whether the issue lies in their key derivation, encryption parameters, or data encoding.&lt;/p&gt;

&lt;p&gt;The tool also functions as an educational resource. Developers new to Web Crypto API can examine a working implementation of AES-GCM with proper key derivation, understanding how the pieces fit together before implementing similar functionality in their applications.&lt;/p&gt;

&lt;p&gt;Security auditors and penetration testers find value in quickly encrypting payloads or decrypting intercepted data during assessments, particularly when working with applications that implement similar AES-GCM schemes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical implementation details
&lt;/h2&gt;

&lt;p&gt;The tool demonstrates several cryptographic best practices. PBKDF2 iteration count is set to 100,000 — a balance between security and browser performance. The 96-bit IV size aligns with GCM mode recommendations. Salt generation uses cryptographically secure randomness, ensuring unique key derivation even with password reuse.&lt;/p&gt;

&lt;p&gt;Error handling distinguishes between different failure modes: invalid base64 encoding, missing parameters, and authentication failures each produce specific error messages. This granular feedback helps developers debug integration issues with their own implementations.&lt;/p&gt;

&lt;p&gt;The output format uses a simple concatenation scheme: &lt;code&gt;base64(salt || iv || ciphertext)&lt;/code&gt;. While not a standard format like JWE, this approach minimizes complexity while maintaining all necessary decryption parameters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The tool is available at &lt;a href="https://devtools.tools/aes-encryption" rel="noopener noreferrer"&gt;devtools.tools/aes-encryption&lt;/a&gt;. It runs entirely in the browser and takes about 30 seconds to encrypt your first piece of data. No installation, no account creation, no data leaves your device.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related tools
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devtools.tools/base64-encode-decode" rel="noopener noreferrer"&gt;Base64 Encoder/Decoder&lt;/a&gt;&lt;/strong&gt;: Convert between text and base64 encoding for data transmission&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devtools.tools/hmac-generator" rel="noopener noreferrer"&gt;HMAC Generator&lt;/a&gt;&lt;/strong&gt;: Create Hash-based Message Authentication Codes for message verification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://devtools.tools/uuid-generator" rel="noopener noreferrer"&gt;UUID Generator&lt;/a&gt;&lt;/strong&gt;: Generate cryptographically secure UUIDs for unique identifiers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;P.S. If you're implementing client-side encryption in your own applications, consider this tool a baseline for comparison. The Web Crypto API makes secure encryption accessible — the challenge lies in getting the details right.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Try it: &lt;a href="https://www.devtools.tools/aes-encryption" rel="noopener noreferrer"&gt;AES Encryption on DevTools&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
