<?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: Imam Ali Mustofa</title>
    <description>The latest articles on DEV Community by Imam Ali Mustofa (@darkterminal).</description>
    <link>https://dev.to/darkterminal</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%2F136120%2Fbde51a22-d2e8-44ad-b618-f370121a301d.png</url>
      <title>DEV Community: Imam Ali Mustofa</title>
      <link>https://dev.to/darkterminal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darkterminal"/>
    <language>en</language>
    <item>
      <title>I Build libSQL Server Web GUI - MylibSQLAdmin</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Fri, 20 Jun 2025 19:39:59 +0000</pubDate>
      <link>https://dev.to/darkterminal/i-build-libsql-server-web-gui-mylibsqladmin-2ahk</link>
      <guid>https://dev.to/darkterminal/i-build-libsql-server-web-gui-mylibsqladmin-2ahk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;MylibSQLAdmin - A Modern libSQL Database Management Platform&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hello Punk! If you’ve ever wrestled with SQLite databases, felt buried under clunky UIs, or just wished your database tools were as sleek as your favorite apps—say hello to &lt;strong&gt;MylibSQLAdmin&lt;/strong&gt;. It’s like giving your &lt;em&gt;SQLite workflow a double shot of espresso ☕️, but without the jitters&lt;/em&gt;. That's it no punchline!&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s the Big Deal?
&lt;/h2&gt;

&lt;p&gt;First off, &lt;strong&gt;MylibSQLAdmin&lt;/strong&gt; isn’t just &lt;em&gt;another&lt;/em&gt; SQLite manager. It’s built for libSQL—a turbocharged fork of SQLite designed for modern apps (think serverless mode, granular permissions, and even database share schema 🌿). And guess what? &lt;strong&gt;MylibSQLAdmin&lt;/strong&gt; wraps all that power into a smooth, web-based UI. &lt;em&gt;No PhD in CLI required&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here’s the vibe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stats That Don’t Suck&lt;/strong&gt;: Get instant database insights without drowning in spreadsheets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token &amp;amp; Team Management&lt;/strong&gt;: Secure your DB like a VIP club 🕶️—tokens, groups, user roles, all in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Fuss Collaboration&lt;/strong&gt;: Invite teammates, manage permissions, and keep everyone rowing in the same boat 🚣.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;libSQL’s Superpowers&lt;/strong&gt;: Play with serverless or server mode, shared schema databases, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oh, and it’s &lt;em&gt;open-source&lt;/em&gt;. Because sharing is caring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did I build MylibSQLAdmin?
&lt;/h2&gt;

&lt;p&gt;Simple — I love a good challenge.&lt;/p&gt;

&lt;p&gt;Managing databases with &lt;code&gt;sqld&lt;/code&gt; (&lt;a href="https://github.com/tursodatabase/libsql" rel="noopener noreferrer"&gt;libsql-server&lt;/a&gt;) wasn’t as smooth as I wanted it to be. Sure, Turso (the company behind it) already offers a platform for database management.&lt;/p&gt;

&lt;p&gt;But here's the thing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I wanted something I could run myself.&lt;/li&gt;
&lt;li&gt;On my own server.&lt;/li&gt;
&lt;li&gt;With full control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, I built my own platform — MylibSQLAdmin — to make managing libSQL easier and more accessible for folks like me.&lt;/p&gt;

&lt;p&gt;Sure, it’s not on the same level as what Turso’s platform offers — and that’s okay.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;
Because what I’ve built already covers what &lt;em&gt;I&lt;/em&gt; need. And honestly, that’s enough for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, what makes it “enough”?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Management:&lt;/strong&gt; I needed a way to let multiple users access the platform. Now it can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Management:&lt;/strong&gt; Working with a team gets way easier when you can assign roles, group access, and keep things organized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group Database Management:&lt;/strong&gt; This lets smaller teams work only with the databases meant for them. No more clutter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Management:&lt;/strong&gt; For remote connections to libSQL (like in serverless setups), token-based access is a must — and now it’s built in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a bunch of other small things that just make managing libSQL databases smoother and less of a headache.&lt;/p&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;
        darkterminal
      &lt;/a&gt; / &lt;a href="https://github.com/darkterminal/mylibsqladmin" rel="noopener noreferrer"&gt;
        mylibsqladmin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      MylibSQLAdmin - A Modern libSQL Database Management Platform
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&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%2Fraw.githubusercontent.com%2Fdarkterminal%2Fdarkterminal%2Fmaster%2Fprojects%2Fdark-mode.png" class="article-body-image-wrapper"&gt;&lt;img alt="Shows a black logo in light color mode and a white one in dark color mode." src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fdarkterminal%2Fdarkterminal%2Fmaster%2Fprojects%2Fdark-mode.png"&gt;&lt;/a&gt;
  
&lt;/p&gt;

&lt;p&gt;A Modern SQLite Database Management System&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://deepwiki.com/darkterminal/mylibsqladmin" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="Static Badge" src="https://camo.githubusercontent.com/791e6b6302d89f12c82f8e407cb542a6becec3fd8052833efde6705cd9d31d5f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465657057696b692d446f63733f6c6f676f3d77696b69626f6f6b73266c6162656c3d446f6373"&gt;
  &lt;/a&gt;
  &lt;a href="https://github,com/sponsors/darkterminal" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="GitHub Sponsors" src="https://camo.githubusercontent.com/8d3e7c45cf2a7f3debea1fef325de51888adf73b04dd94c2a0b15418f81ef7ab/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73706f6e736f72732f6461726b7465726d696e616c3f6c6f676f3d67697468756273706f6e736f7273"&gt;
  &lt;/a&gt;
  &lt;a href="https://discord.gg/wWDzy5Nt44" rel="nofollow noopener noreferrer"&gt;
    &lt;img alt="Discord" src="https://camo.githubusercontent.com/6b0c7c8c8b12bb708aa4faf0d0708e04961718d6a3337786de06772f8467187f/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f313336313738383233383536313238303130313f6c6f676f3d646973636f7264"&gt;
  &lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/50980523ac40f6b1bebccaf62a3247f05cbd29234a7d1bfbcced301e682c7c37/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f772f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;img alt="GitHub commit activity" src="https://camo.githubusercontent.com/50980523ac40f6b1bebccaf62a3247f05cbd29234a7d1bfbcced301e682c7c37/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6d6d69742d61637469766974792f772f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/66b1f5aa01894b51ec54a51628b5f3ff38a0485c7c7562383f7622b0ffaa3476/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;img alt="GitHub License" src="https://camo.githubusercontent.com/66b1f5aa01894b51ec54a51628b5f3ff38a0485c7c7562383f7622b0ffaa3476/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ef57d386715d9cb7cb14c26decb25771ecd01de12e847ab5e3c6b0bac6c29bef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;img alt="GitHub contributors" src="https://camo.githubusercontent.com/ef57d386715d9cb7cb14c26decb25771ecd01de12e847ab5e3c6b0bac6c29bef/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f6461726b7465726d696e616c2f6d796c696273716c61646d696e"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;In the age of data-driven applications, the demand for lightweight, scalable, and modern database solutions has never been greater. &lt;strong&gt;libSQL&lt;/strong&gt; is a powerful fork of SQLite designed for the modern era, offering advanced features such as serverless and server-based modes, fine-grained access control, and native branching capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MylibSQLAdmin&lt;/strong&gt; is an open-source web GUI built specifically for managing libSQL databases. By harnessing the full potential of libSQL-server functionalities, this project provides an intuitive and comprehensive platform for database administration, making it easier than ever to manage your database systems through an accessible web interface. You can connect with &lt;code&gt;libsql-server&lt;/code&gt; from &lt;strong&gt;Docker Service&lt;/strong&gt; or use your existing &lt;code&gt;libsql-server&lt;/code&gt; instance.&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://www.youtube.com/watch?v=dntNiEYA4mU" rel="nofollow noopener noreferrer"&gt;
        &lt;img width="100%" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F32319439%2F452616614-bfc06ec7-6265-481b-a493-ce5a0d440b05.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ2NDk5MjAsIm5iZiI6MTc3NDY0OTYyMCwicGF0aCI6Ii8zMjMxOTQzOS80NTI2MTY2MTQtYmZjMDZlYzctNjI2NS00ODFiLWE0OTMtY2U1YTBkNDQwYjA1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjAzMjclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwMzI3VDIyMTM0MFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMwN2VmNTc0ZDk5MDIyNjgzMjdkOGFmMjc5NjAzZTA1YzFiYTczMTJkOTBiYTU0YWVlZjFhNzA1YTgxODhhNDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.2ioHnaZnrzjHCvHCpQwRhveflJ3UBOLaiuvlUvOpdyU"&gt;
    &lt;/a&gt;
    &lt;a href="https://www.youtube.com/watch?v=dntNiEYA4mU" rel="nofollow noopener noreferrer"&gt;View on YouTube&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What Does MylibSQLAdmin Offer?&lt;/h2&gt;
