<?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: Code Wiz Tools</title>
    <description>The latest articles on DEV Community by Code Wiz Tools (@codewiztools).</description>
    <link>https://dev.to/codewiztools</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%2F3991208%2Fcad72945-b0dd-456d-beaa-6862956a832d.png</url>
      <title>DEV Community: Code Wiz Tools</title>
      <link>https://dev.to/codewiztools</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codewiztools"/>
    <language>en</language>
    <item>
      <title>How to Calculate CGPA — Complete Guide for Pakistani University Students</title>
      <dc:creator>Code Wiz Tools</dc:creator>
      <pubDate>Sat, 27 Jun 2026 09:15:06 +0000</pubDate>
      <link>https://dev.to/codewiztools/how-to-calculate-cgpa-complete-guide-for-pakistani-university-students-13hh</link>
      <guid>https://dev.to/codewiztools/how-to-calculate-cgpa-complete-guide-for-pakistani-university-students-13hh</guid>
      <description>&lt;p&gt;If you are a university student in Pakistan, you have probably asked at least one of these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"What is my current CGPA?"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"How many As do I need to get off academic probation?"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"What CGPA do I need for a Gold Medal?"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This guide answers all of them — with the exact formula, worked examples, a grade conversion table, and a CGPA to percentage formula.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is GPA and CGPA?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GPA (Grade Point Average)&lt;/strong&gt; is your academic performance score for a single semester. It ranges from 0.0 to 4.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CGPA (Cumulative Grade Point Average)&lt;/strong&gt; is your overall academic performance across all semesters combined. It is a weighted average of all your semester GPAs, weighted by credit hours.&lt;/p&gt;

&lt;p&gt;Think of GPA as your score for one match, and CGPA as your season average.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Grade Scale — 4.0 Standard
&lt;/h2&gt;

&lt;p&gt;Most Pakistani universities (FAST-NUCES, NUST, COMSATS, UET, Punjab University, LUMS) use the 4.0 grade scale:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Grade Points&lt;/th&gt;
&lt;th&gt;Percentage (approx.)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A / A+&lt;/td&gt;
&lt;td&gt;4.00&lt;/td&gt;
&lt;td&gt;90–100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A−&lt;/td&gt;
&lt;td&gt;3.66&lt;/td&gt;
&lt;td&gt;85–89%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B+&lt;/td&gt;
&lt;td&gt;3.33&lt;/td&gt;
&lt;td&gt;80–84%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;3.00&lt;/td&gt;
&lt;td&gt;75–79%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B−&lt;/td&gt;
&lt;td&gt;2.66&lt;/td&gt;
&lt;td&gt;70–74%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C+&lt;/td&gt;
&lt;td&gt;2.33&lt;/td&gt;
&lt;td&gt;65–69%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;2.00&lt;/td&gt;
&lt;td&gt;60–64%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C−&lt;/td&gt;
&lt;td&gt;1.66&lt;/td&gt;
&lt;td&gt;55–59%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D+&lt;/td&gt;
&lt;td&gt;1.30&lt;/td&gt;
&lt;td&gt;50–54%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;1.00&lt;/td&gt;
&lt;td&gt;45–49%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;0.00&lt;/td&gt;
&lt;td&gt;Below 45%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How to Calculate Semester GPA — The Formula
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GPA = Σ (Grade Points × Credit Hours) ÷ Total Credit Hours
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step by step:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For each subject, multiply the grade points by the credit hours&lt;/li&gt;
&lt;li&gt;Add all those products together&lt;/li&gt;
&lt;li&gt;Divide by the total credit hours across all subjects&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Worked Example
&lt;/h3&gt;

&lt;p&gt;Say you completed 5 subjects this semester:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Subject&lt;/th&gt;
&lt;th&gt;Credits&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Grade Points&lt;/th&gt;
&lt;th&gt;Points × Credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data Structures&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;4.00&lt;/td&gt;
&lt;td&gt;12.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OOP&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;B+&lt;/td&gt;
&lt;td&gt;3.33&lt;/td&gt;
&lt;td&gt;9.99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calculus&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;3.00&lt;/td&gt;
&lt;td&gt;9.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Digital Logic&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;A−&lt;/td&gt;
&lt;td&gt;3.66&lt;/td&gt;
&lt;td&gt;10.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physics Lab&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;B+&lt;/td&gt;
&lt;td&gt;3.33&lt;/td&gt;
&lt;td&gt;3.33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;13&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;45.30&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GPA = 45.30 ÷ 13 = 3.48
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your semester GPA is &lt;strong&gt;3.48&lt;/strong&gt; — Dean's List territory at most universities.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Calculate Cumulative CGPA
&lt;/h2&gt;

