<?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: Samuel Boadu</title>
    <description>The latest articles on DEV Community by Samuel Boadu (@boadusamuel).</description>
    <link>https://dev.to/boadusamuel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F545798%2Faf26e648-7f6d-433c-8aa3-3ee5963cc261.jpeg</url>
      <title>DEV Community: Samuel Boadu</title>
      <link>https://dev.to/boadusamuel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/boadusamuel"/>
    <language>en</language>
    <item>
      <title>fastTinker: A Multi-Language Desktop Playground for Rapid Prototyping</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Tue, 11 Nov 2025 10:47:41 +0000</pubDate>
      <link>https://dev.to/boadusamuel/fasttinker-a-multi-language-desktop-playground-for-rapid-prototyping-3icn</link>
      <guid>https://dev.to/boadusamuel/fasttinker-a-multi-language-desktop-playground-for-rapid-prototyping-3icn</guid>
      <description>&lt;p&gt;Have you ever found yourself switching between different tools just to test a quick JavaScript snippet, then a PHP script, and back to TypeScript? I've been there, and that frustration led me to build &lt;strong&gt;fastTinker&lt;/strong&gt; — a unified desktop playground that lets you switch between multiple programming languages seamlessly, all in one beautiful Electron app.&lt;/p&gt;

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

&lt;p&gt;As developers, we often need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quickly test code snippets without setting up a full project&lt;/li&gt;
&lt;li&gt;Experiment with different languages in the same workflow&lt;/li&gt;
&lt;li&gt;Prototype ideas rapidly without the overhead of project scaffolding&lt;/li&gt;
&lt;li&gt;Learn new languages with immediate feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most existing tools are either language-specific or require a browser, which isn't ideal for testing backend code or using language-specific package managers. I wanted something that combined the power of desktop applications with the flexibility of online playgrounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter fastTinker
&lt;/h2&gt;

&lt;p&gt;fastTinker is an Electron-based desktop application that provides a unified coding environment for multiple programming languages. Currently supporting &lt;strong&gt;JavaScript/TypeScript&lt;/strong&gt; and &lt;strong&gt;PHP&lt;/strong&gt;, with an architecture designed to easily add more languages in the future.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p35zofne67rxa7cw6ty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p35zofne67rxa7cw6ty.png" alt="fastTinker in action" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🚀 Multi-Language Support
&lt;/h3&gt;

&lt;p&gt;Switch between JavaScript/TypeScript and PHP with a simple dropdown selector. Each language gets its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Package manager (NPM for JS/TS, Composer for PHP)&lt;/li&gt;
&lt;li&gt;Runtime environment&lt;/li&gt;
&lt;li&gt;Default snippets&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📦 Language-Specific Package Management
&lt;/h3&gt;

&lt;p&gt;No more switching between terminals or tools. Install packages directly from the app:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript/TypeScript:&lt;/strong&gt;&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;// Install packages via Settings &amp;gt; NPM Packages&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;axios&lt;/span&gt;&lt;span class="dl"&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;data&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;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com/data&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="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PHP:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="c1"&gt;// Install packages via Settings &amp;gt; Composer Packages&lt;/span&gt;
&lt;span class="k"&gt;require_once&lt;/span&gt; &lt;span class="s1"&gt;'vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Use your installed packages here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎨 Monaco Editor Integration
&lt;/h3&gt;

&lt;p&gt;Powered by the same editor that runs VS Code, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full IntelliSense and autocomplete&lt;/li&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Error detection&lt;/li&gt;
&lt;li&gt;Code formatting&lt;/li&gt;
&lt;li&gt;Multiple tabs support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✨ Magic Comments
&lt;/h3&gt;

&lt;p&gt;Inspect variable values inline while coding:&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;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&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;fastTinker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.0.0&lt;/span&gt;&lt;span class="dl"&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;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// $data, $count&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run the code, the values appear inline in the output, making debugging and exploration much easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Auto-Run Mode
&lt;/h3&gt;

&lt;p&gt;Enable auto-run to execute code as you type (with a debounce). Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning and experimentation&lt;/li&gt;
&lt;li&gt;Real-time feedback&lt;/li&gt;
&lt;li&gt;Prototyping ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💾 Snippets Management
&lt;/h3&gt;

&lt;p&gt;Save and organize your code snippets by language. Each snippet is automatically tagged with the correct file extension and organized by language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture &amp;amp; Technical Implementation
&lt;/h2&gt;