&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Simple Database Statistics&lt;/strong&gt; - Get quick insights into your database performance with easy-to-understand stats.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Database Management&lt;/strong&gt; - Create, edit, and manage your databases with intuitive tools.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Token Management&lt;/strong&gt; - Secure…&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/darkterminal/mylibsqladmin" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>webdev</category>
      <category>programming</category>
      <category>database</category>
      <category>laravel</category>
    </item>
    <item>
      <title>From Fun to Frustration: A Lone Wolf in the Open Source World</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Thu, 27 Feb 2025 18:56:09 +0000</pubDate>
      <link>https://dev.to/darkterminal/from-fun-to-frustration-a-lone-wolf-in-the-open-source-world-57p1</link>
      <guid>https://dev.to/darkterminal/from-fun-to-frustration-a-lone-wolf-in-the-open-source-world-57p1</guid>
      <description>&lt;p&gt;Hello Punk! I am &lt;strong&gt;darkterminal&lt;/strong&gt; a &lt;strong&gt;Software Freestyle Engineer&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Someone who has forgotten how to sleep.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A Day after Having Fun
&lt;/h2&gt;

&lt;p&gt;After dancing with &lt;strong&gt;&lt;a href="https://github.com/darkterminal/whatsback-web" rel="noopener noreferrer"&gt;Whatsback Web&lt;/a&gt;&lt;/strong&gt; for almost three weeks, I’ve finally poured out every distraction in my mind. I feel relieved—and even more handsome and charming!  &lt;/p&gt;

&lt;p&gt;As an &lt;strong&gt;S.F.E&lt;/strong&gt;, I’m incredibly proud to be part of the &lt;strong&gt;Open Source&lt;/strong&gt; community and this digital-ephemeral world. After all, expression and innovation should always be channeled and released in the right place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Back To Open Source Work
&lt;/h2&gt;

&lt;p&gt;“Work”? Sure, let’s call it that—even though “work” usually comes with some kind of financial reward. But in all the chaos I’ve stirred up in this digital world, I haven’t gotten much support, let alone compensation. Sometimes, I wonder—can someone like me, a troublemaker, ever really find a place in this fleeting online existence?  &lt;/p&gt;

&lt;p&gt;At the end of the day, I’ve realized that nothing is impossible in this ever-changing digital space. Hard work and a bit of madness always seem to bring some kind of response from the universe. Maybe it just hasn’t happened for me yet. Or maybe I’m just too unconventional—so much so that I come off as weird or even completely out of place. Who knows?&lt;/p&gt;




&lt;h2&gt;
  
  
  What I've Done Before?
&lt;/h2&gt;

&lt;p&gt;If you visit my &lt;strong&gt;&lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;GitHub profile&lt;/a&gt;&lt;/strong&gt;, you’ll probably feel a bit weirded out and think to yourself, &lt;strong&gt;“What kind of crazy person is this?”&lt;/strong&gt; And you’d be right! &lt;strong&gt;What kind of crazy person am I?&lt;/strong&gt; That’s something I hear all the time from people around me. But that’s okay—this is the path I’ve chosen. What most people don’t realize, though, is that deep down, I’m lonely and could really use some support.  &lt;/p&gt;

&lt;p&gt;In my non-technical life, I’m doing just fine. But in the &lt;strong&gt;Open Source&lt;/strong&gt; world, I’m a &lt;strong&gt;lone wolf&lt;/strong&gt;. Why? Just take a look at my projects—you’ll see how solitary this journey has been. I’m not looking for pity. What I dream of is &lt;strong&gt;collaboration&lt;/strong&gt;—a little &lt;strong&gt;toxic&lt;/strong&gt;, a little fun, just mischievous enough to talk about silly, pointless things in this fleeting digital world.&lt;/p&gt;




&lt;p&gt;Let's talk!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>devjournal</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I created Whatsback Web with simple features and made it free and open source. So, what did I get in return? What I got was the realization of how and who truly appreciates the hard work behind a creation.</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Wed, 26 Feb 2025 11:08:13 +0000</pubDate>
      <link>https://dev.to/darkterminal/i-created-whatsback-web-with-simple-features-and-made-it-free-and-open-source-so-what-did-i-get-2e8f</link>
      <guid>https://dev.to/darkterminal/i-created-whatsback-web-with-simple-features-and-made-it-free-and-open-source-so-what-did-i-get-2e8f</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/darkterminal" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F136120%2Fbde51a22-d2e8-44ad-b618-f370121a301d.png" alt="darkterminal"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Whatsback Web: Automate WhatsApp with Power &amp;amp; Responsibility&lt;/h2&gt;
      &lt;h3&gt;Imam Ali Mustofa ・ Feb 24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#api&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>It's Free and Open Source!</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Tue, 25 Feb 2025 09:19:34 +0000</pubDate>
      <link>https://dev.to/darkterminal/its-free-and-open-source-4pe2</link>
      <guid>https://dev.to/darkterminal/its-free-and-open-source-4pe2</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/darkterminal" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F136120%2Fbde51a22-d2e8-44ad-b618-f370121a301d.png" alt="darkterminal"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Whatsback Web: Automate WhatsApp with Power &amp;amp; Responsibility&lt;/h2&gt;
      &lt;h3&gt;Imam Ali Mustofa ・ Feb 24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#api&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>Whatsback Web: Automate WhatsApp with Power &amp; Responsibility</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Mon, 24 Feb 2025 18:30:00 +0000</pubDate>
      <link>https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6</link>
      <guid>https://dev.to/darkterminal/whatsback-web-automate-whatsapp-with-power-responsibility-ap6</guid>
      <description>&lt;p&gt;Hello Punk! I am &lt;strong&gt;darkterminal&lt;/strong&gt; a &lt;strong&gt;Software Freestyle Engineer&lt;/strong&gt;. Let’s cut to the chase: WhatsApp automation is a double-edged sword. We all crave tools to streamline messaging, but dancing with unofficial APIs is risky business. Today, I’m pulling back the curtain on Whatsback Web—a project born from late-night coding sessions and a stubborn refusal to accept "impossible." But first: this isn’t a fairy tale. Use it wisely, or face the wrath of WhatsApp’s banhammer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built Whatsback Web?
&lt;/h2&gt;

&lt;p&gt;You Can Dive Deeper in My Previous Blog. This project has been my playground ever since &lt;strong&gt;&lt;a href="https://github.com/pedroslopez/whatsapp-web.js" rel="noopener noreferrer"&gt;whatsapp-web.js&lt;/a&gt;&lt;/strong&gt; first hit the scene. It’s been a wild, fun ride—like a high-stakes game of cat and mouse. Sure, I’ve sacrificed &lt;em&gt;a lot&lt;/em&gt; of phone numbers along the way (RIP to those brave souls). But here’s the thing: I’ve learned, observed, adapted, and most importantly—&lt;strong&gt;I’ve survived&lt;/strong&gt;.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/darkterminal" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F136120%2Fbde51a22-d2e8-44ad-b618-f370121a301d.png" alt="darkterminal"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Why I Built Whatsback Web—And Why It’s Different From Other Tools&lt;/h2&gt;
      &lt;h3&gt;Imam Ali Mustofa ・ Feb 21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#automation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#whatsapp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;This isn’t just a project; it’s a testament to stubbornness and curiosity. Every ban, every roadblock, every “this shouldn’t work” moment has been a lesson. And now, I’m here to share the spoils of that battle with you.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s gonna be a bumpy ride—but hey, that’s where the fun is.&lt;br&gt;
&lt;em&gt;darkterminal - The guy who refuses to quit.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Who Likes Spam?!
&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%2F8kubxhhjl52vz8pqrc77.gif" 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%2F8kubxhhjl52vz8pqrc77.gif" alt="Mad" width="498" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me be clear: &lt;strong&gt;I hate spam&lt;/strong&gt;. It’s annoying, disruptive, and downright infuriating. No wonder WhatsApp comes down hard with those permanent bans. Imagine this: a brand-new number with zero interaction history suddenly blasting out a flood of messages and hammering the server with requests. &lt;em&gt;Damn, that’s just unfair&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Spam isn’t just a nuisance—it’s a violation of trust. It clogs up the system, ruins the experience for everyone. That’s why I’ve built this project with &lt;em&gt;restraint&lt;/em&gt; in mind. It’s not about spamming; it’s about &lt;strong&gt;smart&lt;/strong&gt;, &lt;strong&gt;responsible automation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, if you’re thinking of using this tool to flood people’s chats, think again. Play nice, or face the consequences. WhatsApp doesn’t mess around, and neither should you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using WhatsApp Web
&lt;/h2&gt;