&lt;p&gt;Once you have multiple semesters, CGPA is the weighted average of all semester GPAs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CGPA = Σ (Semester GPA × Semester Credits) ÷ Total Credits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Worked Example — 4 Semesters
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Semester&lt;/th&gt;
&lt;th&gt;GPA&lt;/th&gt;
&lt;th&gt;Credits&lt;/th&gt;
&lt;th&gt;GPA × Credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Semester 1&lt;/td&gt;
&lt;td&gt;3.20&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;57.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semester 2&lt;/td&gt;
&lt;td&gt;3.48&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;45.24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semester 3&lt;/td&gt;
&lt;td&gt;3.75&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;67.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semester 4&lt;/td&gt;
&lt;td&gt;3.10&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;55.80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;67&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;226.14&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CGPA = 226.14 ÷ 67 = 3.37
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your cumulative CGPA is &lt;strong&gt;3.37&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Notice that Semester 3 (GPA 3.75) carries more weight than Semester 2 (GPA 3.48) because it had more credit hours. This is why taking extra courses in a good semester can significantly lift your CGPA.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Convert CGPA to Percentage
&lt;/h2&gt;

&lt;p&gt;The most widely used formula at Pakistani universities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Percentage = CGPA × 25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CGPA&lt;/th&gt;
&lt;th&gt;Percentage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4.00&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.75&lt;/td&gt;
&lt;td&gt;93.75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.50&lt;/td&gt;
&lt;td&gt;87.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.00&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.50&lt;/td&gt;
&lt;td&gt;62.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.00&lt;/td&gt;
&lt;td&gt;50%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Some universities use &lt;code&gt;CGPA × 24&lt;/code&gt; or other multipliers. Always check your university's official transcript or academic policy for the exact conversion — it can vary by department.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  CGPA Thresholds at Pakistani Universities
&lt;/h2&gt;

&lt;p&gt;Most universities follow a similar scale for awards and academic standing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gold Medal / President's Honor Roll:&lt;/strong&gt; CGPA 3.5 to 4.0&lt;br&gt;
Usually awarded to the top 1–3 students in a degree program at convocation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dean's List / Silver Medal:&lt;/strong&gt; CGPA 3.0 to 3.49&lt;br&gt;
Recognized on your transcript and at convocation. Some universities require 3.0+ every semester.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good Standing:&lt;/strong&gt; CGPA 2.5 to 2.99&lt;br&gt;
You are meeting requirements and progressing normally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Satisfactory / Minimum:&lt;/strong&gt; CGPA 2.0 to 2.49&lt;br&gt;
You are passing but may face restrictions on elective choices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Academic Probation:&lt;/strong&gt; Below CGPA 2.0&lt;br&gt;
At FAST-NUCES, NUST, COMSATS, and most other universities, falling below 2.0 triggers academic probation. You may be required to repeat subjects, reduce credit load, or face expulsion after multiple semesters on probation.&lt;/p&gt;


&lt;h2&gt;
  
  
  3 Common CGPA Mistakes Students Make
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Mistake 1 — Not counting lab credit hours
&lt;/h3&gt;

&lt;p&gt;Lab courses are usually 1 credit hour. Students often forget to include them in the calculation. A failed lab (F = 0.00) in 1 credit hour pulls your GPA down more than you expect relative to its small credit weight.&lt;/p&gt;
&lt;h3&gt;
  
  
  Mistake 2 — Ignoring low-credit subjects
&lt;/h3&gt;

&lt;p&gt;A 1-credit hour subject with an A (4.0) contributes far less to your GPA than a 3-credit subject with a B (3.0). Focus your exam preparation time proportional to credit hours.&lt;/p&gt;
&lt;h3&gt;
  
  
  Mistake 3 — Thinking one bad semester is permanent
&lt;/h3&gt;

&lt;p&gt;Because CGPA is a weighted average across all semesters, one bad semester does less damage than it feels like. If you score 3.80 GPA in a strong 21-credit semester, it will significantly offset a weaker previous semester. Recovery is possible — but it requires consistently strong semesters, not just one good one.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Calculate: What GPA Do I Need This Semester?
&lt;/h2&gt;