&lt;p&gt;fastTinker is built with &lt;strong&gt;Electron&lt;/strong&gt; and uses a modular architecture that makes adding new languages straightforward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fastTinker/
├── src/
│   ├── main.js          # Electron main process with multi-language execution
│   └── preload.js       # Preload script for secure IPC
├── scripts/
│   └── renderer.js      # Renderer process (UI logic with language switching)
├── styles/
│   └── main.css         # Application styles
└── index.html           # Main HTML file with language selector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Language Routing
&lt;/h3&gt;

&lt;p&gt;The core of fastTinker is its language-aware execution system. IPC handlers route execution based on the selected language:&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="nx"&gt;ipcMain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;execute-code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userDataPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;magicComments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;language&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;language&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;php&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="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;executePHPCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userDataPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;magicComments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Default to javascript/typescript&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;executeJSCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userDataPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;magicComments&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding New Languages
&lt;/h3&gt;

&lt;p&gt;The architecture is designed for extensibility. To add a new language, you need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update the LANGUAGES configuration&lt;/strong&gt; in &lt;code&gt;src/main.js&lt;/code&gt;:
&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;const&lt;/span&gt; &lt;span class="nx"&gt;LANGUAGES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;javascript&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;javascript&lt;/span&gt;&lt;span class="dl"&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="s1"&gt;JavaScript/TypeScript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;defaultExtension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;monacoLanguage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;npm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;extensions&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="s1"&gt;.js&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="s1"&gt;.ts&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="na"&gt;php&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;php&lt;/span&gt;&lt;span class="dl"&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="s1"&gt;PHP&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;defaultExtension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.php&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;monacoLanguage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;php&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;composer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;extensions&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="s1"&gt;.php&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="c1"&gt;// Add your language here&lt;/span&gt;
  &lt;span class="na"&gt;python&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;python&lt;/span&gt;&lt;span class="dl"&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="s1"&gt;Python&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;defaultExtension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.py&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;monacoLanguage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;python&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pip&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;extensions&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="s1"&gt;.py&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Implement the execution handler&lt;/strong&gt; in &lt;code&gt;src/main.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add to the language selector&lt;/strong&gt; in &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update default content&lt;/strong&gt; in &lt;code&gt;scripts/renderer.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
git clone https://github.com/boadusamuel/fastTinker.git
&lt;span class="nb"&gt;cd &lt;/span&gt;fastTinker

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Run in development mode&lt;/span&gt;
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Building for Distribution
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Build for your platform&lt;/span&gt;
npm run build

&lt;span class="c"&gt;# Outputs will be in the dist/ directory&lt;/span&gt;
&lt;span class="c"&gt;# - Linux: .AppImage and .deb&lt;/span&gt;
&lt;span class="c"&gt;# - Windows: .exe and portable&lt;/span&gt;
&lt;span class="c"&gt;# - macOS: .dmg and .zip&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  JavaScript/TypeScript Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Welcome to fastTinker!&lt;/span&gt;
&lt;span class="c1"&gt;// This is a JavaScript/TypeScript playground&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, World!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Try using magic comments to see values inline:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// $x&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// $y&lt;/span&gt;

&lt;span class="c1"&gt;// You have access to both Node.js and browser APIs&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Node.js version:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Install NPM packages from the terminal or use require() to try loading them&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  PHP Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="c1"&gt;// Welcome to fastTinker!&lt;/span&gt;
&lt;span class="c1"&gt;// This is a PHP playground&lt;/span&gt;

&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello, World!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Try using magic comments to see values inline:&lt;/span&gt;
&lt;span class="nv"&gt;$x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// $x&lt;/span&gt;
&lt;span class="nv"&gt;$y&lt;/span&gt; &lt;span class="o"&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// $y&lt;/span&gt;

&lt;span class="c1"&gt;// PHP version information&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"PHP version: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="kc"&gt;PHP_VERSION&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;I started with two separate projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/boadusamuel/jsTinker" rel="noopener noreferrer"&gt;jsTinker&lt;/a&gt; - for JavaScript/TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/boadusamuel/phpTinker" rel="noopener noreferrer"&gt;phpTinker&lt;/a&gt; - for PHP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both were great on their own, but I found myself switching between them frequently. Instead of maintaining two separate codebases, I decided to merge them into a unified tool that could handle multiple languages with a clean, extensible architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Support for Python, Ruby, and Go&lt;/li&gt;
&lt;li&gt;[ ] Enhanced magic comment features&lt;/li&gt;
&lt;li&gt;[ ] Code sharing and export capabilities&lt;/li&gt;
&lt;li&gt;[ ] Plugin system for community extensions&lt;/li&gt;
&lt;li&gt;[ ] Theme customization&lt;/li&gt;
&lt;li&gt;[ ] Collaborative editing features&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Contributions are welcome! Whether you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Report bugs&lt;/li&gt;
&lt;li&gt;💡 Suggest features&lt;/li&gt;
&lt;li&gt;🔧 Add support for new languages&lt;/li&gt;
&lt;li&gt;📝 Improve documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to open an issue or submit a pull request on &lt;a href="https://github.com/boadusamuel/fastTinker" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Electron&lt;/strong&gt; - Desktop application framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monaco Editor&lt;/strong&gt; - VS Code's editor component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; - Runtime for JavaScript/TypeScript execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP CLI&lt;/strong&gt; - Runtime for PHP execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NPM &amp;amp; Composer&lt;/strong&gt; - Package management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;fastTinker bridges the gap between language-specific playgrounds and full IDEs. It's perfect for rapid prototyping, learning new languages, and experimenting with code without the overhead of project setup.&lt;/p&gt;

