<?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: Vahid Al</title>
    <description>The latest articles on DEV Community by Vahid Al (@thevahidal).</description>
    <link>https://dev.to/thevahidal</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%2F836100%2F39c2d680-ab42-4227-8de8-27432fdf91c1.jpeg</url>
      <title>DEV Community: Vahid Al</title>
      <link>https://dev.to/thevahidal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thevahidal"/>
    <language>en</language>
    <item>
      <title>Soul RESTful and realtime server for SQLite, now with Authentication!</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Tue, 19 Mar 2024 16:24:55 +0000</pubDate>
      <link>https://dev.to/thevahidal/soul-restful-and-realtime-server-for-sqlite-now-with-authentication-3086</link>
      <guid>https://dev.to/thevahidal/soul-restful-and-realtime-server-for-sqlite-now-with-authentication-3086</guid>
      <description>&lt;p&gt;Hey everyone,&lt;br&gt;
I'm excited to share an update about Soul, an open source project I created that acts as a RESTful and realtime server for SQLite databases.&lt;/p&gt;

&lt;p&gt;Soul makes it incredibly simple to add a backend to any project - just give it a SQLite database file and it will instantly serve up CRUD endpoints without any additional configuration. When I first launched Soul a while back, its core functionality was just this.&lt;/p&gt;

&lt;p&gt;A few months ago, one of Soul's long time contributors approached me about adding authentication and authorization capabilities. We worked together to design an ACL system, and they implemented it. I'm pleased to share that Soul now has robust user authentication and role-based access control built right in.&lt;/p&gt;

&lt;p&gt;The authentication works by defining "roles" that map tables to permitted CRUD operations. These roles can then be assigned to users. This allows you to easily control which users have create, read, update or delete access to specific tables. It couldn't be much simpler to set up authorization for your SQLite APIs.&lt;/p&gt;

&lt;p&gt;I'm grateful for the contributions that have helped Soul grow. Please check it out at &lt;a href="https://github.com/thevahidal/soul"&gt;https://github.com/thevahidal/soul&lt;/a&gt; to see these new features in action and get started with your own minimal backend. The project is actively developed and I welcome any feedback on how Soul can better serve developers. I hope Soul continues to lower the barriers to adding secure REST and realtime capabilities to projects.&lt;/p&gt;

&lt;p&gt;Cheers, Al.&lt;/p&gt;

</description>
      <category>node</category>
      <category>sqlite</category>
      <category>api</category>
      <category>rest</category>
    </item>
    <item>
      <title>Introducing Jake: A Free Alternative to Linktree Using GitHub Pages</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Thu, 28 Dec 2023 19:59:18 +0000</pubDate>
      <link>https://dev.to/thevahidal/introducing-jake-a-free-alternative-to-linktree-using-github-pages-4opa</link>
      <guid>https://dev.to/thevahidal/introducing-jake-a-free-alternative-to-linktree-using-github-pages-4opa</guid>
      <description>&lt;p&gt;Hello DEV Community,&lt;/p&gt;

&lt;p&gt;I wanted to reach out to this amazing community and share a project I've been working on called Jake. It's a fantastic alternative to popular link aggregator services like Linktree and OneLink. Jake leverages the power of GitHub Pages to provide you with a hassle-free way to create your own one-link website. The best part? It won't cost you a dime!&lt;/p&gt;

&lt;p&gt;With Jake, you can easily showcase all your important links and content in one central hub, neatly organized and easily accessible. Your website will have a sleek URL in the format of "username.github.io," giving it a professional touch.&lt;/p&gt;

&lt;p&gt;One of the key advantages of Jake is its flexibility. You have complete control over the sections and items (links) you want to include, allowing you to tailor your website to your specific needs. Whether you're a content creator, entrepreneur, or professional, Jake provides the perfect platform to showcase your online presence.&lt;/p&gt;

&lt;p&gt;Setting up Jake is a breeze. In just a few minutes, you can have your one-link website up and running. The setup process is straightforward and doesn't require any complex steps. Although the current customization options are somewhat limited, you can still personalize the theme and primary color to match your style. And fear not, I have plans to introduce more customizable features in the near future, making Jake even more versatile.&lt;/p&gt;

&lt;p&gt;To give you a taste of what Jake can do, I've prepared a demo project for you to explore. Just visit &lt;a href="https://thevahidal.github.io/jake"&gt;https://thevahidal.github.io/jake&lt;/a&gt; and see the potential for yourself.&lt;/p&gt;