&lt;p&gt;This project is built on top of &lt;strong&gt;whatsapp-web.js&lt;/strong&gt;—a library that gives you &lt;em&gt;superpowers&lt;/em&gt; to interact with WhatsApp Web programmatically. No heads, no hassle. But don’t expect a ton of crazy features here. Why? Because &lt;em&gt;I’ve already gone crazy enough building this thing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The whole point of &lt;strong&gt;Whatsback Web&lt;/strong&gt; is to give you a &lt;strong&gt;useful tool&lt;/strong&gt; to save time in your business. It’s about efficiency, not overcomplication. With its REST API, you can forward messages, send automated texts, and integrate it seamlessly into your website or app.&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="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;WHATSBACK_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/api/message/send-message`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&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;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&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;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;There is 2 way to install and use Whatsback Web&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker (The Easy Way)
&lt;/h3&gt;

&lt;p&gt;When using docker installation you've 2 options, using Docker CLI or Docker Compose.&lt;/p&gt;

&lt;h4&gt;
  
  
  Docker CLI
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pull the image:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   docker pull ghcr.io/darkterminal/whatsback-web:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Network&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker network create whatsback-net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create Volume&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker volume create whatsback-db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run Whatsback Application Container&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; whatsback-app-provider &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--network&lt;/span&gt; whatsback-net &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-p&lt;/span&gt; 8169:5001 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;APP_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5001 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/data/database.sqlite &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; whatsback-db:/data &lt;span class="se"&gt;\&lt;/span&gt;
    ghcr.io/darkterminal/whatsback-web:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run Whatsback Cronjob Container&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; whatsback-app-cronjob &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--network&lt;/span&gt; whatsback-net &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;APP_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;whatsback-app-provider &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/data/database.sqlite &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-v&lt;/span&gt; whatsback-db:/data &lt;span class="se"&gt;\&lt;/span&gt;
    ghcr.io/darkterminal/whatsback-web:latest &lt;span class="se"&gt;\&lt;/span&gt;
    sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"./wait-for whatsback-app-provider:5001 -t 120 -- node cronjob.js"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Docker Compose
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml or compose.yml&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/darkterminal/whatsback-web:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whatsback-app-provider&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${UI_PORT:-8169}:5001"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV=production&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_PORT=${APP_PORT:-5001}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PATH=/data/database.sqlite&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db-data:/data&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app_net&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMD-SHELL"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;curl&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-f&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;http://localhost:$$APP_PORT/health&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;||&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

  &lt;span class="na"&gt;cronjob&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/darkterminal/whatsback-web:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whatsback-app-cronjob&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NODE_ENV=production&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_HOST=app&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PATH=/data/database.sqlite&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db-data:/data&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sh -c "./wait-for app:5001 -t 120 -- node cronjob.js"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app_net&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_healthy&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app_net&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bridge&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;db-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/darkterminal/whatsback-web.git  
&lt;span class="nb"&gt;cd &lt;/span&gt;whatsback-web  
npm &lt;span class="nb"&gt;install  
&lt;/span&gt;&lt;span class="nv"&gt;NODE_ENV&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production node server.js  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔐 The Elephant in the Room: Security &amp;amp; Risks
&lt;/h2&gt;

&lt;p&gt;Let’s be blunt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp hates bots&lt;/strong&gt; (Me too). Using this could get your account banned.&lt;/li&gt;
&lt;li&gt;We’ve added armor (Helmet, rate-limiting), but &lt;strong&gt;no guarantees&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This project isn’t affiliated with WhatsApp&lt;/strong&gt;. Use at your own risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ☕ Support the Madness
&lt;/h2&gt;

&lt;p&gt;Building tools like this burns caffeine and sanity. If &lt;strong&gt;Whatsback Web&lt;/strong&gt; saves you time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/sponsors/darkterminal" rel="noopener noreferrer"&gt;GitHub Sponsors&lt;/a&gt; - International Supporter&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://saweria.co/darkterminal" rel="noopener noreferrer"&gt;Saweria&lt;/a&gt; - Indonesian Supporter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/darkterminal/whatsback-web" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Checkout The Whatsback Web - GitHub Repository&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  🚨 Final Warning
&lt;/h2&gt;

&lt;p&gt;This isn’t a toy. It’s a &lt;strong&gt;proof-of-concept&lt;/strong&gt; for developers who understand the risks. If you’re looking for a “safe” solution, walk away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 Tips to Survive the WhatsApp Jungle&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Let’s keep it real: using &lt;strong&gt;Whatsback Web&lt;/strong&gt; isn’t a free pass to go wild. WhatsApp’s algorithms are watching, and they don’t play nice. Here’s how to stay under the radar and keep your account alive:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Age Matters:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Make sure the number you’re using is &lt;em&gt;at least 2 weeks old&lt;/em&gt; (my personal sweet spot is &lt;strong&gt;1 month&lt;/strong&gt;). Fresh numbers scream “bot” and get slapped with bans faster than you can say “Oops.”  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Keep It Active:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use a number that’s &lt;strong&gt;actively used for daily interactions&lt;/strong&gt;. Dormant numbers are red flags. WhatsApp loves activity—so give it what it wants.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Etiquette:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use the REST API wisely. Don’t bombard the server with endless requests. Space them out, be patient, and &lt;em&gt;don’t whine&lt;/em&gt; when things don’t go your way.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Spam, Ever:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This can’t be stressed enough. &lt;strong&gt;Avoid spam like the plague.&lt;/strong&gt; It’s not just annoying—it’s a one-way ticket to Bannedville.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This isn’t about gaming the system—it’s about working smarter. Play by the rules, and &lt;strong&gt;Whatsback Web&lt;/strong&gt; will be your best friend. Break them, and well… good luck explaining to your boss why your WhatsApp account got nuked.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stay smart,&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;darkterminal&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;The guy who’s been there, done that, and lived to tell the tale.&lt;/em&gt;  &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: Follow these tips, or prepare to face the consequences. Your call.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>Did you know about this?</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Fri, 21 Feb 2025 17:18:24 +0000</pubDate>
      <link>https://dev.to/darkterminal/did-you-know-about-this-4mh8</link>
      <guid>https://dev.to/darkterminal/did-you-know-about-this-4mh8</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/darkterminal" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F136120%2Fbde51a22-d2e8-44ad-b618-f370121a301d.png" alt="darkterminal"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Why I Built Whatsback Web—And Why It’s Different From Other Tools&lt;/h2&gt;
      &lt;h3&gt;Imam Ali Mustofa ・ Feb 21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#automation&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#whatsapp&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>webdev</category>
      <category>automation</category>
      <category>whatsapp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Why I Built Whatsback Web—And Why It’s Different From Other Tools</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Fri, 21 Feb 2025 04:11:11 +0000</pubDate>
      <link>https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0</link>
      <guid>https://dev.to/darkterminal/why-i-built-whatsback-web-and-why-its-different-from-other-tools-1fo0</guid>
      <description>&lt;p&gt;I built &lt;strong&gt;Whatsback Web&lt;/strong&gt; out of frustration—frustration with endless WhatsApp notifications, manual reports, and missed deadlines. As a Software Freestyle Engineer, I needed a way to automate routine tasks like sending daily updates, rotating team passwords, and managing group announcements without being tied to expensive platforms or complex coding. Other solutions demanded steep subscriptions, locked me into proprietary systems, or required technical know-how I simply didn’t have time to master (too lazy). That’s when I decided: &lt;em&gt;why not build my own tool and share it with everyone?&lt;/em&gt; (look very kind and nice idea!)&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%2Fnay7xaunyscjs2gbj5rf.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%2Fnay7xaunyscjs2gbj5rf.png" alt="Whatsback Image 1" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Breaking Point: “There Has to Be a Better Way”
&lt;/h3&gt;