&lt;p&gt;If you're a developer who works with multiple languages or just wants a better way to test code snippets, give fastTinker a try. I'd love to hear your feedback and see what you build with it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/boadusamuel/fastTinker" rel="noopener noreferrer"&gt;boadusamuel/fastTinker&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;javascript&lt;/code&gt; &lt;code&gt;typescript&lt;/code&gt; &lt;code&gt;php&lt;/code&gt; &lt;code&gt;electron&lt;/code&gt; &lt;code&gt;desktop-app&lt;/code&gt; &lt;code&gt;playground&lt;/code&gt; &lt;code&gt;prototyping&lt;/code&gt; &lt;code&gt;monaco-editor&lt;/code&gt; &lt;code&gt;developer-tools&lt;/code&gt; &lt;code&gt;coding&lt;/code&gt; &lt;code&gt;programming&lt;/code&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>php</category>
      <category>playground</category>
      <category>prototyping</category>
    </item>
    <item>
      <title>Building jsTinker: A Free Desktop JavaScript Playground (And Why I Built It)</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Mon, 03 Nov 2025 18:34:59 +0000</pubDate>
      <link>https://dev.to/boadusamuel/building-jstinker-a-free-desktop-javascript-playground-and-why-i-built-it-4109</link>
      <guid>https://dev.to/boadusamuel/building-jstinker-a-free-desktop-javascript-playground-and-why-i-built-it-4109</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Have you ever needed to quickly test a JavaScript snippet but didn't want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fire up VS Code and create a new project?&lt;/li&gt;
&lt;li&gt;Use an online editor that requires internet?&lt;/li&gt;
&lt;li&gt;Pay for a premium tool like RunJS?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I found myself in this exact situation. I needed a simple, offline way to test code snippets while learning and prototyping. During my search, I stumbled across a Reddit thread titled &lt;a href="https://www.reddit.com/r/learnjavascript/comments/11xym8k/anybody_seen_this_runjs_is_there_an_alternative/" rel="noopener noreferrer"&gt;"Anybody seen this? RunJS. Is there an alternative (besides dev tools), that doesn't cost $$?"&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That thread resonated with me. There were clearly others looking for the same thing—a free, offline JavaScript playground. So I decided to build one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing jsTinker
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;jsTinker&lt;/strong&gt; is a free, open-source desktop application that provides an instant JavaScript and TypeScript playground environment. It's built with Electron and Monaco Editor, giving you the power of VS Code's editor in a lightweight, focused tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why jsTinker?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Completely free&lt;/strong&gt; - No cost, no subscriptions&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Offline-first&lt;/strong&gt; - Works without internet connection&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Privacy-focused&lt;/strong&gt; - Your code stays on your machine&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Fast&lt;/strong&gt; - No network latency, instant execution&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Full Node.js access&lt;/strong&gt; - File system, networking, native modules&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;No account required&lt;/strong&gt; - Just download and run&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Monaco Editor Integration
&lt;/h3&gt;

&lt;p&gt;Powered by the same code editor used in VS Code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Syntax highlighting for JavaScript and TypeScript&lt;/li&gt;
&lt;li&gt;IntelliSense autocomplete and code suggestions&lt;/li&gt;
&lt;li&gt;Error detection and inline diagnostics&lt;/li&gt;
&lt;li&gt;Code formatting and refactoring support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Instant Code Execution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-run mode&lt;/strong&gt;: Code executes as you type (enabled by default)&lt;/li&gt;
&lt;li&gt;Manual execution with Run button or &lt;code&gt;Ctrl+Enter&lt;/code&gt; shortcut&lt;/li&gt;
&lt;li&gt;Real-time console output and error reporting&lt;/li&gt;
&lt;li&gt;Support for both synchronous and asynchronous code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Hybrid Runtime Environment
&lt;/h3&gt;