&lt;p&gt;If you're interested in contributing or want to dive deeper into the project, you can find the Jake repository on GitHub at &lt;a href="https://github.com/thevahidal/jake"&gt;https://github.com/thevahidal/jake&lt;/a&gt;. I welcome all contributions, feedback, and bug reports. Your input will help shape the future of Jake and make it even better.&lt;/p&gt;

&lt;p&gt;I would like to express my sincere gratitude to this incredible community for your support and engagement. Your feedback and ideas are invaluable, and I'm excited to hear your thoughts on Jake. Let's work together to create a powerful, free alternative to existing link aggregator services.&lt;/p&gt;

&lt;p&gt;Thank you for taking the time to read about Jake. I can't wait to see what we can achieve together.&lt;/p&gt;

&lt;p&gt;Best regards,&lt;br&gt;
Al&lt;/p&gt;

</description>
      <category>website</category>
      <category>webdev</category>
      <category>blog</category>
      <category>python</category>
    </item>
    <item>
      <title>Pun-CLI Just Got Even Pun-nier with +150 New Puns Generated by ChatGPT!</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Sun, 23 Apr 2023 18:46:20 +0000</pubDate>
      <link>https://dev.to/thevahidal/pun-cli-just-got-even-pun-nier-with-150-new-puns-generated-by-chatgpt-onp</link>
      <guid>https://dev.to/thevahidal/pun-cli-just-got-even-pun-nier-with-150-new-puns-generated-by-chatgpt-onp</guid>
      <description>&lt;p&gt;Do you ever find yourself in a punny mood, but can't quite come up with the perfect play on words? Fear not, because &lt;a href="https://github.com/thevahidal/pun-cli"&gt;Pun-CLI&lt;/a&gt; has got you covered!&lt;/p&gt;

&lt;p&gt;With the recent addition of +150 new puns generated by the one and only ChatGPT, this Python-based command-line tool is now even more pun-tastic than ever before.&lt;/p&gt;

&lt;p&gt;Whether you're a programming pro or just looking for a good laugh, pun-CLI has something for everyone. From cheese to math to cats, there's a pun for every occasion. And now, thanks to ChatGPT's contributions, there are even more groan-worthy puns to enjoy.&lt;/p&gt;

&lt;p&gt;So what are you waiting for? Install pun-CLI via pip and get pun-ning! And if you think you've got a pun that can top ChatGPT's latest creations, be sure to add it to the repository and keep the puns coming.&lt;/p&gt;

&lt;p&gt;Happy punning! 🤪&lt;/p&gt;

</description>
      <category>python</category>
      <category>cli</category>
      <category>programming</category>
    </item>
    <item>
      <title>Pun-CLI: Unleashing Hilarious Wordplay with a Single Command</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Mon, 10 Apr 2023 17:25:13 +0000</pubDate>
      <link>https://dev.to/thevahidal/pun-cli-unleashing-hilarious-wordplay-with-a-single-command-42mc</link>
      <guid>https://dev.to/thevahidal/pun-cli-unleashing-hilarious-wordplay-with-a-single-command-42mc</guid>
      <description>&lt;p&gt;Do you love puns? Are you constantly on the lookout for new and hilarious wordplay? Look no further than Pun-CLI, the command-line interface for generating random puns!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/thevahidal/pun-cli"&gt;Pun CLI&lt;/a&gt; is a Python-based tool that connects to a repository of puns and generates a random one based on optional keyword input. It also supports customization with a variety of characters to display the pun.&lt;/p&gt;

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

&lt;p&gt;Pun-CLI can be installed using pip, the Python package installer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;pun-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Once installed, simply run the pun command in your terminal to generate a random pun:&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;pun-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  _________________________________________________
 /                                                 &lt;span class="se"&gt;\&lt;/span&gt;