&lt;p&gt;You have a CGPA of 2.9 after 3 semesters (54 total credits) and want to reach 3.0 by the end of next semester (18 credits).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Target CGPA = (Current GPA × Current Credits + Next GPA × Next Credits) 
              ÷ (Current Credits + Next Credits)

3.0 = (2.9 × 54 + X × 18) ÷ (54 + 18)
3.0 × 72 = 156.6 + 18X
216 = 156.6 + 18X
18X = 59.4
X = 3.30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You need a &lt;strong&gt;3.30 GPA next semester&lt;/strong&gt; to bring your CGPA up to 3.0.&lt;/p&gt;

&lt;p&gt;This type of target GPA calculation is useful for planning how hard you need to work in an upcoming semester to reach a specific goal.&lt;/p&gt;




&lt;h2&gt;
  
  
  Free CGPA Calculator
&lt;/h2&gt;

&lt;p&gt;If you do not want to do this by hand, I built a free &lt;strong&gt;&lt;a href="https://codewiztools.com/tools/cgpa-calculator.html" rel="noopener noreferrer"&gt;CGPA Calculator&lt;/a&gt;&lt;/strong&gt; that handles both semester GPA and cumulative CGPA:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add subjects with grade and credit hours → Semester GPA calculated instantly&lt;/li&gt;
&lt;li&gt;Add multiple semesters → Cumulative CGPA calculated with correct credit weighting&lt;/li&gt;
&lt;li&gt;Grade scale table built in — no manual lookup needed&lt;/li&gt;
&lt;li&gt;Shows CGPA to percentage conversion automatically&lt;/li&gt;
&lt;li&gt;100% browser-based — your academic data never leaves your device&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GPA formula:&lt;/strong&gt; Sum of (Grade Points × Credits) ÷ Total Credits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CGPA formula:&lt;/strong&gt; Sum of (Semester GPA × Semester Credits) ÷ Total Credits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CGPA to percentage:&lt;/strong&gt; CGPA × 25 (verify with your university)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gold Medal threshold:&lt;/strong&gt; 3.5+ at most Pakistani universities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Academic probation:&lt;/strong&gt; Below 2.0 at most universities&lt;/li&gt;
&lt;li&gt;One bad semester is recoverable — consistent strong semesters are the strategy&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Check out &lt;a href="https://codewiztools.com" rel="noopener noreferrer"&gt;CodeWizTools&lt;/a&gt; for more free tools built for students and developers — attendance calculator, assignment file renamer, PDF merger, and more.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>students</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Base64 Encoding Explained — JWT Tokens, Data URIs, and Kubernetes Secrets</title>
      <dc:creator>Code Wiz Tools</dc:creator>
      <pubDate>Thu, 25 Jun 2026 22:17:00 +0000</pubDate>
      <link>https://dev.to/codewiztools/base64-encoding-explained-jwt-tokens-data-uris-and-kubernetes-secrets-2g7d</link>
      <guid>https://dev.to/codewiztools/base64-encoding-explained-jwt-tokens-data-uris-and-kubernetes-secrets-2g7d</guid>
      <description>&lt;p&gt;You have probably copied a Base64 string a hundred times without thinking about it. That long chain of letters and slashes at the end of a JWT. The &lt;code&gt;data:image/png;base64,&lt;/code&gt; blob in a CSS file. The &lt;code&gt;Authorization: Basic&lt;/code&gt; header in a Postman collection.&lt;/p&gt;

&lt;p&gt;Base64 is everywhere in a developer's daily work — and most developers have a fuzzy mental model of what it actually does. This article clears that up, and covers the five real production use cases where you will encounter it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Base64 and why does it exist?
&lt;/h2&gt;

&lt;p&gt;Base64 converts binary data into a string of &lt;strong&gt;64 printable ASCII characters&lt;/strong&gt;: the letters A–Z and a–z, digits 0–9, plus &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;/&lt;/code&gt;. The name literally describes the alphabet size.&lt;/p&gt;

&lt;p&gt;The reason it exists: many systems that move data were designed for &lt;strong&gt;text only&lt;/strong&gt;. Email protocols (SMTP), HTML attributes, JSON payloads, XML documents, HTTP headers — all of these were built around the assumption that data is readable ASCII text. Raw binary bytes can corrupt or break these systems.&lt;/p&gt;

&lt;p&gt;Base64 solves this by guaranteeing that whatever you encode will contain only characters that transmit safely through any text-based system.&lt;/p&gt;

&lt;h3&gt;
  
  
  The size tradeoff