&lt;p&gt;Every day, my workflow looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually forwarding &lt;strong&gt;booking forms&lt;/strong&gt; from clients.&lt;/li&gt;
&lt;li&gt;Copy-pasting &lt;strong&gt;daily reports&lt;/strong&gt; into multiple group chats.&lt;/li&gt;
&lt;li&gt;Resetting &lt;strong&gt;weekly passwords&lt;/strong&gt; for team accounts (and praying I didn’t forget).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wasn’t alone. Many businesses, freelancers, and community admins face the same chaos. In my search for solutions, I found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise tools&lt;/strong&gt; (like Twilio’s API): Powerful, yet expensive and code-heavy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-code platforms&lt;/strong&gt; (such as WATI or Chatfuel): User-friendly, but their subscription fees quickly add up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DIY scripts&lt;/strong&gt;: Customizable but time-consuming to maintain and fragile against WhatsApp updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I asked myself: &lt;em&gt;What if there was a free, open-source backend that anyone could adapt—no strings attached?&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Building Whatsback Web: A Tool for Myself (and You)
&lt;/h3&gt;

&lt;p&gt;I’m building Whatsback Web with whatsapp-web.js—a robust library that allows me to interact seamlessly with WhatsApp Web. This lets me harness powerful automation features without reinventing the wheel. I built Whatsback Web around three core principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple-Straightforward UI&lt;/strong&gt;: Let User find and configure they needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete Ownership&lt;/strong&gt;: Host it yourself, control your data, and avoid vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Cost&lt;/strong&gt;: Free forever, with no hidden fees or tiered pricing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For instance, I automated my team’s &lt;strong&gt;weekly password rotations&lt;/strong&gt; by connecting Whatsback API (built-in) that integrated into another application script. &lt;strong&gt;Booking forms&lt;/strong&gt; now &lt;em&gt;auto-forward&lt;/em&gt; to responsible accounts, and &lt;strong&gt;scheduled group announcements&lt;/strong&gt; go out—even if I’m offline. It’s like having a personal assistant that works 24/7 without costing a dime.&lt;/p&gt;




&lt;h3&gt;
  
  
  How It Stacks Up Against Other Tools
&lt;/h3&gt;

&lt;p&gt;Here’s a practical comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Whatsback Web&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Twilio API&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;WATI / Chatfuel&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free (self-hosted)&lt;/td&gt;
&lt;td&gt;Pay-per-message + API fees&lt;/td&gt;
&lt;td&gt;Monthly subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Customization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full control (open-source)&lt;/td&gt;
&lt;td&gt;Requires coding&lt;/td&gt;
&lt;td&gt;Limited by platform features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Ownership&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your server, your rules&lt;/td&gt;
&lt;td&gt;Third-party servers&lt;/td&gt;
&lt;td&gt;Third-party servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ease of Setup&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic tech skills needed&lt;/td&gt;
&lt;td&gt;Developer expertise needed&lt;/td&gt;
&lt;td&gt;Drag-and-drop interface&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The trade-off?&lt;/strong&gt; Whatsback Web might not be as flashy as some paid tools, but it’s infinitely adaptable. Need to integrate with a niche app? You can do it. Concerned about privacy? Host it on your own hardware. It’s a toolkit designed to empower you, not a black box that dictates your workflow.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why I Open-Sourced It (And Why That Matters)
&lt;/h3&gt;

&lt;p&gt;I chose to open-source Whatsback Web for two key reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Community-Driven Innovation&lt;/strong&gt;: Open-source projects thrive on collaboration. Developers can improve security, add integrations, or fix bugs that I might overlook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: With no hidden trackers or data harvesting, you can review and audit the code yourself. Trust comes from openness.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There’s also a personal side: sharing this project has connected me with developers around the globe, inspiring innovative use cases—like nonprofits using it to coordinate disaster relief updates.&lt;/p&gt;




&lt;h3&gt;
  
  
  Your Turn: Automate Without Limits
&lt;/h3&gt;

&lt;p&gt;Whatsback Web isn’t about being “the best” tool on the market—it’s about being the &lt;strong&gt;most flexible&lt;/strong&gt;. It’s perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small businesses tired of paying for unnecessary features.&lt;/li&gt;
&lt;li&gt;Tech-curious users eager to explore self-hosted solutions.&lt;/li&gt;
&lt;li&gt;Developers looking for a customizable foundation to build upon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’ve ever thought, “I wish WhatsApp could just &lt;em&gt;do this&lt;/em&gt;,” then Whatsback Web is the tool for you. No permissions, no barriers—just endless possibilities.&lt;/p&gt;




&lt;h3&gt;
  
  
  Support the Project
&lt;/h3&gt;

&lt;p&gt;If you find Whatsback Web valuable, consider supporting its ongoing development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Worldwide&lt;/strong&gt;: &lt;a href="https://github.com/sponsors/darkterminal" rel="noopener noreferrer"&gt;GitHub Sponsors&lt;/a&gt; (darkterminal)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indonesian Supporters&lt;/strong&gt;: &lt;a href="https://saweria.co/darkterminal" rel="noopener noreferrer"&gt;Saweria&lt;/a&gt; (darkterminal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your contributions help fuel new features, continuous improvements, and a vibrant community of contributors.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to take control?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/darkterminal/whatsback-web" rel="noopener noreferrer"&gt;Grab the code on GitHub&lt;/a&gt; and make it your own.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— A man who wanted fewer notifications and more sleep&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;P.S. This isn’t a “launch”—it’s an invitation to build something better, together.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>automation</category>
      <category>whatsapp</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From Express to Laravel: My Journey of Rewriting a 5-Year-Old REST API (and Surviving the Chaos)</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Sun, 26 Jan 2025 05:06:08 +0000</pubDate>
      <link>https://dev.to/darkterminal/from-express-to-laravel-my-journey-of-rewriting-a-5-year-old-rest-api-and-surviving-the-chaos-3da7</link>
      <guid>https://dev.to/darkterminal/from-express-to-laravel-my-journey-of-rewriting-a-5-year-old-rest-api-and-surviving-the-chaos-3da7</guid>
      <description>&lt;p&gt;If you’ve ever been handed the task of rewriting a legacy system, you know &lt;em&gt;it’s like being asked to rebuild a plane while it’s still in the air&lt;/em&gt;. For the past four days, I’ve been knee-deep in the trenches, converting a 5-year-old Express REST API into a shiny new Laravel 11 REST API. And let me tell you—it’s been a wild ride.&lt;/p&gt;

&lt;h3&gt;
  
  
  Starting with the Hard Things First
&lt;/h3&gt;

&lt;p&gt;As &lt;strong&gt;Taylor Otwell&lt;/strong&gt;, the creator of Laravel, wisely said, &lt;em&gt;“Start with the hard things first!”&lt;/em&gt; And boy, did I take that advice to heart. The first hurdle? Creating &lt;strong&gt;64 table schemas&lt;/strong&gt; in Laravel from an existing database. If that doesn’t sound like a nightmare, you’ve probably never had to manually map out decades of database decisions made by someone who clearly didn’t believe in documentation.&lt;/p&gt;

&lt;p&gt;It was a pain in the ass, but oddly satisfying. There’s something therapeutic about taking chaos and turning it into order. And thanks to my new assistant, &lt;em&gt;Deepseek AI&lt;/em&gt;, the process felt a little less like pulling teeth and a little more like solving a puzzle.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Real Challenge: Controllers and Models
&lt;/h3&gt;

&lt;p&gt;Now that the database schemas are done, the next mountain to climb is converting all the controllers and models from Express to Laravel. If you’ve ever worked with both frameworks, you know they’re like two different languages—Express is the wild west, and Laravel is the well-organized city with traffic lights and sidewalks.&lt;/p&gt;

&lt;p&gt;This part is going to be intense. But hey, if I survived creating 64 table schemas, &lt;em&gt;I can survive this too, right?&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fun Part: Backup Script Magic
&lt;/h3&gt;

&lt;p&gt;Amidst all the chaos, there’s been one bright spot: converting the Backup Script from native PHP to Laravel. This little gem takes a database dump, transforms it into an image, and stores it in &lt;em&gt;Cloudflare R2 Object Storage&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Why? Because I’m a poor man. Let’s be real—Cloudflare’s 10GB of free storage isn’t exactly a bottomless pit. So, I had to get creative. By minimizing the size of the database dumps, I can stretch that 10GB as far as possible. It’s like playing Tetris with data, and honestly, it’s been the most enjoyable part of this whole process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lessons Learned (So Far)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with the hard things.&lt;/strong&gt; It’s tempting to tackle the easy tasks first, but getting the tough stuff out of the way early makes the rest of the project feel like a downhill sprint.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document everything.&lt;/strong&gt; If you’re working with a legacy system, chances are the original developers didn’t leave you much to work with. Don’t make the same mistake—document your process as you go.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage AI tools.&lt;/strong&gt; Tools like Deepseek AI have been a game-changer for me. They don’t replace the need for human intuition, but they sure make the grind a lot easier.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Celebrate the small wins.&lt;/strong&gt; Whether it’s successfully converting a backup script or finally getting that one stubborn table schema to work, take a moment to appreciate your progress.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;The journey isn’t over yet. Converting the controllers and models is going to be a beast, but I’m ready for it. And who knows? Maybe by the end of this, I’ll have a few more war stories to share.&lt;/p&gt;

&lt;p&gt;If you’ve ever gone through a similar rewrite, I’d love to hear about your experience. And if you’re just starting one, buckle up—it’s going to be a bumpy ride, but it’s worth it.&lt;/p&gt;

&lt;p&gt;Until next time, happy dancing!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What’s the most challenging rewrite or migration project you’ve tackled? Let me know in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Lil Story about libSQL Extension in PHP</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Sat, 25 Jan 2025 05:31:03 +0000</pubDate>
      <link>https://dev.to/darkterminal/lil-story-about-libsql-extension-in-php-4757</link>
      <guid>https://dev.to/darkterminal/lil-story-about-libsql-extension-in-php-4757</guid>
      <description>&lt;p&gt;&lt;strong&gt;Who's the Creator of the libSQL Extension in PHP? Spoiler: It's Me!&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Let me share a quick story. The other day, someone messaged me on social media. They sent a screenshot asking, &lt;em&gt;“Who’s the creator of the libSQL extension in PHP?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, guess what? &lt;strong&gt;It’s me.&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%2F17yz0crfcl6ffm2cdqqx.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%2F17yz0crfcl6ffm2cdqqx.png" alt="screenshot" width="598" height="918"&gt;&lt;/a&gt;   &lt;/p&gt;

&lt;p&gt;Yep, &lt;em&gt;me&lt;/em&gt;. The same person who talks about libSQL and &lt;strong&gt;&lt;a href="https://turso.tech" rel="noopener noreferrer"&gt;Turso Database&lt;/a&gt;&lt;/strong&gt; everywhere. Why not? It's my work (even though I'm not Turso Internal). If that sounds a bit full of myself, I’ll admit it. That’s just how I roll.  &lt;/p&gt;