&lt;p&gt;A unique feature that combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js APIs&lt;/strong&gt;: Full access to file system, networking, process, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser API simulation&lt;/strong&gt;: Window, document, DOM objects&lt;/li&gt;
&lt;li&gt;Perfect for both backend and frontend prototyping&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. NPM Package Management
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Install npm packages directly from within the app&lt;/li&gt;
&lt;li&gt;No need to set up separate Node.js projects&lt;/li&gt;
&lt;li&gt;Packages are installed to your user data directory&lt;/li&gt;
&lt;li&gt;Automatically resolves and loads installed packages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Code Snippets Library
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Save frequently used code snippets&lt;/li&gt;
&lt;li&gt;Organize and manage your code collection&lt;/li&gt;
&lt;li&gt;Quick access to your saved snippets&lt;/li&gt;
&lt;li&gt;Edit and update existing snippets&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Magic Comments
&lt;/h3&gt;

&lt;p&gt;Display values inline with special comments:&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;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// $x&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// $arr&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Auto-Logging
&lt;/h3&gt;

&lt;p&gt;Standalone expressions automatically log to the console—no need to wrap them in &lt;code&gt;console.log()&lt;/code&gt;:&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;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;someFunction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Automatically logged!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Technical Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Electron&lt;/strong&gt;: Desktop application framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monaco Editor&lt;/strong&gt;: VS Code's editor engine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt;: JavaScript runtime for code execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt;: Package management&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Linux (AppImage - Recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download from GitHub Releases&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x jsTinker-1.0.0.AppImage
./jsTinker-1.0.0.AppImage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux (.deb Package)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;-i&lt;/span&gt; jstinker_1.0.0_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows &amp;amp; macOS
&lt;/h3&gt;

&lt;p&gt;Currently, Windows and macOS builds need to be built from source on their respective platforms:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/boadusamuel/jsTinker.git
&lt;span class="nb"&gt;cd &lt;/span&gt;jsTinker
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Electron apps require building on each target platform. Linux builds are ready to use, while Windows and macOS users can build from source.&lt;/p&gt;

&lt;h2&gt;
  
  
  System Requirements
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Node.js (version 16 or higher) must be installed on your system for code execution. jsTinker requires Node.js to run user code, as it spawns Node.js processes for execution.&lt;/p&gt;

&lt;p&gt;Download Node.js from &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;nodejs.org&lt;/a&gt; or install via your system's package manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Developers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quickly test code snippets without creating a new project&lt;/li&gt;
&lt;li&gt;Experiment with new JavaScript features and APIs&lt;/li&gt;
&lt;li&gt;Test npm packages before integrating into projects&lt;/li&gt;
&lt;li&gt;Debug and troubleshoot code logic&lt;/li&gt;
&lt;li&gt;Prototype features before implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For Learners
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Practice JavaScript and TypeScript syntax&lt;/li&gt;
&lt;li&gt;Learn by experimenting with live code&lt;/li&gt;
&lt;li&gt;Understand how Node.js and browser APIs work&lt;/li&gt;
&lt;li&gt;Test algorithms and data structures&lt;/li&gt;
&lt;li&gt;Get instant feedback on code execution&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For Educators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Demonstrate code concepts interactively&lt;/li&gt;
&lt;li&gt;Create shareable code examples&lt;/li&gt;
&lt;li&gt;Teach JavaScript/TypeScript with immediate results&lt;/li&gt;
&lt;li&gt;Showcase npm packages and libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Example
&lt;/h2&gt;

&lt;p&gt;Here's a simple example to get you started:&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;// Welcome to jsTinker!&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello, World!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Magic comments show values inline&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt; &lt;span class="o"&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="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// $numbers&lt;/span&gt;

&lt;span class="c1"&gt;// Auto-logging: expressions are automatically logged&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;sum&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Install npm packages and use them&lt;/span&gt;
&lt;span class="c1"&gt;// const _ = require('lodash');&lt;/span&gt;
&lt;span class="c1"&gt;// console.log(_.chunk(numbers, 2));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Building from Source
&lt;/h2&gt;

&lt;p&gt;If you want to contribute or build for other platforms:&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;# Clone the repository&lt;/span&gt;
git clone https://github.com/boadusamuel/jsTinker.git
&lt;span class="nb"&gt;cd &lt;/span&gt;jsTinker

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Run in development mode&lt;/span&gt;
npm start

&lt;span class="c"&gt;# Build for production&lt;/span&gt;
npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Challenges &amp;amp; Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Challenge 1: Monaco Editor Loading in Production
&lt;/h3&gt;