| Why was the math book sad? Because it had too man |
| y problems.                                       |
 &lt;span class="se"&gt;\ &lt;/span&gt;                                                /
  &lt;span class="o"&gt;=================================================&lt;/span&gt;
                                                  &lt;span class="se"&gt;\&lt;/span&gt;
                                                   &lt;span class="se"&gt;\&lt;/span&gt;
                                                    &lt;span class="se"&gt;\&lt;/span&gt;
                                                     |&lt;span class="se"&gt;\_&lt;/span&gt;/|,,_____,~~&lt;span class="sb"&gt;`&lt;/span&gt;
                                                     &lt;span class="o"&gt;(&lt;/span&gt;.&lt;span class="s2"&gt;".)~~     )&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;~&lt;span class="o"&gt;}}&lt;/span&gt;
                                                      &lt;span class="se"&gt;\o&lt;/span&gt;/&lt;span class="se"&gt;\ &lt;/span&gt;/---~&lt;span class="se"&gt;\\&lt;/span&gt; ~&lt;span class="o"&gt;}}&lt;/span&gt;
                                                        _//    _// ~&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also specify a keyword to search for puns related to a particular topic:&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;pun-cli &lt;span class="nt"&gt;--keyword&lt;/span&gt; &lt;span class="s2"&gt;"food"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if you want to display the pun with a specific character, you can use the &lt;code&gt;--character&lt;/code&gt; flag:&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;pun-cli &lt;span class="nt"&gt;--character&lt;/span&gt; &lt;span class="s2"&gt;"cow"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Want to contribute your own puns to the repository? Great! Simply fork the &lt;a href="https://github.com/thevahidal/pun-cli"&gt;Pun CLI GitHub repository&lt;/a&gt; and add your pun to the &lt;code&gt;pun_repository.txt&lt;/code&gt; file. Then submit a pull request and your pun will be added to the repository for all to enjoy!&lt;/p&gt;

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

&lt;p&gt;Pun CLI is a fun and simple tool for generating random puns and bringing a little humor into your day. Install it today and start unleashing hilarious wordplay with a single command!&lt;/p&gt;

</description>
      <category>python</category>
    </item>
    <item>
      <title>Let's write stories together. | "Novel", a collaborative story-telling</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Thu, 24 Nov 2022 00:41:35 +0000</pubDate>
      <link>https://dev.to/thevahidal/lets-write-stories-together-novel-a-collaborative-story-telling-389h</link>
      <guid>https://dev.to/thevahidal/lets-write-stories-together-novel-a-collaborative-story-telling-389h</guid>
      <description>&lt;p&gt;Hi folks,&lt;br&gt;
hope you're doing well.&lt;/p&gt;

&lt;p&gt;Recently I had this idea for a platform where people can create stuff together, and since I like writing, I decided to create &lt;a href="https://thenovel.netlify.app"&gt;"Novel"&lt;/a&gt;. A platform where folks like you write an story together, part by part.&lt;/p&gt;

&lt;p&gt;When you open Novel, you can find stories create by others that you can collaborate on them, or even start your own story and let others join you on continuing it.&lt;/p&gt;

&lt;p&gt;Novel is open-source so you can checkout its &lt;a href="https://github.com/thevahidal/novel"&gt;source code&lt;/a&gt; and contribute on making it if you like.&lt;/p&gt;

&lt;p&gt;Please let me know if you find any issues, or if you have ideas on how to improve it.&lt;/p&gt;

&lt;p&gt;Take care, and I see you in the next one!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>"Soul", SQLite REST and realtime server is now extendable.</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Tue, 08 Nov 2022 21:25:39 +0000</pubDate>
      <link>https://dev.to/thevahidal/soul-sqlite-rest-and-realtime-server-is-now-extendable-j0n</link>
      <guid>https://dev.to/thevahidal/soul-sqlite-rest-and-realtime-server-is-now-extendable-j0n</guid>
      <description>&lt;p&gt;Hi Folks, &lt;br&gt;
For those who are not familiar with Soul it's a REST and realtime server as the title says, basically it takes an SQLite database file and gives you a set of CRUD APIs to interact with your db and also a websocket to subscribe to its changes. All the feature's up to here is automatic and you do nothing. &lt;/p&gt;

&lt;p&gt;But what if you wanted to create custom APIs to serve custom needs? &lt;br&gt;
Now that's available thanks to first member of Soul's Extensions, "API Extensions." With an syntax similar to Express.js, you can add new custom APIs to own your backend!&lt;/p&gt;

&lt;p&gt;Let's see how it works with a real example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download a sample database&lt;/span&gt;
wget https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite

&lt;span class="c"&gt;# Install Soul&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; soul-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ok let's create a folder for out extensions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a folder named _extensions&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;_extensions
&lt;span class="nb"&gt;cd &lt;/span&gt;_extensions

&lt;span class="c"&gt;# make a file named api.js&lt;/span&gt;
&lt;span class="nb"&gt;touch &lt;/span&gt;api.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now copy and pase the following code inside &lt;code&gt;api.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hello&lt;/span&gt; &lt;span class="o"&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="s1"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/hello-soul&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&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="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello Soul!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's run Soul with our extension&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# And run it&lt;/span&gt;
soul &lt;span class="nt"&gt;-d&lt;/span&gt; ./Chinook_Sqlite.sqlite &lt;span class="nt"&gt;-p&lt;/span&gt; 8000 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"/path/to/_extensions/"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ok, let's test it now&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:8000/api/hello-soul
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should return&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello Soul!"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Awesome you've just created your first custom API inside Soul!&lt;/p&gt;

&lt;p&gt;For more examples checkout here:&lt;br&gt;
&lt;a href="https://github.com/thevahidal/soul/blob/main/docs/extensions-examples.md"&gt;https://github.com/thevahidal/soul/blob/main/docs/extensions-examples.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Soon we'll be tackling new extensions such as middlewares and callbacks. So make sure to watch Soul's project. &lt;/p&gt;

&lt;p&gt;Here's the link to Soul repo: &lt;a href="https://github.com/thevahidal/soul"&gt;https://github.com/thevahidal/soul&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think about this new feature, And I'll see you in the next one.&lt;/p&gt;

</description>
      <category>node</category>
      <category>api</category>
      <category>sqlite</category>
    </item>
    <item>
      <title>Soul, SQLite REST server is realtime now.</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Sat, 05 Nov 2022 20:15:03 +0000</pubDate>
      <link>https://dev.to/thevahidal/soul-sqlite-rest-server-is-realtime-now-hmh</link>
      <guid>https://dev.to/thevahidal/soul-sqlite-rest-server-is-realtime-now-hmh</guid>
      <description>&lt;p&gt;Hi Folks, It's been an amazing journey since I first published Soul on HN and now I added a really major feature that Soul lacked, Realtime changes via Websockets.&lt;br&gt;
For those who are not familiar with Soul, it basically takes a SQLite database file and run a CRUD API on it, so you can have a minimal backend with no code.&lt;/p&gt;

&lt;p&gt;Now thanks to this new feature, users can subscribe to changes in a table and whenever a Create, Update or Delete operation happens, Soul will send the realtime data to subscribers.&lt;/p&gt;

&lt;p&gt;If you need some examples on how to work with websockets in Soul, you can find a bunch of examples here: &lt;a href="https://github.com/thevahidal/soul/blob/main/docs/ws-examples.md"&gt;https://github.com/thevahidal/soul/blob/main/docs/ws-examples.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please let me know what you think of this new feature and also submit any issues you faced so we can fix them as soon as possible.&lt;/p&gt;

&lt;p&gt;Also if you have ideas to make Soul a better tool, please send me your ideas, it'll help me a lot.&lt;/p&gt;

&lt;p&gt;Here's a small example of how realtime works in Soul:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="c"&gt;# Install Soul&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; soul-cli 

&lt;span class="c"&gt;# Install websocket client to test Soul realtime&lt;/span&gt;
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; wscat

 &lt;span class="c"&gt;# Download sample sqlite database&lt;/span&gt;
wget https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite

&lt;span class="c"&gt;# Run Soul&lt;/span&gt;
soul &lt;span class="nt"&gt;-d&lt;/span&gt; ./Chinook_Sqlite.sqlite &lt;span class="nt"&gt;-p&lt;/span&gt; 8000

&lt;span class="c"&gt;# Subscribe to Employee table realtime changes&lt;/span&gt;
wscat &lt;span class="nt"&gt;-c&lt;/span&gt; ws://localhost:8000/ws/tables/Employee
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then to test it, in a new terminal, insert a new row in the table Employee:&lt;br&gt;
to test it, in a new terminal, insert a new row in the table &lt;code&gt;Employee&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--request&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--url&lt;/span&gt; http://localhost:8000/api/tables/Employee/rows &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data&lt;/span&gt; &lt;span class="s1"&gt;'{
    "fields": {
        "FirstName": "Damien",
        "LastName": "Rice"
    }
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Checkout &lt;code&gt;wscat&lt;/code&gt; terminal, it should respond with the following message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INSERT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"FirstName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Damien"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"LastName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rice"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can test the same thing with Update and Delete operations too.&lt;/p&gt;

&lt;p&gt;Once again thanks for the support and I'll see you in the next one!&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/thevahidal/soul"&gt;https://github.com/thevahidal/soul&lt;/a&gt;&lt;br&gt;
HN: &lt;a href="https://news.ycombinator.com/item?id=33484693"&gt;https://news.ycombinator.com/item?id=33484693&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sqlite</category>
      <category>realtime</category>
      <category>node</category>
      <category>api</category>
    </item>
    <item>
      <title>Soul | A SQLite RESTful server</title>
      <dc:creator>Vahid Al</dc:creator>
      <pubDate>Thu, 03 Nov 2022 23:12:38 +0000</pubDate>
      <link>https://dev.to/thevahidal/soul-a-sqlite-restful-server-21nj</link>
      <guid>https://dev.to/thevahidal/soul-a-sqlite-restful-server-21nj</guid>
      <description>&lt;p&gt;Hi Folks,&lt;br&gt;
For the last few weeks I've been working on &lt;a href="//github.com/thevahidal/soul"&gt;Soul&lt;/a&gt;. As the title says, it's a SQLite RESTful server. In more simple words, Soul takes a SQLite database file and gives you a complete CRUD API to work with your database. The ultimate goal for Soul is to become a backend-as-a-server for folks who want to bootstrap projects real quick.&lt;/p&gt;

&lt;p&gt;I took inspiration for building Soul from &lt;a href="//supabase.com"&gt;Supabase&lt;/a&gt; and &lt;a href="//pocketbase.io"&gt;Pocketbase&lt;/a&gt;, but mostly Pocketbase. &lt;br&gt;
But the question is why Soul when there's Pocketbase. The reason is Go vs. Javascript. Pocketbase is written in Go, so to extend it you need to know Go which is less popular than Javascipt / Node.js. I'm developing Soul using Node.js because I believe it can potentially enable a larger community to work with it. Specially frontend developers who already are familiar with Javascript.&lt;/p&gt;
&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Starting with Soul is fairly simple first you need to install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; soul-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then all you need to run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;soul &lt;span class="nt"&gt;-d&lt;/span&gt; your-sqlite-db.sqlite &lt;span class="nt"&gt;-p&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voila, Soul is listening on port 8000 and that's it!&lt;/p&gt;

&lt;h2&gt;
  
  
  A more in-depth walk-through
&lt;/h2&gt;

&lt;p&gt;To see some of Soul's features, let's first download a sample database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then let's start to read this database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;soul &lt;span class="nt"&gt;-d&lt;/span&gt; ./Chinook_Sqlite.sqlite &lt;span class="nt"&gt;-p&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Awesome now let's see how many tables it has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'localhost:8000/api/tables'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Soul will return something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Album"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Artist"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So far so good, now let's say we want to look through Albums:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'localhost:8000/api/tables/Album/rows/'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Soul will respond with something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"AlbumId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"For Those About To Rock We Salute You"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"AlbumId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Balls to the Wall"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;347&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tables/Album?page=2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"previous"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So what if we wanted to search for the word &lt;code&gt;rock&lt;/code&gt; (&lt;code&gt;_search&lt;/code&gt;)? Also we wanted to extend the related field &lt;code&gt;ArtistId&lt;/code&gt; (&lt;code&gt;_extend&lt;/code&gt;) and we only wanted albums by Artist whose Id is 90 (&lt;code&gt;_filters&lt;/code&gt;). Let's make it more complicated, let's say that we want to limit each page by 20 rows (&lt;code&gt;_limit&lt;/code&gt;) and we want the first page (&lt;code&gt;_page&lt;/code&gt;). Also let's just get &lt;code&gt;Title&lt;/code&gt;, we don't need the &lt;code&gt;AlbumId&lt;/code&gt; and &lt;code&gt;ArtistId&lt;/code&gt; (&lt;code&gt;_schema&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'localhost:8000/api/tables/Album/rows?_page=1&amp;amp;_limit=20&amp;amp;_search=rock&amp;amp;_ordering=-Title&amp;amp;_schema=Title,ArtistId&amp;amp;_extend=ArtistId&amp;amp;_filters=ArtistId:90'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Soul will respond with something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rock In Rio [CD2]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId_data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Iron Maiden"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rock In Rio [CD1]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId_data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"ArtistId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Iron Maiden"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"previous"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alright, so now you have some idea that how Soul works and what it could do to help you with your projects.&lt;/p&gt;

&lt;p&gt;If you want more of these examples, checkout Soul's API examples, &lt;a href="https://github.com/thevahidal/soul/blob/main/docs/api-examples.md"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you had any issues, please create an issue in Soul's Github repository. I'll respond as soon as I can.&lt;/p&gt;

&lt;p&gt;You have some ideas to make Soul a better tool? Don't hesitate to send me an email at &lt;code&gt;thevahidal [at] gmail [dot] com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading this and I'll see you in the next one!&lt;/p&gt;

</description>
      <category>sqlite</category>
      <category>api</category>
      <category>node</category>
      <category>realtime</category>
    </item>
  </channel>
</rss>