&lt;/h3&gt;

&lt;p&gt;Base64 encodes every 3 bytes of input into 4 output characters. That means encoded output is always approximately &lt;strong&gt;33% larger&lt;/strong&gt; than the original data. This is the price of universality.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;=&lt;/code&gt; or &lt;code&gt;==&lt;/code&gt; at the end of a Base64 string is padding — added when the input length is not divisible by 3. One &lt;code&gt;=&lt;/code&gt; means one byte of padding was needed; &lt;code&gt;==&lt;/code&gt; means two bytes. &lt;strong&gt;Never strip padding manually&lt;/strong&gt; — it is part of the RFC 4648 standard and removing it breaks decoding.&lt;/p&gt;




&lt;h2&gt;
  
  
  Base64 is NOT encryption
&lt;/h2&gt;

&lt;p&gt;This is the most important thing to understand, and it gets confused constantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base64 is encoding, not encryption.&lt;/strong&gt; Anyone can decode it instantly with zero key or password. There is nothing protecting the data — it is just a different representation.&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;// This is NOT secure&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;secret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin:password123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Result: YWRtaW46cGFzc3dvcmQxMjM=&lt;/span&gt;
&lt;span class="c1"&gt;// Anyone can run atob("YWRtaW46cGFzc3dvcmQxMjM=") and read it&lt;/span&gt;

&lt;span class="c1"&gt;// This is what it looks like in an HTTP Basic Auth header&lt;/span&gt;
&lt;span class="c1"&gt;// Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=&lt;/span&gt;
&lt;span class="c1"&gt;// The credentials are completely readable — this is just transport formatting&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never store passwords, API secrets, or private tokens as Base64 and assume they are secure. Use proper encryption (AES-256, bcrypt, Argon2) when you need actual protection.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 5 places you will encounter Base64 in production
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. JWT Tokens
&lt;/h3&gt;

&lt;p&gt;A JWT (JSON Web Token) has three Base64URL-encoded parts separated by dots:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWxpY2UifQ.abc123sig
     ^header                  ^payload              ^signature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The header and payload are Base64URL encoded — not standard Base64. Base64URL is a URL-safe variant that replaces &lt;code&gt;+&lt;/code&gt; with &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;/&lt;/code&gt; with &lt;code&gt;_&lt;/code&gt; to avoid issues in URLs and HTTP headers.&lt;/p&gt;

&lt;p&gt;To read a JWT payload without a library:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take the middle section (between the two dots)&lt;/li&gt;
&lt;li&gt;Replace all &lt;code&gt;-&lt;/code&gt; with &lt;code&gt;+&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Replace all &lt;code&gt;_&lt;/code&gt; with &lt;code&gt;/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Decode from Base64
&lt;/li&gt;
&lt;/ol&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;decodeJwtPayload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&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;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="c1"&gt;// Convert Base64URL to standard Base64&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/-/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/_/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&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;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWxpY2UiLCJleHAiOjE3MjAwMDAwMDB9.sig&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;decodeJwtPayload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// → { user: "alice", exp: 1720000000 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use the &lt;a href="https://codewiztools.com/tools/base64.html" rel="noopener noreferrer"&gt;Base64 decoder on CodeWizTools&lt;/a&gt; to decode JWT payloads manually — paste the middle section and the tool decodes it to readable JSON.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Never verify a JWT by just decoding the payload. Always verify the signature server-side. Client-side JWT decoding is fine for reading claims (user ID, role, expiry) — but never trust unverified claims for authorization decisions.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. HTTP Basic Authentication
&lt;/h3&gt;

&lt;p&gt;HTTP Basic Auth sends credentials in the &lt;code&gt;Authorization&lt;/code&gt; header as Base64-encoded &lt;code&gt;username:password&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Decoded: &lt;code&gt;admin:password123&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is the standard format for API basic auth. Most REST clients (Postman, curl, Insomnia) handle this automatically, but knowing the encoding format helps when you are debugging raw HTTP requests or writing test scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# curl with Basic Auth — curl encodes this for you&lt;/span&gt;
curl &lt;span class="nt"&gt;-u&lt;/span&gt; admin:password123 https://api.example.com/data

&lt;span class="c"&gt;# Equivalent with manual header&lt;/span&gt;
curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM="&lt;/span&gt; https://api.example.com/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Data URIs — Embedding Images in HTML and CSS
&lt;/h3&gt;