&lt;p&gt;Monaco Editor's AMD loader initially had issues with Electron's file system. Solution: Load Monaco from local files with proper path resolution and fallbacks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenge 2: Node.js Detection in Packaged Apps
&lt;/h3&gt;

&lt;p&gt;The app needs to find Node.js on the system, which can be tricky when packaged. Solution: Implemented a robust detection system that checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System PATH&lt;/li&gt;
&lt;li&gt;Common installation locations&lt;/li&gt;
&lt;li&gt;NVM paths (for developers using Node Version Manager)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenge 3: Code Execution Isolation
&lt;/h3&gt;

&lt;p&gt;Running user code safely while maintaining Node.js and browser API access. Solution: Spawn separate Node.js processes with a hybrid environment that simulates browser APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enhanced magic comment support&lt;/li&gt;
&lt;li&gt;More TypeScript features&lt;/li&gt;
&lt;li&gt;Code sharing and export capabilities&lt;/li&gt;
&lt;li&gt;Additional themes and customization&lt;/li&gt;
&lt;li&gt;Plugin system for extensibility&lt;/li&gt;
&lt;li&gt;Windows and macOS pre-built binaries&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Contributions are welcome! Whether it's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐛 Bug reports&lt;/li&gt;
&lt;li&gt;💡 Feature suggestions&lt;/li&gt;
&lt;li&gt;📝 Documentation improvements&lt;/li&gt;
&lt;li&gt;🔧 Code contributions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to open an issue or submit a pull request on &lt;a href="https://github.com/boadusamuel/jsTinker" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built with &lt;a href="https://www.electronjs.org/" rel="noopener noreferrer"&gt;Electron&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Uses &lt;a href="https://microsoft.github.io/monaco-editor/" rel="noopener noreferrer"&gt;Monaco Editor&lt;/a&gt; (the editor powering VS Code)&lt;/li&gt;
&lt;li&gt;This project was vibe coded using AI assistance 🤖✨&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out!
&lt;/h2&gt;

&lt;p&gt;If you're a JavaScript or TypeScript developer looking for a free, offline playground, give jsTinker a try:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/boadusamuel/jsTinker" rel="noopener noreferrer"&gt;https://github.com/boadusamuel/jsTinker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback, feature requests, or see what you build with it!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt;: &lt;code&gt;#javascript&lt;/code&gt; &lt;code&gt;#typescript&lt;/code&gt; &lt;code&gt;#electron&lt;/code&gt; &lt;code&gt;#opensource&lt;/code&gt; &lt;code&gt;#webdev&lt;/code&gt; &lt;code&gt;#programming&lt;/code&gt; &lt;code&gt;#monaco-editor&lt;/code&gt; &lt;code&gt;#desktop-app&lt;/code&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>electron</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Free Dashboard Template for Laravel React Development</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Mon, 27 Nov 2023 11:02:33 +0000</pubDate>
      <link>https://dev.to/boadusamuel/free-dashboard-template-for-laravel-react-development-4856</link>
      <guid>https://dev.to/boadusamuel/free-dashboard-template-for-laravel-react-development-4856</guid>
      <description>&lt;h2&gt;
  
  
  About LaraReact Dashboard Template
&lt;/h2&gt;

&lt;p&gt;LaraReact Dashboard Template is a cutting-edge Laravel Inertia and React-based web application template inspired by &lt;a href="https://sakai.primereact.org/" rel="noopener noreferrer"&gt;Sakai PrimeReact&lt;/a&gt;. Designed for crafting modern dashboards, it offers a robust foundation with features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://laravel.com" rel="noopener noreferrer"&gt;Laravel-based backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://inertiajs.com" rel="noopener noreferrer"&gt;Inertia.js&lt;/a&gt; for seamless SPA development&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://reactjs.org" rel="noopener noreferrer"&gt;React&lt;/a&gt; for dynamic user interfaces&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.primefaces.org/primereact" rel="noopener noreferrer"&gt;PrimeReact&lt;/a&gt; UI components for a polished look&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/primefaces/sakai-react" rel="noopener noreferrer"&gt;Sakai-react&lt;/a&gt; Free React Admin Template CSS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt; for a rapid development experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for Laravel developers seeking a head start with a template incorporating these technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  AppConfig: Tailor the Dashboard to Your Needs
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;AppConfig&lt;/code&gt; component in LaraReact provides a user-friendly interface to configure layout settings. Tailor the dashboard to your preferences with options like scale, menu type, input style, ripple effect, and a variety of themes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage: Accessing AppConfig on the Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F618u3zhmww3hz41knhmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F618u3zhmww3hz41knhmp.png" alt="LaraReact Dashboad uploaded by boadusamuel (Samuel Boadu)" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigate to the Dashboard:&lt;/strong&gt; Go to the dashboard section of your LaraReact application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locate AppConfig Button:&lt;/strong&gt; Look for the configuration button represented by a cog icon, usually positioned in the right-center of the screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click AppConfig Button:&lt;/strong&gt; Open the configuration sidebar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjust Configuration Options:&lt;/strong&gt; Explore and modify options like scale, menu type, input style, ripple effect, and themes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preview Changes:&lt;/strong&gt; Visualize real-time changes as you adjust the configuration options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply Theme:&lt;/strong&gt; For theme changes, click on the theme button of your choice to apply the selected theme and color scheme to the entire application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Close AppConfig Sidebar:&lt;/strong&gt; After configuring the settings, close the AppConfig sidebar by clicking outside or using the provided close button.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Themes: Choose Your Look
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgixpoltofzoyk8ixws2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgixpoltofzoyk8ixws2z.png" alt="App Configuration uploaded by boadusamuel (Samuel Boadu)" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LaraReact offers a variety of themes categorized by design systems. Choose from options like Bootstrap, Material Design, Tailwind, Fluent UI, and more. Each theme provides a unique look and feel to suit your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration and Setup
&lt;/h2&gt;