&lt;p&gt;Now, about this &lt;strong&gt;Software Freestyle Engineer (SFE)&lt;/strong&gt; title. Sounds fancy, right? But really, it’s a bit of a joke. I mean, it’s true, but still a joke. I don’t fit into the typical mold. I’m the guy who bends the rules, writes some code, and laughs about it later.  &lt;/p&gt;

&lt;p&gt;Being an SFE is all about embracing the wild side. It takes guts to try what others won't. And sure, I like to think I make it look easy. I’m not here to follow the crowd—I’m here to change the game.  &lt;/p&gt;

&lt;p&gt;So, when people ask about the &lt;strong&gt;libSQL extension&lt;/strong&gt;, I don’t just give them a boring answer. I show them &lt;em&gt;me&lt;/em&gt;. This extension wouldn't exist without my mix of boldness and a bit of charm. I’m someone who takes risks, makes mistakes, and then shares it online.  &lt;/p&gt;

&lt;p&gt;So there you have it. If you've wondered who's behind the &lt;strong&gt;libSQL extension in PHP&lt;/strong&gt;, it's me. The SFE. A mix of humor and smarts. The one who makes things happen.  &lt;/p&gt;

&lt;p&gt;Honestly? I wouldn’t change a thing.  &lt;/p&gt;

&lt;p&gt;Catch you later, folks!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/darkterminal" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;☕️ Support My Work at GitHub&lt;/a&gt;
&lt;/p&gt;





&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tursodatabase" rel="noopener noreferrer"&gt;
        tursodatabase
      &lt;/a&gt; / &lt;a href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;
        turso-client-php
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Turso + PHP - libSQL Extension for PHP (Community SDK)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="https://discord.gg/turso" rel="nofollow noopener noreferrer"&gt;
    
      
      
      &lt;a href="https://camo.githubusercontent.com/a1dd298655f3b114dcf5288733badacea5607d8a1eb2d10dbef050ec7448a90c/68747470733a2f2f692e696d6775722e636f6d2f764743433049342e706e67" class="article-body-image-wrapper"&gt;&lt;img alt="Shows a black logo in light color mode and a white one in dark color mode." src="https://camo.githubusercontent.com/a1dd298655f3b114dcf5288733badacea5607d8a1eb2d10dbef050ec7448a90c/68747470733a2f2f692e696d6775722e636f6d2f764743433049342e706e67"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0bddc9e0654e70a839151df468e7ccd9ebaae266acb6b94a5e50ab210f6a25fc/68747470733a2f2f692e696d6775722e636f6d2f7a525666574c332e706e67"&gt;&lt;img alt="Turso + PHP" src="https://camo.githubusercontent.com/0bddc9e0654e70a839151df468e7ccd9ebaae266acb6b94a5e50ab210f6a25fc/68747470733a2f2f692e696d6775722e636f6d2f7a525666574c332e706e67" width="1000"&gt;&lt;/a&gt;
    &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Turso + PHP (Community SDK)&lt;/h1&gt;
&lt;/div&gt;
    &lt;p&gt;
      SQLite for Production. Powered by &lt;a href="https://turso.tech/libsql" rel="nofollow noopener noreferrer"&gt;libSQL&lt;/a&gt;
    &lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-phpLICENSE" rel="noopener noreferrer"&gt;
    
      &lt;a href="https://camo.githubusercontent.com/65d48acf89fe262f1adb3b827cd28fa635e7191a7ee8cbef978267bfce8b6481/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/65d48acf89fe262f1adb3b827cd28fa635e7191a7ee8cbef978267bfce8b6481/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" alt="MIT License"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
  &lt;a href="https://tur.so/discord-php" rel="nofollow noopener noreferrer"&gt;
    
      &lt;a href="https://camo.githubusercontent.com/a5a3d42ef9147bb5b2550f3fc54bf05f2b94b8310523029728d980c225761470/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3933333037313136323638303935383938363f636f6c6f723d303163336230" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/a5a3d42ef9147bb5b2550f3fc54bf05f2b94b8310523029728d980c225761470/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3933333037313136323638303935383938363f636f6c6f723d303163336230" alt="Discord"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php#contributors" rel="noopener noreferrer"&gt;
    
      &lt;a href="https://camo.githubusercontent.com/897c6f7f3ecd8efa75fcc5ee8a5cba9424c2bc3b50fa0120bb0c1591133e47f7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/897c6f7f3ecd8efa75fcc5ee8a5cba9424c2bc3b50fa0120bb0c1591133e47f7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" alt="Contributors"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php/releases" rel="noopener noreferrer"&gt;
    
      &lt;a href="https://camo.githubusercontent.com/07dcf36349a3df161b6bf1ab491f83127f5f58ba0233a0ccce63d41615219406/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f747572736f64617461626173652f747572736f2d636c69656e742d7068702f746f74616c2e7376673f636f6c6f723d303163336230" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/07dcf36349a3df161b6bf1ab491f83127f5f58ba0233a0ccce63d41615219406/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f646f776e6c6f6164732f747572736f64617461626173652f747572736f2d636c69656e742d7068702f746f74616c2e7376673f636f6c6f723d303163336230" alt="Total downloads"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
  &lt;a href="https://github.com/tursodatabase/turso-client-php/releases" rel="noopener noreferrer"&gt;
    
      &lt;a href="https://camo.githubusercontent.com/ce121bacf9c96324ea7dcb63d4e9ee9e48aa51cb3219f8c6e393d13862c76cec/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/ce121bacf9c96324ea7dcb63d4e9ee9e48aa51cb3219f8c6e393d13862c76cec/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f747572736f64617461626173652f747572736f2d636c69656e742d7068703f636f6c6f723d303163336230" alt="Release"&gt;&lt;/a&gt;
    
  &lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;PHP Versions&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;PHP Versions&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Build Versions&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;8.1&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;TS / NTS&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;8.2&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;TS / NTS&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;8.3&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;TS / NTS&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;8.4&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;TS / NTS&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: TS (Thread Safe), NTS (Non Thread-Safe). &lt;strong&gt;Support for:&lt;/strong&gt; Linux/ Mac/Darwin / Windows/WSL&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Installing the extension should be not complecated, it's easy and like using &lt;strong&gt;Composer Package Installer&lt;/strong&gt;. Or, if you belive with this quotes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If there is a hard way, why choose the easy way?&lt;/p&gt;