&lt;p&gt;A data URI lets you embed a file directly into HTML or CSS without a separate HTTP request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Standard image tag with external URL --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/icon.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Same icon embedded as Base64 data URI — no HTTP request needed --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg="&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The format is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data:[media type];base64,[Base64 encoded data]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When to use data URIs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small icons (under 2–3 KB) that are critical for above-the-fold rendering&lt;/li&gt;
&lt;li&gt;Email templates — external images are often blocked by email clients&lt;/li&gt;
&lt;li&gt;Canvas-generated images you want to save or display&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When NOT to use them:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images over ~5 KB — the 33% size overhead becomes significant&lt;/li&gt;
&lt;li&gt;Images used on multiple pages — they cannot be cached separately&lt;/li&gt;
&lt;li&gt;Lazy-loaded content — data URIs cannot be lazy loaded&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Kubernetes Secrets
&lt;/h3&gt;

&lt;p&gt;Every value in a Kubernetes Secret manifest must be Base64-encoded:&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;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Secret&lt;/span&gt;
&lt;span class="na"&gt;metadata&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;db-credentials&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Opaque&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;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;YWRtaW4=&lt;/span&gt;          &lt;span class="c1"&gt;# base64 of "admin"&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cGFzc3dvcmQxMjM=&lt;/span&gt;  &lt;span class="c1"&gt;# base64 of "password123"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a common point of confusion for developers new to Kubernetes — it looks like the credentials are protected, but Base64 is just encoding, not encryption. Kubernetes Secrets are not inherently secure; you need additional tooling (Sealed Secrets, HashiCorp Vault, AWS Secrets Manager) for real secret management.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Encoding a secret value for a Kubernetes manifest&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"password123"&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt;
&lt;span class="c"&gt;# Output: cGFzc3dvcmQxMjM=&lt;/span&gt;

&lt;span class="c"&gt;# The -n flag is important — without it, echo adds a newline&lt;/span&gt;
&lt;span class="c"&gt;# which gets encoded and causes authentication failures&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Sending Binary Files in JSON APIs
&lt;/h3&gt;

&lt;p&gt;REST APIs that use JSON cannot transmit raw binary data (images, PDFs, audio files) directly. Base64 is the standard workaround:&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;"filename"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"report.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"content_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3Ro..."&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;This pattern is used in email APIs (SendGrid, Mailgun), document processing APIs, and any API that needs to receive or send files over a JSON interface.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Unicode problem — why most Base64 tools break
&lt;/h2&gt;

&lt;p&gt;The browser's built-in &lt;code&gt;btoa()&lt;/code&gt; function only handles ASCII. Try encoding text with non-ASCII characters and you will get an error:&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="nf"&gt;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;اردو&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → Uncaught DOMException: The string to be encoded &lt;/span&gt;
&lt;span class="c1"&gt;//   contains characters outside of the Latin1 range.&lt;/span&gt;

&lt;span class="nf"&gt;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;😀&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// → Same error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The correct way to encode Unicode text to Base64 in JavaScript:&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;// WRONG — breaks on any non-ASCII character&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;broken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// CORRECT — handles full Unicode (Arabic, Urdu, Chinese, emoji)&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;encodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&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;bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextEncoder&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;str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;byte&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCharCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;byte&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;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;decodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base64&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;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;base64&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;bytes&lt;/span&gt; &lt;span class="o"&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="nx"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDecoder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Now these work&lt;/span&gt;
&lt;span class="nf"&gt;encodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;اردو&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// → "2KfYsdm/2Yg="&lt;/span&gt;
&lt;span class="nf"&gt;encodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;😀&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// → "8J+YgA=="&lt;/span&gt;
&lt;span class="nf"&gt;encodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;中文&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// → "5Lit5paH"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;TextEncoder&lt;/code&gt; converts the string to UTF-8 bytes first, then &lt;code&gt;btoa&lt;/code&gt; encodes those bytes. &lt;code&gt;TextDecoder&lt;/code&gt; reverses the process. This is the correct standard per RFC 4648 and is what major frameworks and APIs use.&lt;/p&gt;

&lt;p&gt;The older pattern &lt;code&gt;btoa(unescape(encodeURIComponent(str)))&lt;/code&gt; also works but uses the deprecated &lt;code&gt;unescape()&lt;/code&gt; function — avoid it in new code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Base64 vs Base64URL — which one is it?
&lt;/h2&gt;