&lt;p&gt;For detailed setup instructions and configuration steps, please refer to the &lt;a href="https://github.com/boadusamuel/laravel-inertia-react" rel="noopener noreferrer"&gt;LaraReact GitHub repository&lt;/a&gt;. Clone the project and follow the guidelines to get started with LaraReact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution
&lt;/h2&gt;

&lt;p&gt;LaraReact is an open-source project, and contributions are welcome. If you encounter any issues or have suggestions, please &lt;a href="https://github.com/boadusamuel/laravel-inertia-react/issues" rel="noopener noreferrer"&gt;submit an issue&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LaraReact empowers Laravel developers with a feature-rich dashboard template that combines the strengths of Laravel, Inertia.js, React, and PrimeReact. The AppConfig component allows easy customization, ensuring your dashboard aligns perfectly with your project requirements. Explore the themes, fine-tune the settings, and kickstart your development journey with LaraReact.&lt;/p&gt;

&lt;p&gt;Your contributions and feedback are valuable as LaraReact continues to evolve. Feel free to &lt;a href="https://github.com/boadusamuel/laravel-inertia-react" rel="noopener noreferrer"&gt;contribute on GitHub&lt;/a&gt; and share your experiences with the LaraReact community.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>react</category>
      <category>inertia</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Do you find it DIFFICULT to take regular breaks behind your laptop?</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Wed, 22 Nov 2023 13:58:19 +0000</pubDate>
      <link>https://dev.to/boadusamuel/do-you-find-it-difficult-to-take-regular-breaks-behind-your-laptop-8kp</link>
      <guid>https://dev.to/boadusamuel/do-you-find-it-difficult-to-take-regular-breaks-behind-your-laptop-8kp</guid>
      <description>&lt;p&gt;In today's fast-paced, hyperconnected world, it's easy to get caught up in the whirlwind of work, spending hours glued to our computers without taking a proper break. This relentless focus can lead to burnout, fatigue, and decreased productivity. Fortunately, there are tools and techniques available to help us break free from this cycle and prioritize our well-being.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workrave: A Tool for Healthier Work Habits:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Workrave is a free and open-source software designed to promote healthier work habits by reminding users to take breaks at regular intervals. Here's how it can assist workers in maintaining a balanced work routine:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customizable Break Reminders:&lt;/strong&gt;&lt;br&gt;
Workrave allows users to customize break reminders based on their preferences. Whether it's a micro-break for stretching every few minutes or a longer break every hour, users can tailor the reminders to suit their work style.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Micro-breaks and Rest Breaks:&lt;/strong&gt;&lt;br&gt;
The software encourages both micro-breaks, which are short pauses to stretch or relax for a few seconds, and rest breaks, which are more extended breaks to step away from the computer. This approach helps in preventing both physical and mental fatigue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4v11fdglz5ymlwbh886.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4v11fdglz5ymlwbh886.png" alt="workrave micro break image uploaded by boadusamuel - Samuel Boadu" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdop24cyjnfi1gsr0tiht.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdop24cyjnfi1gsr0tiht.png" alt="workrave rest break image uploaded by boadusamuel - Samuel Boadu" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exercises:&lt;/strong&gt;&lt;br&gt;
Workrave includes exercises specifically designed to reduce  strain. These exercises guide users through body movements and focus changes to alleviate strain caused by prolonged screen time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhmuhn8cy5ryzsy1fvbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhmuhn8cy5ryzsy1fvbq.png" alt="Image of workrave exercise uploaded by boadusamuel - Samuel Boadu" width="544" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Statistics and Reporting:&lt;/strong&gt;&lt;br&gt;
Workrave provides valuable insights into users' work habits by collecting statistics on mouse and keyboard usage. Users can review these statistics to gain a better understanding of their work patterns and make informed decisions about optimizing their routines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo10v6maekuk1ipn6fw72.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo10v6maekuk1ipn6fw72.png" alt="Image of workrave statistics uploaded by boadu samuel - Samuel Boadu" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the era of remote work and digital collaboration, prioritizing the well-being of workers is essential. Workrave serves as a valuable ally in promoting a balanced work routine by incorporating regular breaks, preventing burnout, and addressing health concerns associated with prolonged computer use. As we strive for productivity, let's not forget the importance of taking breaks—our bodies and minds will thank us for it in the long run.&lt;/p&gt;