&lt;p&gt;— Me&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So you need to go with the &lt;strong&gt;Manual Installation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
  &lt;b&gt;Auto Installer&lt;/b&gt;&lt;br&gt;
  &lt;code&gt;turso-php-installer&lt;/code&gt; is a Composer package capable of executing various commands related to libSQL, simplifying the development process, and making it easier to simulate in a local environment.&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;composer global require darkterminal/turso-php-installer&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Add to &lt;code&gt;PATH&lt;/code&gt; variable:&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;export&lt;/span&gt; COMPOSER_BIN_DIR=&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;$(&lt;/span&gt;composer config --global home&lt;span class="pl-pds"&gt;)&lt;/span&gt;&lt;/span&gt;/vendor/bin&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We have two options to install the extension using…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>webdev</category>
      <category>php</category>
      <category>laravel</category>
      <category>database</category>
    </item>
    <item>
      <title>Seeking Support for Something Useful</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Thu, 23 Jan 2025 21:32:45 +0000</pubDate>
      <link>https://dev.to/darkterminal/seeking-support-for-something-useful-4ile</link>
      <guid>https://dev.to/darkterminal/seeking-support-for-something-useful-4ile</guid>
      <description>&lt;p&gt;Hello Punk, I am back!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After gaining significant attention and a glimmer of hope, the clouds slowly began to roll in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Thought
&lt;/h2&gt;

&lt;p&gt;As a Full-time Open Source contributor, this &lt;em&gt;is not just a hobby&lt;/em&gt;. What I do is a passion that I continue to learn and grow in every day. Although I am not an expert and do not know everything, I have mastered the skills I possess. I choose not to be a 'Swiss Army knife' but instead to keep learning, sharpening myself, and dreaming of becoming a "Samurai".&lt;/p&gt;

&lt;p&gt;Indeed, sometimes my &lt;em&gt;Sufistic&lt;/em&gt; side fortifies (not hinders) my mind from being consumed by the pursuit of wealth, because I believe that God is neither foolish nor neglectful toward His creations. That is why I always strive to do things not solely based on 'money,' but rather on &lt;strong&gt;personal fulfillment&lt;/strong&gt;, knowing that what I have done can be useful and beneficial to others.&lt;/p&gt;

&lt;p&gt;For 10 years, I have been immersed in the world of programming, and for the past 6 years, I have lived with my small family, including a beautiful daughter who has become the energy and inspiration for my freestyle approach to everything. They (my wife and daughter) are the best and strongest people I have in my life.&lt;/p&gt;

&lt;p&gt;Choosing to be a Full-time Open Source contributor in Indonesia is considered a 'CRAZY' decision. Unlike in other countries, where knowledge and creative work are valued appropriately, I am constrained by my own &lt;em&gt;Sufistic&lt;/em&gt; mindset. I cannot resist the magic of one simple word that can come from someone's mouth: 'Thank you.' This often creates ambiguity when it clashes with financial realities. Yes, this is the irony I face.&lt;/p&gt;

&lt;p&gt;But once again, it all comes back to God, the All-Knowing and the All-Providing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future Idea
&lt;/h2&gt;

&lt;p&gt;This year, I am going to create something big, and it will undoubtedly require a lot of time, energy, and thought. Since this idea is still being developed and will later be revealed to the public, you can try to guess for now what it might be. As a clue, you can check out my &lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; profile. From there, you’ll get an idea of what I’m likely working on—everything is interconnected between what’s on my GitHub and the news surrounding it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support
&lt;/h2&gt;

&lt;p&gt;If you appreciate someone 'crazy' like me, who supports their family through the passion I have, you can support what I do on &lt;a href="https://github.com/darkterminal" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. It would mean the world to me, as there are no words to fully express my gratitude and appreciation for those who use the tools I’ve created over the years.&lt;/p&gt;

&lt;p&gt;See you...&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>sponsor</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Turso libSQL Installer</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Sat, 22 Jun 2024 20:10:03 +0000</pubDate>
      <link>https://dev.to/darkterminal/turso-libsql-installer-29mj</link>
      <guid>https://dev.to/darkterminal/turso-libsql-installer-29mj</guid>
      <description>&lt;p&gt;Hello Punk! Yes I am, in this journal I want to share with you how to install &lt;a href="//turso.tech/libsql"&gt;libSQL&lt;/a&gt; in your PHP Environment without worry to configure &lt;code&gt;php.ini&lt;/code&gt; file in your current PHP Version.&lt;/p&gt;

&lt;p&gt;Install the libSQL extension for PHP it's like install a composer package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require vendor/package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to install libSQL extension for PHP&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;turso-php-installer &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fnifadv8ox1kkpo7yu211.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%2Fnifadv8ox1kkpo7yu211.png" alt="Turso PHP Installer" width="701" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyway... I want you to know how the punk'in single file installer script work and setup it for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;help&lt;/code&gt; command
&lt;/h2&gt;

&lt;p&gt;You already see in the image above. That's the &lt;code&gt;help&lt;/code&gt; command does.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;install&lt;/code&gt; command
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;install&lt;/code&gt; command will do some necessary checks before installing the libSQL Extension for PHP, what a questions will ask for? (checking in the background)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are You Using Windows?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even though &lt;a href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;Turso Client PHP&lt;/a&gt; has an extension built for Windows MSVC 2022. However, the installation process using this installer script will not work for Windows. WSL will work or you can use &lt;a href="https://github.com/darkterminal/turso-docker-php" rel="noopener noreferrer"&gt;Turso Docker PHP&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;If you're using Windows then you will get this message:&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="o"&gt;&amp;gt;&lt;/span&gt; turso-php-installer &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="c"&gt;# In Windows&lt;/span&gt;
Sorry, Turso PHP Installer is only support &lt;span class="k"&gt;for &lt;/span&gt;Linux and MacOS.

You are using Windows, you can try our alternative using Dev Containers
visit: https://github.com/darkterminal/turso-docker-php

Thank you!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Are You Using Laravel Herd?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dang yeah... the installer is not support yet for Laravel Herd. But I will support soon, and you can follow up this discussion on &lt;a href="https://github.com/beyondcode/herd-community/discussions/804" rel="noopener noreferrer"&gt;Herd Community GitHub Disccussion&lt;/a&gt;.&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;You are using Laravel Herd
Sorry, Laravel Herd is not supported yet.
You can try our alternative using Dev Containers
visit: https://github.com/darkterminal/turso-docker-php