&lt;p&gt;Standard Base64 uses &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;/&lt;/code&gt; in its alphabet. These characters have special meaning in URLs (&lt;code&gt;+&lt;/code&gt; = space in query strings, &lt;code&gt;/&lt;/code&gt; = path separator), which causes problems when Base64 strings appear in URLs or HTTP headers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Base64URL&lt;/strong&gt; solves this by substituting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt; → &lt;code&gt;-&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/&lt;/code&gt; → &lt;code&gt;_&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And optionally omitting the &lt;code&gt;=&lt;/code&gt; padding.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Characters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JWT tokens&lt;/td&gt;
&lt;td&gt;Base64URL&lt;/td&gt;
&lt;td&gt;A–Z, a–z, 0–9, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;_&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes secrets&lt;/td&gt;
&lt;td&gt;Standard Base64&lt;/td&gt;
&lt;td&gt;A–Z, a–z, 0–9, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data URIs&lt;/td&gt;
&lt;td&gt;Standard Base64&lt;/td&gt;
&lt;td&gt;A–Z, a–z, 0–9, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP Basic Auth&lt;/td&gt;
&lt;td&gt;Standard Base64&lt;/td&gt;
&lt;td&gt;A–Z, a–z, 0–9, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth 2.0 PKCE&lt;/td&gt;
&lt;td&gt;Base64URL&lt;/td&gt;
&lt;td&gt;A–Z, a–z, 0–9, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;_&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you see &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;_&lt;/code&gt; in a Base64-looking string, it is Base64URL (almost certainly a JWT).&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick reference
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Standard encode/decode (ASCII only — breaks on Unicode)&lt;/span&gt;
&lt;span class="nf"&gt;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="c1"&gt;// → "aGVsbG8="&lt;/span&gt;
&lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aGVsbG8=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;// → "hello"&lt;/span&gt;

&lt;span class="c1"&gt;// Unicode-safe encode/decode (use this in production)&lt;/span&gt;
&lt;span class="nf"&gt;encodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;اردو&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;// → "2KfYsdm/2Yg="&lt;/span&gt;
&lt;span class="nf"&gt;decodeBase64Unicode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2KfYsdm/2Yg=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;// → "اردو"&lt;/span&gt;

&lt;span class="c1"&gt;// Decode a JWT payload (read-only — does not verify signature)&lt;/span&gt;
&lt;span class="nf"&gt;decodeJwtPayload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWxpY2UifQ.sig&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// → { user: "alice" }&lt;/span&gt;

&lt;span class="c1"&gt;// Encode for Kubernetes secret (CLI)&lt;/span&gt;
&lt;span class="nx"&gt;echo&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-secret-value&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;base64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tool
&lt;/h2&gt;

&lt;p&gt;For quick encoding and decoding without writing code — I built a free &lt;strong&gt;&lt;a href="https://codewiztools.com/tools/base64.html" rel="noopener noreferrer"&gt;Base64 Encoder &amp;amp; Decoder&lt;/a&gt;&lt;/strong&gt; that handles full Unicode correctly (Arabic, Urdu, Chinese, emoji), supports JWT payload decoding, and runs 100% in the browser with no data sent to any server. Useful for inspecting JWT tokens during API development, preparing Kubernetes secret values, and debugging Base64 encoding issues.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Base64 converts binary data to printable ASCII text — &lt;strong&gt;not encryption&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;It appears in JWT tokens (Base64URL variant), HTTP auth, data URIs, Kubernetes secrets, and JSON file APIs&lt;/li&gt;
&lt;li&gt;Standard &lt;code&gt;btoa()&lt;/code&gt; breaks on Unicode — use &lt;code&gt;TextEncoder&lt;/code&gt; + &lt;code&gt;btoa&lt;/code&gt; instead&lt;/li&gt;
&lt;li&gt;Base64URL uses &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;_&lt;/code&gt; instead of &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;/&lt;/code&gt; — look for it in JWTs and OAuth&lt;/li&gt;
&lt;li&gt;Encoded output is ~33% larger than input — factor this in for data URIs and API payloads&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Building something with CodeWizTools? Check out the full collection of free browser-based utilities at &lt;a href="https://codewiztools.com" rel="noopener noreferrer"&gt;codewiztools.com&lt;/a&gt; — JSON formatter, URL encoder, RGBA color picker, Lorem Ipsum generator, and more.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>URL Encoding vs Percent Encoding — Are They the Same Thing?</title>
      <dc:creator>Code Wiz Tools</dc:creator>
      <pubDate>Sat, 20 Jun 2026 14:38:43 +0000</pubDate>
      <link>https://dev.to/codewiztools/url-encoding-vs-percent-encoding-are-they-the-same-thing-553j</link>
      <guid>https://dev.to/codewiztools/url-encoding-vs-percent-encoding-are-they-the-same-thing-553j</guid>
      <description>&lt;p&gt;Most developers use these two terms interchangeably. Stack Overflow threads mix them up. Documentation switches between them mid-paragraph. Even MDN uses both terms in the same article.&lt;br&gt;