&lt;p&gt;So, why not take a moment, install &lt;a href="https://workrave.org/" rel="noopener noreferrer"&gt;Workrave&lt;/a&gt;, and embark on a journey towards a healthier and more sustainable work routine? Your well-being is an investment that pays dividends in both personal and professional aspects of life.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>certification</category>
      <category>career</category>
    </item>
    <item>
      <title>EXCEPTION (CLASS .... NOT FOUND) while DEBUGGING</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Fri, 25 Nov 2022 17:07:55 +0000</pubDate>
      <link>https://dev.to/boadusamuel/exception-class-not-found-while-debugging-25o5</link>
      <guid>https://dev.to/boadusamuel/exception-class-not-found-while-debugging-25o5</guid>
      <description>&lt;p&gt;The art of debugging is very important as it could save you lot of time and headaches. Tools used&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Laravel&lt;/li&gt;
&lt;li&gt;Visual Studio Code(VSCode)&lt;/li&gt;
&lt;li&gt;Xdebug&lt;/li&gt;
&lt;li&gt;PHP Debug extension for Visual Studio Code (Debug support for PHP with Xdebug)&lt;/li&gt;
&lt;li&gt;Xdebug helper(Browser Extension)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Am going to skip the installation of this tools as once you encounter the "&lt;strong&gt;Class not found exception&lt;/strong&gt;" then you have passed the installation stage.&lt;/p&gt;

&lt;p&gt;After installing PHP debug extension and accessing its &lt;em&gt;launch.json&lt;/em&gt; file from &lt;em&gt;.vscode&lt;/em&gt; directory. You will see 3 different settings in configurations which you must take note of base on the &lt;strong&gt;name&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5u05dykpgmkwas6rbcy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5u05dykpgmkwas6rbcy.png" alt="launch.json" width="800" height="958"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without the use of imported Classes in your debugging script you are likely not to experience any issues with any of these configurations. eg. using &lt;strong&gt;name:&lt;/strong&gt; &lt;em&gt;Launch currently open script&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frya65lmwo6qs5yq5woyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frya65lmwo6qs5yq5woyk.png" alt="script without the usage of imported classes" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Laravel application the entry point is the &lt;em&gt;index.php&lt;/em&gt; file which is inside the public folder. These file loads all the required files to handle request from the browser. So when we use the browser extension debug helper together with our break points we wont' have the exception: "Class .... not Found"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpf18ebarlf0vxltvte2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpf18ebarlf0vxltvte2.png" alt="Class Not Found" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution&lt;/strong&gt;&lt;br&gt;
Change the debug configurations option &lt;strong&gt;name&lt;/strong&gt; to &lt;em&gt;Listen for Xdebug&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p9s124ey7o4kasfc9x1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p9s124ey7o4kasfc9x1.jpg" alt="Listen for Xdebug" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And enable debugger helper extension in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyr7l5fwuu524oyx07hr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyr7l5fwuu524oyx07hr.png" alt="enable debugger helper" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After enabling the debug helper extension and refreshing the page again we see that the page keeps loading and never stops because our first break point has been hit awaiting our next action&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjoojs3wrsf0y7lv782r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjoojs3wrsf0y7lv782r.png" alt="first break point hit" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that our &lt;em&gt;$user&lt;/em&gt;  variable is not initialized yet from the &lt;strong&gt;&lt;em&gt;VARIABLES SECTION&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;When we click on &lt;strong&gt;continue&lt;/strong&gt; to the next break point, we now see the &lt;em&gt;$user&lt;/em&gt; variable being initialize which we can now inspect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvry9on4e91ndxnr3mgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvry9on4e91ndxnr3mgy.png" alt="Debug variable set for inspection" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congratulations!!!!. Class not found exception during debugging in laravel is sorted. Let me know what you think as sharing helps us learn better. &lt;/p&gt;