Thank you!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Is Already Installed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes I forgot when it's already installed.&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;Turso Client PHP is already installed and configured!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Which PHP Version?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Turso Client PHP / libSQL Extension for PHP need minimal PHP 8.0 and later. You see it at &lt;a href="https://github.com/tursodatabase/turso-client-php/releases" rel="noopener noreferrer"&gt;Turso Client PHP - Release page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have PHP below the minimum requirement, then it will failed&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;Oops! Your PHP version environment does not meet the requirements.
Need a minimal PHP 8.0 installed on your environment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check &lt;code&gt;php.ini&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The installer script need to lookup&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;You don&lt;span class="s1"&gt;'t have PHP install globaly in your environment
Turso Client PHP lookup php.ini file and it'&lt;/span&gt;s not found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check The Functions Requiered&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The installer script also need a &lt;code&gt;shell_exec&lt;/code&gt; and &lt;code&gt;curl&lt;/code&gt; function&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;It looks like the &lt;span class="s1"&gt;'shell_exec'&lt;/span&gt; and &lt;span class="s1"&gt;'curl_version'&lt;/span&gt; functions are disabled &lt;span class="k"&gt;in &lt;/span&gt;your PHP environment. These functions are essential &lt;span class="k"&gt;for &lt;/span&gt;this script to work properly.
To &lt;span class="nb"&gt;enable &lt;/span&gt;them, follow these steps:
1. Open your &lt;span class="s1"&gt;'php.ini'&lt;/span&gt; file. You can find the location of your &lt;span class="s1"&gt;'php.ini'&lt;/span&gt; file by running the &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="s1"&gt;'php --ini'&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;your terminal or &lt;span class="nb"&gt;command &lt;/span&gt;prompt.
2. Search &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s1"&gt;'disable_functions'&lt;/span&gt; directive. It might look something like this:
disable_functions &lt;span class="o"&gt;=&lt;/span&gt; shell_exec, curl_version
3. Remove &lt;span class="s1"&gt;'shell_exec'&lt;/span&gt; and &lt;span class="s1"&gt;'curl_version'&lt;/span&gt; from this list. It should look like:
disable_functions &lt;span class="o"&gt;=&lt;/span&gt;
4. Save the &lt;span class="s1"&gt;'php.ini'&lt;/span&gt; file.
5. Restart your web server &lt;span class="k"&gt;for &lt;/span&gt;the changes to take effect. If you are using Apache, you can restart it with:
&lt;span class="nb"&gt;sudo &lt;/span&gt;service apache2 restart
or &lt;span class="k"&gt;for &lt;/span&gt;Nginx:
&lt;span class="nb"&gt;sudo &lt;/span&gt;service nginx restart
If you are using a web hosting service, you might need to contact your hosting provider to &lt;span class="nb"&gt;enable &lt;/span&gt;these functions &lt;span class="k"&gt;for &lt;/span&gt;you.
For more information on &lt;span class="s1"&gt;'shell_exec'&lt;/span&gt;, visit: https://www.php.net/manual/en/function.shell-exec.php
For more information on &lt;span class="s1"&gt;'curl_version'&lt;/span&gt;, visit: https://www.php.net/manual/en/function.curl-version.php
Thank you!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Asking Permission&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The installer need to run with &lt;strong&gt;sudo&lt;/strong&gt; role, because the installer will need to write &lt;code&gt;php.ini&lt;/code&gt; file in your environment.&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="nv"&gt;$ &lt;/span&gt;turso-php-installer &lt;span class="nb"&gt;install
&lt;/span&gt;Turso need to &lt;span class="nb"&gt;install &lt;/span&gt;the client extension &lt;span class="k"&gt;in &lt;/span&gt;your PHP environment.
This script will ask your &lt;span class="nb"&gt;sudo &lt;/span&gt;password to modify your php.ini file:
Are you ok? &lt;span class="o"&gt;[&lt;/span&gt;y/N]: 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Download and Extract&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After all requirements is meet, then installer will download and extract the libSQL Extension for PHP based on Current PHP version that used in your environment and store it at &lt;code&gt;$HOME/.turso-client-php&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;The extension is required before you used &lt;a href="https://github.com/tursodatabase/turso-driver-laravel" rel="noopener noreferrer"&gt;Turso Driver Laravel&lt;/a&gt; and &lt;a href="https://github.com/tursodatabase/turso-doctrine-dbal" rel="noopener noreferrer"&gt;Turso Doctrine DBAL&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>database</category>
      <category>php</category>
      <category>laravel</category>
    </item>
    <item>
      <title>libSQL Extension for PHP Officially Landed at Turso!</title>
      <dc:creator>Imam Ali Mustofa</dc:creator>
      <pubDate>Tue, 11 Jun 2024 13:31:26 +0000</pubDate>
      <link>https://dev.to/darkterminal/libsql-extension-for-php-officially-landed-at-turso-5e7i</link>
      <guid>https://dev.to/darkterminal/libsql-extension-for-php-officially-landed-at-turso-5e7i</guid>
      <description>&lt;p&gt;Hello Punk! Yes, I am again.&lt;/p&gt;

&lt;p&gt;I've very busy dancing day and messing up something until I got confused (&lt;em&gt;what's going on me?!&lt;/em&gt;) I don't know!&lt;/p&gt;