So are they the same thing — or is there a real difference?&lt;br&gt;
Short answer: they refer to the same mechanism, but come from different contexts. Understanding which is which will save you from some genuinely painful debugging sessions.&lt;br&gt;
&lt;strong&gt;What is URL Encoding?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codewiztools.com/tools/url-encoder.html" rel="noopener noreferrer"&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%2Farticles%2Fpd5jf0rutaiwj9e4tf4m.PNG" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;br&gt;
URL encoding is the informal, developer-facing term for converting unsafe characters in a URL into a format that can be safely transmitted over the internet.&lt;br&gt;
The core problem it solves: URLs can only contain a limited set of characters. Letters (A–Z, a–z), digits (0–9), and a handful of symbols (-, _, ., ~) are always safe. Everything else — spaces, ampersands, equal signs, non-English characters — can break URL parsing if left as-is.&lt;br&gt;
URL encoding converts those unsafe characters into a % sign followed by a two-digit hexadecimal code.&lt;br&gt;
hello world  →  hello%20world&lt;br&gt;
café         →  caf%C3%A9&lt;br&gt;
q=a&amp;amp;b        →  q%3Da%26b&lt;br&gt;
This term became common because browsers, frameworks, and tutorials all started calling it "URL encoding" — it is descriptive and practical.&lt;br&gt;
&lt;strong&gt;What is Percent Encoding?&lt;/strong&gt;&lt;br&gt;
Percent encoding is the official, RFC-defined term for the exact same mechanism.&lt;br&gt;
It is formally defined in RFC 3986 — the Internet standard that defines the syntax of URIs (Uniform Resource Identifiers). The spec calls it "percent-encoding" because every encoded character is represented as a percent sign followed by two hexadecimal digits.&lt;br&gt;
From RFC 3986:&lt;/p&gt;

&lt;p&gt;A percent-encoding mechanism is used to represent a data octet in a component when that octet's corresponding character is outside the allowed set or is being used as a delimiter of, or within, the component.&lt;/p&gt;

&lt;p&gt;So when you are reading a W3C spec, an HTTP RFC, or any formal documentation — you will see "percent encoding." When you are reading a tutorial, a Stack Overflow answer, or framework docs — you will see "URL encoding."&lt;br&gt;
&lt;strong&gt;Same thing. Different contexts.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Real Difference You Actually Need to Know&lt;/strong&gt;&lt;br&gt;
Here is where it gets practical — and where most bugs come from.&lt;br&gt;
In JavaScript, you have two built-in functions for encoding URLs. They are not interchangeable:&lt;br&gt;
&lt;strong&gt;encodeURI vs encodeURIComponent — Code Examples&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Wrong Way (a very common mistake)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;const searchUrl = "&lt;a href="https://example.com/search?q=hello" rel="noopener noreferrer"&gt;https://example.com/search?q=hello&lt;/a&gt; world&amp;amp;lang=en";&lt;br&gt;
// WRONG — using encodeURIComponent on a full URL&lt;br&gt;
encodeURIComponent(searchUrl);&lt;br&gt;
// → "https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%26lang%3Den"&lt;br&gt;
// The URL is now completely broken — slashes, colons, question marks all encoded&lt;br&gt;
This is the most common mistake. The URL looks encoded, but it is useless — a browser cannot parse it as a URL anymore.&lt;br&gt;
&lt;strong&gt;The Right Way — encodeURI for full URLs&lt;/strong&gt;&lt;br&gt;
const searchUrl = "&lt;a href="https://example.com/search?q=hello" rel="noopener noreferrer"&gt;https://example.com/search?q=hello&lt;/a&gt; world&amp;amp;lang=en";&lt;/p&gt;