</description>
      <category>vscode</category>
      <category>laravel</category>
      <category>php</category>
      <category>testing</category>
    </item>
    <item>
      <title>Laravel Query nested JSON Column without case sensitivity</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Fri, 21 Oct 2022 18:34:22 +0000</pubDate>
      <link>https://dev.to/boadusamuel/laravel-query-nested-json-column-without-case-sensitivity-3g5o</link>
      <guid>https://dev.to/boadusamuel/laravel-query-nested-json-column-without-case-sensitivity-3g5o</guid>
      <description>&lt;p&gt;Have you ever tried running a search in a nested JSON column inside a database with laravel where() method and it didn't work the way you expected it to due to case sensitivity(Example 1).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Example 1.&lt;/b&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F696hcw98y8kdxmv6v5lv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F696hcw98y8kdxmv6v5lv.png" alt=" " width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But Same query works when the case match(Example 2)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Example 2&lt;/b&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1tvja5x3lgwjd0rnh8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1tvja5x3lgwjd0rnh8p.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To overcome this challenge I came up with this modification which allowed searching with whatever case return matching results(Example 3 and 4).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Example 3&lt;/b&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6d14hhhsckhqkiyeam1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6d14hhhsckhqkiyeam1r.png" alt=" " width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Example 4&lt;/b&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyb1rvc7snyv4tlkqvpzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyb1rvc7snyv4tlkqvpzz.png" alt=" " width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope this helps anyone who might face this challenge. Please Let me know if there are better ways to achieve this. Your contributions and criticism are welcome. Thank you for reading this far..... and just in case you need a package to handle the query for you in a laravel project then you can just run&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;composer require boadusamuel/search-nested-json-column&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;or read on the package at &lt;a href="https://packagist.org/packages/boadusamuel/search-nested-json-column" rel="noopener noreferrer"&gt;boadusamuel/search-nested-json-column&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>sql</category>
      <category>database</category>
    </item>
    <item>
      <title>Laravel Tinker - SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No address associated with hostname</title>
      <dc:creator>Samuel Boadu</dc:creator>
      <pubDate>Wed, 12 May 2021 10:52:38 +0000</pubDate>
      <link>https://dev.to/boadusamuel/laravel-tinker-sqlstate-hy000-2002-phpnetworkgetaddresses-getaddrinfo-failed-no-address-associated-with-hostname-53pi</link>
      <guid>https://dev.to/boadusamuel/laravel-tinker-sqlstate-hy000-2002-phpnetworkgetaddresses-getaddrinfo-failed-no-address-associated-with-hostname-53pi</guid>
      <description>&lt;p&gt;Read some good reviews on laravel tinker, &lt;strong&gt;a phpstorm plugin&lt;/strong&gt; which I wanted to try out. I installed the plugin on my phpstorm editor and was ready to start tinkering. Was using Laradock which I had configuration for apache2, mysql, workspace and phpmyadmin. All was running well until I decided to experiment with laravel tinker. &lt;/p&gt;

&lt;p&gt;This was the setup for mysql database connection in the &lt;strong&gt;.env&lt;/strong&gt; file.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0640xoqboun3ehlq5pr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0640xoqboun3ehlq5pr.png" alt="Alt Text" width="697" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Laravel tinker could not resolve the host name -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illuminate\Database\QueryException with message 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No address associated with hostname&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;After long hours of reading and searching online for a solution I couldn't get the help I needed. I later had suggestion from a senior colleague to use the IP adrress of mysql docker container. I did try and this time around the error changed to &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Illuminate\Database\QueryException with message 'SQLSTATE[HY000] [2002] Connection timed out&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Making progress at least. I then inspected the mysql docker container networks by using the command :&lt;br&gt;
&lt;strong&gt;docker inspect [&lt;em&gt;container id&lt;/em&gt;]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Had a long list of information on the container but the focus was on the &lt;em&gt;Networks&lt;/em&gt; properties of the &lt;em&gt;NetworkSettings&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F863hdypthu0b9d278ce5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F863hdypthu0b9d278ce5.png" alt="Alt Text" width="800" height="797"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then changed the IPAddress to the Gateway which is equally an IP but directs traffic locally. Lo and Behold Laravel tinker was up and running.....&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv74fesamdclfa5wp5vp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv74fesamdclfa5wp5vp.png" alt="Alt Text" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope this article helps someone who might find him or herself in similar situation. Comments and corrections are welcome as we all learn by building each other up.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>phpstorm</category>
      <category>mysql</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