&lt;p&gt;Writing bunch of paper and try to implement one by one in disorder direction (&lt;em&gt;yes, it's a tech-ni-que!&lt;/em&gt;) to create abstract art that make me overwhelming-confused. BTW, I just tired!&lt;/p&gt;

&lt;p&gt;tub, I need to show you some _&lt;strong&gt;art&lt;/strong&gt;_istic piece of punk by me (off course!), cz I am too handsome to do anything while dancing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Turso Database
&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%2Fhecoq6gorp9homox1nyu.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%2Fhecoq6gorp9homox1nyu.png" alt="Turso Database" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What the punk is turso?!
&lt;/h3&gt;

&lt;p&gt;Nice question! Thank you very much... &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://docs.turso.tech/introduction" rel="noopener noreferrer"&gt;&lt;strong&gt;Turso&lt;/strong&gt;&lt;/a&gt; is a SQLite-compatible database built on &lt;a href="https://docs.turso.tech/libsql" rel="noopener noreferrer"&gt;&lt;strong&gt;libSQL&lt;/strong&gt;&lt;/a&gt;, the Open Contribution fork of SQLite. It enables scaling to hundreds of thousands of databases per organization and supports replication to any location, including your own servers, for microsecond-latency access. - &lt;a href="https://docs.turso.tech/introduction" rel="noopener noreferrer"&gt;turso.tech&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have I just promoted Turso on my previous 3 or 4 blogs?! Hmm... damn it!&lt;/p&gt;

&lt;p&gt;tub, never-mind! I just proud by myself found amazing playground and be the first person to build Native Extension/Driver/Whatever for PHP that support all features of Turso.&lt;/p&gt;

&lt;h2&gt;
  
  
  SQLite for Production
&lt;/h2&gt;

&lt;p&gt;What even mean by that? It's stupid!&lt;/p&gt;

&lt;p&gt;Na na na na... hold on, let me tell you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A database is often referred to as a “&lt;strong&gt;logical database&lt;/strong&gt;” because it consists of multiple libSQL databases.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Each database is equipped with its own schema and data, situated in a primary location along with possibly several replica locations within its designated group. This setup ensures that the schema and data are seamlessly copied from the primary location to all replica sites in the &lt;strong&gt;&lt;a href="https://docs.turso.tech/concepts#groups" rel="noopener noreferrer"&gt;group&lt;/a&gt;&lt;/strong&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Databases are identified by a distinct libSQL URL. When accessed through the libSQL client SDKs, this URL directs the client to the database instance that offers the lowest latency, thereby reducing the overall duration of read operations.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The point I just highlight for you, this is what I called &lt;em&gt;it's is amazing place to create chaos as I can!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And you can &lt;a href="https://docs.turso.tech/concepts" rel="noopener noreferrer"&gt;read by your-self&lt;/a&gt; to proof &lt;strong&gt;&lt;em&gt;deznutt&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Client SDKs
&lt;/h2&gt;

&lt;p&gt;Lorsque je regarde le flux VimMoustache et parle de la base de données Turso, je consulte le site, je lis l'introduction et tous les concepts et fonctionnalités qu'ils ont et proposent, c'est.....&lt;/p&gt;

&lt;p&gt;My first Impression, ThePunk! Where is PHP SDK!? Aaaaaaahhh... I am mad! tub, still handsome.&lt;/p&gt;

&lt;p&gt;Then I search through Internet, call Vivaldi to play &lt;a href="https://en.wikipedia.org/wiki/Campursari" rel="noopener noreferrer"&gt;&lt;strong&gt;Campursai Music&lt;/strong&gt;&lt;/a&gt;, then make a "quack" sound from the 🦆 that said: "Turso for PHP", "libSQL for PHP" it's basic search.&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%2F1ok3ladqxfmdbyuwj2k7.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%2F1ok3ladqxfmdbyuwj2k7.png" alt="Turso for PHP" width="800" height="608"&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%2F059eb7rmixggizxokvnd.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%2F059eb7rmixggizxokvnd.png" alt="libSQL for PHP" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See.. that's me! I search the queries using &lt;a href="https://www.browserling.com/" rel="noopener noreferrer"&gt;browserling&lt;/a&gt; for fairness, btw.&lt;/p&gt;

&lt;p&gt;Now, I am polute the Internet.&lt;/p&gt;

&lt;p&gt;tub, before I messing up internet, they come up with nice and amazing marterpiece that represent the power of Turso. Almost all of them is implement HTTP SDK to interact with database and natively talk using SQLite3, sync using cronjob.&lt;/p&gt;

&lt;p&gt;Then... my freestyler soul starting to stir and want to start something extraordinary with my chaos dance as a Software Freestyle Engineer (BTW).&lt;/p&gt;

&lt;h3&gt;
  
  
  #1 Song to Dance
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_K62GKx-qvQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I started by gathering the energy to dance by reading the documentation, comments on the source code, and exploring the &lt;a href="https://github.com/tursodatabase/libsql" rel="noopener noreferrer"&gt;libSQL&lt;/a&gt; repository on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I am good as an artist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, I will impersonate &lt;code&gt;libsql-client-ts&lt;/code&gt; in PHP land. &lt;em&gt;Yes, call me impostor for now!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You know, explore new things for me is like mountaineering, enter the forest that has not been touched much and find a way to be able to reach the top or at least be able to return home to meet the family.&lt;/p&gt;

&lt;p&gt;I create &lt;a href="https://github.com/darkterminal/turso-http" rel="noopener noreferrer"&gt;Turso-HTTP&lt;/a&gt; using &lt;a href="https://docs.turso.tech/sdk/http/quickstart" rel="noopener noreferrer"&gt;HTTP SDK&lt;/a&gt;. My first thought; this is really amazing, SQLite as Rest API?! WhatThePunk!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I am still dance with this &lt;strong&gt;#1 Song&lt;/strong&gt; in 8 hours building in a loop!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After create &lt;a href="https://github.com/darkterminal/turso-http" rel="noopener noreferrer"&gt;Turso-HTTP&lt;/a&gt;, I think something missing here...&lt;/p&gt;

&lt;p&gt;Ah! The Punk, yes! The &lt;code&gt;sync&lt;/code&gt; method, tub wait... &lt;em&gt;how can I implement this method in PHP when I didn't have libSQL binary?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That question in my handsome brain, is kept coming up.&lt;/p&gt;

&lt;p&gt;How about using &lt;code&gt;Loop::addPeriodicTimer&lt;/code&gt; from &lt;code&gt;ReactPHP&lt;/code&gt; and manage sync between local and remote with queue manager in JSON file with timestamp?!&lt;/p&gt;

&lt;p&gt;Yes, I did something like this when I sell Instagram Followers, Likes, and Comments 9 years ago using &lt;a href="https://github.com/mgp25/Instagram-API" rel="noopener noreferrer"&gt;mgp25/instagram-api&lt;/a&gt;, how wonderful that day!.&lt;/p&gt;

&lt;p&gt;Nevermind, go back to the topic fish!&lt;/p&gt;

&lt;p&gt;Yes, I did it! I create &lt;a href="https://github.com/darkterminal/turso-syncd" rel="noopener noreferrer"&gt;Turso-Syncd&lt;/a&gt; to leverage Turso Background Sync!&lt;/p&gt;

&lt;p&gt;The final touch is, I support Turso-HTTP with &lt;a href="https://docs.turso.tech/api-reference/introduction" rel="noopener noreferrer"&gt;Platform API&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  #2 Song to Dance
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ekHJTF20FA8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handsome Brain Still Thinking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I need implement all features and I need to embed the libSQL Rust Binary into PHP, tub how?&lt;/p&gt;

&lt;p&gt;Learn Rust or C damn it!&lt;/p&gt;

&lt;p&gt;Yes! I need to learn Rust with some motivation that come from &lt;a href="https://aaronfrancis.com/podcast/php-doesnt-suck-anymore-yfnsj0" rel="noopener noreferrer"&gt;Aaron Francis&lt;/a&gt; podcast and YouTube Video &lt;a href="https://www.youtube.com/watch?v=ZRV3pBuPxEQ" rel="noopener noreferrer"&gt;PHP doesn't suck (anymore)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why not!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Learning Rust is the same as I will become &lt;strong&gt;rust&lt;/strong&gt; that can stick to sturdy scrap metal.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I learn Rust! Cz libSQL build using Rust, so I can embed libSQL into my PHP Extension using crate/framework &lt;a href="https://github.com/davidcole1340/ext-php-rs" rel="noopener noreferrer"&gt;ext-php-rs&lt;/a&gt; made by &lt;a href="https://github.com/davidcole1340" rel="noopener noreferrer"&gt;&lt;br&gt;
David Cole&lt;/a&gt; this is cool crate/framework that can make people create their own PHP Extension using Rust!&lt;/p&gt;



&lt;p&gt;Tub, I am struggle with this crate/framework in the first-time. So I decide to create using extension with On-Demand Compilation tech-ni-que "this sound stupid" using Rust Cbindgen, so I force developer to build this extension from Source via Composer it's called &lt;a href="https://github.com/darkterminal/libsql-php-ext" rel="noopener noreferrer"&gt;libsql-php-ext&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;So, when you run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require darkterminal/libsql-php-ext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They will install:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C/C++ Compiler&lt;/li&gt;
&lt;li&gt;jq&lt;/li&gt;
&lt;li&gt;Rust Installed&lt;/li&gt;
&lt;li&gt;PHP Installed&lt;/li&gt;
&lt;li&gt;FFI Extension is Enabled (Why? I read the C heder definition from wrapper)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then create PHP Abstraction to wrap the API in PHP using PHP FFI. It's too complicated like Tech's nowaday 😁, I named &lt;a href="https://github.com/darkterminal/libsql-client-php" rel="noopener noreferrer"&gt;libSQL Client PHP&lt;/a&gt; and this is the #1 libSQL PHP binary that talk natively with libSQL driver!&lt;/p&gt;

&lt;p&gt;And I think this is &lt;strong&gt;&lt;em&gt;too forced and less effective&lt;/em&gt;&lt;/strong&gt; for working in a PHP environment because developers have to build it from source with various tool preparations. &lt;em&gt;Why not make it a binary file that can be downloaded and used immediately like a PHP extension in general?!&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  #3 Song to Dance
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/yvuj09xmwRo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handsome Dance Move&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now I'm starting to get familiar with the &lt;code&gt;ext-php-rs&lt;/code&gt; crate/framework to start creating libSQL extensions for PHP after a few tries.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Like penetrating a wild jungle in the mountains without a compass and without experience, yes, this was indeed my first journey dancing in a new language sung and accompanied by rusty old iron music.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After &amp;lt;1 Month! I create &lt;strong&gt;libSQL Native Extension for PHP&lt;/strong&gt; that support all Turso features! And distribute the extension via GitHub Action!&lt;/p&gt;

&lt;p&gt;There is no other song, tub if you want to hear more about Campursari Song Playlist while creating the libSQL Native Extension for PHP &lt;a href="https://www.youtube.com/playlist?list=PLZaIaMXfdrYw5NE13ek2G2tR4T4JswCvr" rel="noopener noreferrer"&gt;Turso for PHP - Building Playlists&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Native BTW
&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%2F7p2jam8lensqytgyomp6.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%2F7p2jam8lensqytgyomp6.png" alt="libSQL Native Extension for PHP" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One-time installation for your PHP Environment and use it anywhere in your PHP project!&lt;/p&gt;

&lt;p&gt;I build and make it feel like using SQLite3 in PHP but powered by more type of database connections!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In-Memory Connection&lt;/li&gt;
&lt;li&gt;Local Connection&lt;/li&gt;
&lt;li&gt;Remote Connection ✅&lt;/li&gt;
&lt;li&gt;Embedded Replica ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This this the core features of Turso/libSQL and it's now available for PHP!&lt;/p&gt;

&lt;p&gt;The Extension Repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/tursodatabase/turso-client-php" rel="noopener noreferrer"&gt;Turso Client PHP&lt;/a&gt; - Turso - libSQL client libraries and utilities for PHP &lt;em&gt;formerly &lt;a href="https://github.com/darkterminal/libsql-client-php" rel="noopener noreferrer"&gt;libSQL Client PHP&lt;/a&gt;&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Other PHP Driver Repostories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/tursodatabase/turso-driver-laravel" rel="noopener noreferrer"&gt;Turso Driver Laravel&lt;/a&gt; - Turso driver for Laravel&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tursodatabase/turso-doctrine-dbal" rel="noopener noreferrer"&gt;Turso Doctrine DBAL&lt;/a&gt; - A LibSQL Driver for Doctrine DBAL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Officially Landed
&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%2F9jyrcrzo96t0qd5ov0bf.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%2F9jyrcrzo96t0qd5ov0bf.png" alt="The landing page for PHP" width="800" height="763"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The landing page for PHP at Turso: &lt;a href="https://turso.tech/php" rel="noopener noreferrer"&gt;https://turso.tech/php&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Made in Java
&lt;/h2&gt;

&lt;p&gt;This is amazing joke from CEO of Turso Database! Don't get angry because of this, THIS IS A JOKE!&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%2F3laz0nkxn0jbx4kwkefz.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%2F3laz0nkxn0jbx4kwkefz.png" alt="Made in Java" width="600" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://x.com/glcst/status/1791128033677463890" rel="noopener noreferrer"&gt;Tweet from Glauber Costa - Founder/CEO at Turso Database&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;You can support my open-source activity at GitHub and support me to keep build something that make me proud of myself!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/darkterminal" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Become a Sponsor&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>php</category>
      <category>programming</category>
      <category>laravel</category>
      <category>database</category>
    </item>
  </channel>
</rss>