&lt;p&gt;// CORRECT — encodeURI preserves URL structure&lt;br&gt;
encodeURI(searchUrl);&lt;br&gt;
// → "&lt;a href="https://example.com/search?q=hello%20world&amp;amp;lang=en" rel="noopener noreferrer"&gt;https://example.com/search?q=hello%20world&amp;amp;lang=en&lt;/a&gt;"&lt;br&gt;
// Only the space is encoded — the URL structure is intact&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Right Way — encodeURIComponent for query values&lt;/strong&gt;&lt;br&gt;
const userInput = "hello world &amp;amp; more";&lt;br&gt;
const baseUrl   = "&lt;a href="https://example.com/search?q=" rel="noopener noreferrer"&gt;https://example.com/search?q=&lt;/a&gt;";&lt;/p&gt;

&lt;p&gt;// CORRECT — encode only the VALUE, not the whole URL&lt;br&gt;
const fullUrl = baseUrl + encodeURIComponent(userInput);&lt;br&gt;
// → "&lt;a href="https://example.com/search?q=hello%20world%20%26%20more" rel="noopener noreferrer"&gt;https://example.com/search?q=hello%20world%20%26%20more&lt;/a&gt;"&lt;br&gt;
// The &amp;amp; inside the value is encoded to %26 — no ambiguity&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-world example — passing a redirect URL in a query string&lt;/strong&gt;&lt;br&gt;
// You want to pass this URL as a query parameter value&lt;br&gt;
const redirectUrl = "&lt;a href="https://myapp.com/dashboard?tab=settings" rel="noopener noreferrer"&gt;https://myapp.com/dashboard?tab=settings&lt;/a&gt;";&lt;/p&gt;

&lt;p&gt;// WRONG — this breaks the outer URL's query string&lt;br&gt;
"&lt;a href="https://auth.example.com/login?redirect=" rel="noopener noreferrer"&gt;https://auth.example.com/login?redirect=&lt;/a&gt;" + redirectUrl;&lt;br&gt;
// → "&lt;a href="https://auth.example.com/login?redirect=https://myapp.com/dashboard?tab=settings" rel="noopener noreferrer"&gt;https://auth.example.com/login?redirect=https://myapp.com/dashboard?tab=settings&lt;/a&gt;"&lt;br&gt;
// The second ? and = confuse every URL parser&lt;/p&gt;

&lt;p&gt;// CORRECT — encode the redirect value first&lt;br&gt;
"&lt;a href="https://auth.example.com/login?redirect=" rel="noopener noreferrer"&gt;https://auth.example.com/login?redirect=&lt;/a&gt;" + encodeURIComponent(redirectUrl);&lt;br&gt;
// → "&lt;a href="https://auth.example.com/login?redirect=https%3A%2F%2Fmyapp.com%2Fdashboard%3Ftab%3Dsettings" rel="noopener noreferrer"&gt;https://auth.example.com/login?redirect=https%3A%2F%2Fmyapp.com%2Fdashboard%3Ftab%3Dsettings&lt;/a&gt;"&lt;br&gt;
// Clean — outer URL parses correctly, inner URL recoverable via decodeURIComponent&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The One-Line Rule to Remember&lt;/strong&gt;&lt;br&gt;
Use encodeURIComponent when encoding a value that goes inside a URL.&lt;br&gt;
Use encodeURI when encoding a complete URL as a string.&lt;/p&gt;

&lt;p&gt;If you remember nothing else from this article, remember that line. It will prevent 90% of URL encoding bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool&lt;/strong&gt;&lt;br&gt;
If you need to quickly encode or decode URLs without writing code — I built a free URL Encoder &amp;amp; Percent Encoding Converter that supports both encodeURI and encodeURIComponent modes, handles full Unicode including Arabic and Urdu, and runs 100% in the browser with no data sent to any server.&lt;br&gt;
It also includes the full percent encoding reference table and a real-time character counter — useful when debugging API calls or OAuth redirect parameters.&lt;br&gt;
&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
URL encoding and percent encoding are the same mechanism — one term is informal and developer-friendly, the other is the official RFC standard. The distinction that actually matters day-to-day is encodeURI vs encodeURIComponent — and using the wrong one is responsible for a surprising number of broken integrations, failed API calls, and corrupted redirect flows.&lt;br&gt;
When in doubt: if you are encoding a value that goes inside a URL, use encodeURIComponent. Every time.&lt;/p&gt;

&lt;p&gt;Found this useful? I am building &lt;a href="https://codewiztools.com/" rel="noopener noreferrer"&gt;CodeWizTools&lt;/a&gt; — a collection of free, browser-based utilities for developers and students. No login, no server uploads, 100% private.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
