<?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: Signor_P</title>
    <description>The latest articles on DEV Community by Signor_P (@signor_p).</description>
    <link>https://dev.to/signor_p</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2956536%2Fbd42514b-e7cf-4844-9726-a407e2134e32.jpg</url>
      <title>DEV Community: Signor_P</title>
      <link>https://dev.to/signor_p</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/signor_p"/>
    <language>en</language>
    <item>
      <title>Nexcord@0.0.3</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Sun, 19 Jul 2026 15:33:32 +0000</pubDate>
      <link>https://dev.to/signor_p/nexcord003-g55</link>
      <guid>https://dev.to/signor_p/nexcord003-g55</guid>
      <description>&lt;h1&gt;
  
  
  Nexcord 0.0.3 — Release Notes
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🔄 Circular Dependency Resolution: Container Layer Added on Top of Proxy
&lt;/h2&gt;

&lt;p&gt;The Lazy Proxy mechanism from 0.0.2 hasn't been replaced — a new container layer now sits underneath it, controlling the dependency resolution process. Circular dependency detection and instance bookkeeping are now handled centrally through &lt;code&gt;DependencyContainer&lt;/code&gt; and &lt;code&gt;ServiceContainer&lt;/code&gt;, while the Proxy remains active at runtime for safe method-call access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this was needed:&lt;/strong&gt; in the previous version, circular resolution logic was scattered and it was hard to trace when and in what order service instances were being created. With 0.0.3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DependencyContainer&lt;/code&gt; — holds a class's declared dependencies (including those marked with &lt;code&gt;@Inject()&lt;/code&gt;) and resolves them recursively via &lt;code&gt;addDeps()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ServiceContainer&lt;/code&gt; — holds each service's singleton instance, its circular flag, and its resolution state. Instance creation is now fully managed through &lt;code&gt;addInstanceDeps()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a circular dependency is detected, the flow now works as follows: &lt;code&gt;DependencyContainer&lt;/code&gt; first checks whether the relevant service is already registered in &lt;code&gt;ServiceContainer&lt;/code&gt;; if it is and carries the &lt;code&gt;circular&lt;/code&gt; flag, the service is re-flagged as &lt;code&gt;circular: false&lt;/code&gt; and its instance is rebuilt to break the cycle. This means work that was previously left entirely to the Proxy is now tracked and observable at the container level.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Behavior stays the same from the developer's side — nothing changes here&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(@&lt;/span&gt;&lt;span class="nd"&gt;Inject&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;BService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;bService&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InjectType&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;BService&lt;/span&gt;&lt;span class="o"&gt;&amp;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="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// now resolved more reliably thanks to the container layer&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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; this release also fixes a logic bug in &lt;code&gt;ServiceContainer.get()&lt;/code&gt; where the &lt;code&gt;slient&lt;/code&gt; (silent mode) flag was inverted — silent mode no longer throws, allowing the circular resolution flow to correctly fall through to &lt;code&gt;undefined&lt;/code&gt; as intended.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧱 New Architecture: Isolated Per-Feature Containers
&lt;/h2&gt;

&lt;p&gt;The biggest structural change in 0.0.3. Every decorator — &lt;code&gt;@Service()&lt;/code&gt;, &lt;code&gt;@Guard()&lt;/code&gt;, &lt;code&gt;@SlashCommand()&lt;/code&gt;, &lt;code&gt;@Listener()&lt;/code&gt; — now has its own dedicated container class. In the previous version all of these class types were loosely managed through a single shared structure; in 0.0.3 each feature lives in its own container and is fully isolated from the others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means in practice:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How a &lt;code&gt;@Guard()&lt;/code&gt; class is registered, which routes it owns, and how it's instantiated is now entirely the responsibility of its own container — with no overlap with the &lt;code&gt;@Service()&lt;/code&gt; or &lt;code&gt;@SlashCommand()&lt;/code&gt; containers.&lt;/li&gt;
&lt;li&gt;Each container has its own &lt;code&gt;add()&lt;/code&gt; / &lt;code&gt;get()&lt;/code&gt; contract, but all of them ultimately hand off to &lt;code&gt;ServiceContainer&lt;/code&gt; for dependency injection. In other words, every feature gains its "value" through its own container, while instance management and DI resolution remain centralized.&lt;/li&gt;
&lt;li&gt;Thanks to this isolation, a change in one container (e.g. an update to Guard route-matching logic) can no longer leak into the behavior of other containers — something that was possible in the previous version.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short: &lt;strong&gt;the registration/definition layer is now split per feature, while the instantiation and dependency resolution layer remains centralized.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ Type-Safe Event Handler Parameters: &lt;code&gt;DcEvents&amp;lt;T&amp;gt;&lt;/code&gt; Re-enabled
&lt;/h2&gt;

&lt;p&gt;This feature isn't new — it existed at the core level before but had been disabled. 0.0.3 both updates it and turns it back on.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@On(eventName)&lt;/code&gt; and &lt;code&gt;@Once(eventName)&lt;/code&gt; decorators now check, at compile time, whether your method's parameters match the correct type for the given event name. The &lt;code&gt;DcEvents&amp;lt;'eventName'&amp;gt;&lt;/code&gt; helper type automatically resolves the correct parameter signature for the discord.js event in question.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;On&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;clientReady&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;ready&lt;/span&gt;&lt;span class="p"&gt;(...[&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;DcEvents&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;clientReady&lt;/span&gt;&lt;span class="dl"&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="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loggerService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; active`&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;If you mistakenly annotate the &lt;code&gt;client&lt;/code&gt; parameter here as &lt;code&gt;string&lt;/code&gt;, TypeScript will fail at compile time — because &lt;code&gt;DcEvents&amp;lt;'clientReady'&amp;gt;&lt;/code&gt; is bound to the real parameter signature (&lt;code&gt;[Client&amp;lt;true&amp;gt;]&lt;/code&gt;) of the &lt;code&gt;'clientReady'&lt;/code&gt; event on the discord.js side, and the decorator enforces it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Something to keep in mind:&lt;/strong&gt; this check only works based on the literal event name string you pass to &lt;code&gt;@On&lt;/code&gt; / &lt;code&gt;@Once&lt;/code&gt; — the more specific the &lt;code&gt;eventName&lt;/code&gt;, the more precise the type inference. With generic or dynamic event names (&lt;code&gt;@On(someVariable)&lt;/code&gt;), this type narrowing won't kick in.&lt;/p&gt;




&lt;h2&gt;
  
  
  📋 Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Container-based circular dependency resolution&lt;/td&gt;
&lt;td&gt;Core (&lt;code&gt;DependencyContainer&lt;/code&gt;, &lt;code&gt;ServiceContainer&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Added on top of the Proxy mechanism, not a replacement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;slient&lt;/code&gt; flag logic bug fix&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ServiceContainer.get()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Improves reliability of the circular resolution flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Isolated per-feature container architecture&lt;/td&gt;
&lt;td&gt;All decorators (&lt;code&gt;@Service&lt;/code&gt;, &lt;code&gt;@Guard&lt;/code&gt;, &lt;code&gt;@SlashCommand&lt;/code&gt;, &lt;code&gt;@Listener&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Registration/definition layer split apart, DI stays centralized&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;DcEvents&amp;lt;T&amp;gt;&lt;/code&gt; type checking&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@On&lt;/code&gt; / &lt;code&gt;@Once&lt;/code&gt; decorators&lt;/td&gt;
&lt;td&gt;Existed before, was disabled — updated and re-enabled in this release&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>discord</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Built a Framework for discord.js (Meet Nexcord)</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Sat, 11 Jul 2026 16:07:17 +0000</pubDate>
      <link>https://dev.to/signor_p/new-discordjs-based-framework-3ei1</link>
      <guid>https://dev.to/signor_p/new-discordjs-based-framework-3ei1</guid>
      <description>&lt;h1&gt;
  
  
  Building Discord Bots Shouldn't Feel Like Wiring Everything Together — Meet Nexcord
&lt;/h1&gt;

&lt;p&gt;If you've ever built a Discord bot with &lt;code&gt;discord.js&lt;/code&gt;, you've probably ended up writing code that looks something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Register every command manually.&lt;/li&gt;
&lt;li&gt;Register every event manually.&lt;/li&gt;
&lt;li&gt;Create service instances yourself.&lt;/li&gt;
&lt;li&gt;Pass dependencies through constructors.&lt;/li&gt;
&lt;li&gt;Keep import lists up to date as the project grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these tasks are particularly difficult.&lt;/p&gt;

&lt;p&gt;But after you've done them dozens of times, they start feeling more like maintenance than development.&lt;/p&gt;

&lt;p&gt;After working on several Discord projects, I found myself wanting something closer to the experience of frameworks like NestJS or Angular, while still keeping everything I like about &lt;code&gt;discord.js&lt;/code&gt;—its flexibility, performance, and ecosystem.&lt;/p&gt;

&lt;p&gt;That's how &lt;strong&gt;Nexcord&lt;/strong&gt; started.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is Nexcord?
&lt;/h1&gt;

&lt;p&gt;Nexcord is a &lt;strong&gt;decorator-driven, dependency-injection-powered framework&lt;/strong&gt; built on top of &lt;code&gt;discord.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Rather than spending time wiring your application together, you simply describe what each class is responsible for.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GreetingService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Welcome &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Listener&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MemberListener&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;GreetingService&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="nd"&gt;On&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;guildMemberAdd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;GuildMember&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There's no need to manually create services.&lt;/p&gt;

&lt;p&gt;No event registration to keep track of.&lt;/p&gt;

&lt;p&gt;No growing bootstrap file that slowly turns into hundreds of lines.&lt;/p&gt;

&lt;p&gt;Nexcord discovers your classes automatically, builds the dependency graph, and wires everything together for you.&lt;/p&gt;




&lt;h1&gt;
  
  
  Dependency Injection without the Boilerplate
&lt;/h1&gt;

&lt;p&gt;Dependency Injection isn't a new idea.&lt;/p&gt;

&lt;p&gt;What interested me was bringing the same experience to Discord bot development.&lt;/p&gt;

&lt;p&gt;Every class decorated with one of Nexcord's decorators automatically becomes part of the dependency injection container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Service&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;QuoteService&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;SlashCommand&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;QuoteCommand&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;quotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;QuoteService&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;p&gt;If &lt;code&gt;QuoteService&lt;/code&gt; depends on another service...&lt;/p&gt;

&lt;p&gt;...and that service depends on another...&lt;/p&gt;

&lt;p&gt;...Nexcord resolves the entire dependency graph automatically.&lt;/p&gt;

&lt;p&gt;Each service is instantiated only once and shared across the application, so you don't have to think about lifecycle management.&lt;/p&gt;




&lt;h1&gt;
  
  
  Convention over Configuration
&lt;/h1&gt;

&lt;p&gt;One thing that always bothered me in larger projects was maintaining registration files.&lt;/p&gt;

&lt;p&gt;Every new command or listener meant adding another import somewhere.&lt;/p&gt;

&lt;p&gt;Eventually those files became longer than the actual feature I was implementing.&lt;/p&gt;

&lt;p&gt;Nexcord takes a different approach.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
 ├── commands/
 ├── events/
 ├── configs/
 ├── common/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the application starts, these folders are scanned automatically.&lt;/p&gt;

&lt;p&gt;Add a new command.&lt;/p&gt;

&lt;p&gt;Run the bot.&lt;/p&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;No extra registration step.&lt;/p&gt;




&lt;h1&gt;
  
  
  Guards for More Than Commands
&lt;/h1&gt;

&lt;p&gt;Most Discord frameworks offer middleware, but it's usually tied to slash commands.&lt;/p&gt;

&lt;p&gt;I wanted something that worked everywhere.&lt;/p&gt;

&lt;p&gt;That's why Nexcord introduces &lt;strong&gt;Route Forwarding Guards&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A guard can target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;individual listeners&lt;/li&gt;
&lt;li&gt;commands&lt;/li&gt;
&lt;li&gt;groups of handlers&lt;/li&gt;
&lt;li&gt;wildcard patterns&lt;/li&gt;
&lt;li&gt;regular expressions&lt;/li&gt;
&lt;li&gt;prefixes and suffixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Guard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MemberListener&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;checkCooldown-&amp;gt;MemberListener::onMessage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the guard returns &lt;code&gt;false&lt;/code&gt;, execution stops before the listener ever runs.&lt;/p&gt;

&lt;p&gt;The same mechanism works consistently for commands and events, so you don't need different middleware systems depending on what you're handling.&lt;/p&gt;




&lt;h1&gt;
  
  
  Shared Configuration that Understands Dependency Injection
&lt;/h1&gt;

&lt;p&gt;Configuration is often more than static strings.&lt;/p&gt;

&lt;p&gt;Sometimes generating a configuration value requires access to another service.&lt;/p&gt;

&lt;p&gt;That's the reason I built &lt;strong&gt;@nexcord/config&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of writing something like this during startup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;prefixService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you register the configuration once.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;registerConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;messages.welcome&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="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PrefixService&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class="s2"&gt;`Type &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;help`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;PrefixService&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nexcord automatically resolves &lt;code&gt;PrefixService&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The value is computed once and becomes available everywhere through &lt;code&gt;ConfigService&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For values that require the Discord client to already be connected, there's also &lt;code&gt;registerConfigWait()&lt;/code&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  JSX for Discord Components
&lt;/h1&gt;

&lt;p&gt;Anyone who's built more complex Discord UIs knows that component builders can become fairly verbose.&lt;/p&gt;

&lt;p&gt;Buttons.&lt;/p&gt;

&lt;p&gt;Embeds.&lt;/p&gt;

&lt;p&gt;Select menus.&lt;/p&gt;

&lt;p&gt;Modals.&lt;/p&gt;

&lt;p&gt;Components V2.&lt;/p&gt;

&lt;p&gt;All of them involve long builder chains that can quickly become difficult to read.&lt;/p&gt;

&lt;p&gt;Nexcord includes &lt;strong&gt;@nexcord/tsx&lt;/strong&gt;, a JSX runtime designed specifically for Discord components.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"confirm"&lt;/span&gt;
    &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Confirm"&lt;/span&gt;
    &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"success"&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ConfirmAction&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This compiles directly into the appropriate &lt;code&gt;discord.js&lt;/code&gt; builders.&lt;/p&gt;

&lt;p&gt;There's no virtual DOM.&lt;/p&gt;

&lt;p&gt;No rendering engine.&lt;/p&gt;

&lt;p&gt;Just a cleaner, more expressive syntax for creating Discord components.&lt;/p&gt;




&lt;h1&gt;
  
  
  Built Around an Ecosystem
&lt;/h1&gt;

&lt;p&gt;Nexcord is currently made up of three packages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@nexcord/core" rel="noopener noreferrer"&gt;@nexcord/core&lt;/a&gt;&lt;/strong&gt; — decorators, dependency injection, automatic discovery, guards, and the framework runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@nexcord/config" rel="noopener noreferrer"&gt;@nexcord/config&lt;/a&gt;&lt;/strong&gt; — dependency-injection-aware shared configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@nexcord/tsx" rel="noopener noreferrer"&gt;@nexcord/tsx&lt;/a&gt;&lt;/strong&gt; — a JSX runtime for Discord components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each package can be used independently.&lt;/p&gt;

&lt;p&gt;Together, they provide a more structured and enjoyable development experience.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why I Built It
&lt;/h1&gt;

&lt;p&gt;Nexcord wasn't created because Discord needed another library.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;discord.js&lt;/code&gt; already does an excellent job.&lt;/p&gt;

&lt;p&gt;The motivation was different.&lt;/p&gt;

&lt;p&gt;I wanted to spend less time wiring projects together and more time building actual features.&lt;/p&gt;

&lt;p&gt;Less repetitive setup.&lt;/p&gt;

&lt;p&gt;Cleaner architecture.&lt;/p&gt;

&lt;p&gt;Automatic discovery.&lt;/p&gt;

&lt;p&gt;Dependency injection.&lt;/p&gt;

&lt;p&gt;Better organization as projects grow.&lt;/p&gt;

&lt;p&gt;Nexcord doesn't try to replace &lt;code&gt;discord.js&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It simply aims to provide a higher-level development experience on top of it.&lt;/p&gt;




&lt;h1&gt;
  
  
  Current Status
&lt;/h1&gt;

&lt;p&gt;Nexcord is currently in &lt;strong&gt;beta&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The core architecture is already in place, but there are still APIs I'm refining before the 1.0 release.&lt;/p&gt;

&lt;p&gt;This stage is where feedback matters the most.&lt;/p&gt;

&lt;p&gt;Many of the decisions that will shape the stable release are still open to improvement, so hearing how other developers approach Discord bot development is incredibly valuable.&lt;/p&gt;

&lt;p&gt;If you're interested in building larger Discord bots with a more structured architecture, I'd genuinely love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>discord</category>
      <category>typescript</category>
      <category>javascript</category>
      <category>tsx</category>
    </item>
    <item>
      <title>Just one question, one answer.</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Mon, 25 May 2026 04:35:48 +0000</pubDate>
      <link>https://dev.to/signor_p/just-one-question-one-answer-39i5</link>
      <guid>https://dev.to/signor_p/just-one-question-one-answer-39i5</guid>
      <description>&lt;p&gt;When you start a project, what's the maximum and minimum time it takes you to get the setup/configuration ready? In other words, how long does it take before you start writing the features or code that are the reason you created the project? I'd love to hear your thoughts in the comments! 🐾🤍&lt;/p&gt;

</description>
      <category>help</category>
      <category>programming</category>
      <category>tooling</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Next-gen PHP Framework Lynx</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Wed, 20 May 2026 16:17:20 +0000</pubDate>
      <link>https://dev.to/signor_p/next-gen-php-framework-lynx-2cna</link>
      <guid>https://dev.to/signor_p/next-gen-php-framework-lynx-2cna</guid>
      <description>&lt;h2&gt;
  
  
  NestJS + PHP = Lynx
&lt;/h2&gt;

&lt;p&gt;Greetings, how are you? I hope your code and errors are plentiful. I'm back here after a long time. Let me briefly introduce myself. I'm a self-employed developer/entrepreneur who has been designing backend and system architecture with TS for 3-4 years. Everyone online knows me as Signor P. I'm here to announce that I've released my Lynx framework as open source, as I mentioned to you in the past. Lynx started as a hobby project, and then I asked myself, why not share it with other developers and develop it together? 😅. Briefly, Lynx is a backend framework written in pure PHP with a NestJS architecture and syntax. It's a framework with a small CLI tool written in Rust and a database system with a small TypeORM syntax. Developers who want more technical details can check the Github repositories. So why did I write Lynx... I sometimes need to write PHP or want to write PHP. But huge frameworks like Laravel tire me out. Minimal and spacious frameworks are rare in the PHP world. As a TS developer myself, I thought, why not port a TS framework to PHP? And I decided that NestJS was the most suitable framework for this. I use Lynx myself in some hobby projects and prototypes. When I needed to write a manager for database operations, I thought, why not use the TypeORM syntax that I always use and that is compatible with NestJS? And although not exactly the same, I added a database layer in a similar TypeORM style. Entities, Repository usage, etc... Currently, Lynx works for small projects and some medium-sized projects. However, it's worth mentioning that I am not a security expert or professional software engineer. Yes, I have a few successful projects that I haven't published yet, but I should point out that I'm not that good at PHP. Let's take a brief look at the project architecture.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📁 your-project-root
├── 📁 App                         # 🐾 LYNX CORE ENGINE (Zero dependencies, pure PHP)
│   ├── 📁 Builder                 # Fluent factories (e.g. ExceptionBuilder)
│   ├── 📁 Cache                   # Temporary runtime caching &amp;amp; logger.json storage
│   ├── 📁 Config                  # Framework system configuration
│   ├── 📁 Core                    # Kernel, Request, Response, Router, Autoloader, &amp;amp; Repositories
│   ├── 📁 Decorators              # Core attributes (Module, Controller, Column, GET/POST, Inject, etc.)
│   ├── 📁 Exception               # Built-in HTTP exceptions (BadRequest, NotFound, etc.)
│   ├── 📁 Helper                  # Console logs, secure encryption, tokenizers, &amp;amp; .env loaders
│   ├── 📁 Interface               # LogLevels, Middleware, &amp;amp; ExceptionFilter contracts
│   └── 📁 Templates               # Default engine templates (e.g. default 404 page)
├── 📁 Src                         # 🏗️ APPLICATION DOMAIN CODE (Write your code here)
│   ├── 📁 views                   # HTML template 'welcome' views &amp;amp; custom 404s
│   ├── 📄 AppController.php       # Root application routes controller
│   ├── 📄 AppMiddleware.php       # Root application middleware pipeline
│   └── 📄 AppModule.php            # Root AppModule configuration (orchestrates sub-modules)
├── 📄 .env                        # Environment Configuration (DB credentials, status, etc.)
├── 📄 .htaccess                   # Apache URL-rewriting configuration
└── 📄 index.php                   # Core application entrypoint (boots LynxApplication)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="c1"&gt;// index.php&lt;/span&gt;

&lt;span class="k"&gt;require_once&lt;/span&gt; &lt;span class="s1"&gt;'./App/Core/AutoLoader.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Core\LynxApplication&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Src\AppModule&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LynxApplication&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;AppModule&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$app&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
// Src/AppModule.php

&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Decorators\Module&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Src\AppController&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Module&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'controllers'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;AppController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="c1"&gt;// Src/AppController.php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Core\Request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Core\Response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Decorators\Controller&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Decorators\Get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Decorators\Post&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Decorators\Middleware&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="na"&gt;#[Controller()]&lt;/span&gt;
&lt;span class="na"&gt;#[Middleware([AppMiddleware::class])]&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppController&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;#[Get('/')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Response&lt;/span&gt; &lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'welcome'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Lynx'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="na"&gt;#[Post('/')]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;logout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Response&lt;/span&gt; &lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
            &lt;span class="s2"&gt;"framework"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Lynx"&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="c1"&gt;// Src/AppMiddleware.php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;Src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Core\Request&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Core\Response&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Helper\Console&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;App\Interface\Middleware&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppMiddleware&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;Middleware&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Response&lt;/span&gt; &lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;mixed&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Console&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'info'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Run App Middleware'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'X-Powered-By'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Zexson Team'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$res&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;p&gt;As you can see, you can develop PHP backend applications in the style of NestJS. I enjoy using Lynx and I like it very much. I hope this open-source project hasn't wasted your time. That's all for now. The necessary links are below. I eagerly await your feedback 🐾&lt;/p&gt;

&lt;p&gt;🦄&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SignorMassimo/lynx" rel="noopener noreferrer"&gt;Lynx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SignorMassimo/lynx_cli" rel="noopener noreferrer"&gt;Lynx CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Let's chat and develop our projects like Lynx together.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/syCQqt3xgV" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>php</category>
      <category>ts</category>
      <category>nestjs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why would deleted files remain in the dist?</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Thu, 10 Jul 2025 14:40:59 +0000</pubDate>
      <link>https://dev.to/signor_p/why-would-deleted-files-remain-in-the-dist-2117</link>
      <guid>https://dev.to/signor_p/why-would-deleted-files-remain-in-the-dist-2117</guid>
      <description>&lt;p&gt;When working with TypeScript, you might have noticed something odd:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You delete a &lt;code&gt;.ts&lt;/code&gt; file — but its compiled &lt;code&gt;.js&lt;/code&gt; and &lt;code&gt;.d.ts&lt;/code&gt; files are still hanging around in your &lt;code&gt;dist/&lt;/code&gt; folder... 🤨&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're like me, your first instinct is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Wait... shouldn't &lt;code&gt;tsc&lt;/code&gt; take care of this automatically?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unfortunately, no.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Why This Happens
&lt;/h2&gt;

&lt;p&gt;The TypeScript compiler (&lt;code&gt;tsc&lt;/code&gt;) compiles &lt;code&gt;.ts&lt;/code&gt; files to &lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;.d.ts&lt;/code&gt;, and &lt;code&gt;.map.js&lt;/code&gt;, but it &lt;strong&gt;does not clean up old files&lt;/strong&gt;. If you delete a source file, the compiled version &lt;strong&gt;stays&lt;/strong&gt; in your output directory.&lt;/p&gt;

&lt;p&gt;That leftover file might:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Still get imported&lt;/li&gt;
&lt;li&gt;Cause your app to crash unexpectedly&lt;/li&gt;
&lt;li&gt;Create hard-to-track bugs&lt;/li&gt;
&lt;li&gt;Waste space, especially in limited environments&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ The Fix: &lt;code&gt;tsc-clear&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;To fix this, I built &lt;a href="https://www.npmjs.com/package/tsc-clear" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;tsc-clear&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;:&lt;br&gt;
A lightweight Rust-powered CLI that automatically cleans up your &lt;code&gt;dist/&lt;/code&gt; folder by removing any compiled files (&lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;.d.ts&lt;/code&gt;, &lt;code&gt;.map.js&lt;/code&gt;) that no longer have a corresponding &lt;code&gt;.ts&lt;/code&gt; file in your project.&lt;/p&gt;


&lt;h3&gt;
  
  
  ✨ Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🧹 &lt;strong&gt;Auto-cleans stale files&lt;/strong&gt; after compilation&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Fast&lt;/strong&gt; — written in Rust for high performance&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;No configuration needed&lt;/strong&gt; — reads &lt;code&gt;tsconfig.json&lt;/code&gt; to detect your &lt;code&gt;outDir&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🪟 &lt;strong&gt;Windows only&lt;/strong&gt; for now (cross-platform support planned)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  📦 Install It Globally
&lt;/h2&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; tsc-clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🚀 Example Usage
&lt;/h2&gt;

&lt;p&gt;Update your &lt;code&gt;package.json&lt;/code&gt; scripts 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;"scripts"&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;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tsc &amp;amp;&amp;amp; tsc-clear src &amp;amp;&amp;amp; node dist/index.js"&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;&lt;code&gt;tsc-clear&lt;/code&gt; runs &lt;strong&gt;after&lt;/strong&gt; &lt;code&gt;tsc&lt;/code&gt; and &lt;strong&gt;before&lt;/strong&gt; &lt;code&gt;node&lt;/code&gt;, ensuring that your output directory is clean and safe.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Why I Built It
&lt;/h2&gt;

&lt;p&gt;I was working on a project where I kept removing and renaming files — and everything looked fine... until I ran the app and hit an error caused by a file I had deleted &lt;em&gt;days ago&lt;/em&gt; 😵&lt;/p&gt;

&lt;p&gt;The old &lt;code&gt;.js&lt;/code&gt; file was still sitting in &lt;code&gt;dist/&lt;/code&gt;, silently breaking everything.&lt;/p&gt;

&lt;p&gt;After searching for a solution and finding nothing lightweight, native, and easy to use — I decided to build &lt;code&gt;tsc-clear&lt;/code&gt; for myself.&lt;/p&gt;

&lt;p&gt;Now I’m sharing it with you. ✨&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript doesn't clean up &lt;code&gt;dist/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Old files can break your app or cause unexpected behavior&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tsc-clear&lt;/code&gt; solves this in one command&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Package Repo: &lt;a href="https://github.com/SignorMassimo/tsc-clear" rel="noopener noreferrer"&gt;github.com/SignorMassimo/tsc-clear&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Rust Repo: &lt;a href="https://github.com/SignorMassimo/tsc-clear-rust" rel="noopener noreferrer"&gt;github.com/SignorMassimo/tsc-clear-rust&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/tsc-clear" rel="noopener noreferrer"&gt;npmjs.com/tsc-clear&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thanks for reading!&lt;br&gt;
Let me know if this tool helped you — or drop a star ⭐ on GitHub if you like it!&lt;br&gt;
Happy coding! 🧼💻&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>node</category>
      <category>npm</category>
      <category>programming</category>
    </item>
    <item>
      <title>My new ORM NPM package MiniORM</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Fri, 23 May 2025 19:32:47 +0000</pubDate>
      <link>https://dev.to/signor_p/my-new-orm-npm-package-miniorm-11go</link>
      <guid>https://dev.to/signor_p/my-new-orm-npm-package-miniorm-11go</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introducing MiniOrm&lt;/strong&gt; – a lightweight and intuitive ORM built with TypeScript.&lt;br&gt;
It supports MySQL, PostgreSQL, and SQLite out of the box, and offers a clean, fluent API for building queries without sacrificing performance or control.&lt;/p&gt;

&lt;p&gt;✨ Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QueryBuilder with strong typing&lt;/li&gt;
&lt;li&gt;Support for raw SQL when needed&lt;/li&gt;
&lt;li&gt;Simple &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt; conditions&lt;/li&gt;
&lt;li&gt;Class-based fluent API&lt;/li&gt;
&lt;li&gt;Fully open-source and framework-agnostic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're building a small side project or a full-scale backend, MiniOrm offers the right balance between simplicity and power.&lt;/p&gt;

&lt;p&gt;📦 NPM: &lt;a href="https://www.npmjs.com/package/miniorm-ts" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/miniorm-ts&lt;/a&gt;&lt;br&gt;
📚 Docs: &lt;a href="https://zexson-dev.vercel.app/miniorm" rel="noopener noreferrer"&gt;https://zexson-dev.vercel.app/miniorm&lt;/a&gt;&lt;br&gt;
💻 GitHub: &lt;a href="https://github.com/SignorMassimo/miniorm" rel="noopener noreferrer"&gt;https://github.com/SignorMassimo/miniorm&lt;/a&gt;&lt;br&gt;
🎥 Video: &lt;a href="https://www.youtube.com/watch?v=RIC5cRqNtY8" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=RIC5cRqNtY8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>news</category>
      <category>programming</category>
      <category>npm</category>
    </item>
    <item>
      <title>Lynx Framework for Sale🙂🐾</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Tue, 06 May 2025 11:11:32 +0000</pubDate>
      <link>https://dev.to/signor_p/lynx-framework-for-sale-5h10</link>
      <guid>https://dev.to/signor_p/lynx-framework-for-sale-5h10</guid>
      <description>&lt;p&gt;Old Content:&lt;br&gt;
Hello everyone,&lt;/p&gt;

&lt;p&gt;I have put the Lynx project on hold because I am currently busy with another project. Although Lynx is a solid framework, I cannot develop two projects at the same time by myself.&lt;/p&gt;

&lt;p&gt;Since I no longer have time to continue the development of Lynx, I am thinking of offering it for sale. If you represent a company, I would be happy to join your Lynx team if needed. Lynx already has a solid foundation with an ORM and a CLI. The CLI is written in Rust and the ORM is natively integrated into Lynx.&lt;/p&gt;

&lt;p&gt;I will share code samples related to Lynx with serious buyers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contact me:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instagram: &lt;a href="https://www.instagram.com/_signor_p_/" rel="noopener noreferrer"&gt;Signor P&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Discord (and other platforms): &lt;code&gt;_signor_p_&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;New Content:&lt;br&gt;
Now for Sale thank you everyone 🙂&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>news</category>
      <category>php</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Lynx Prototype Website Released...🐾</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Sat, 29 Mar 2025 08:48:00 +0000</pubDate>
      <link>https://dev.to/signor_p/lynx-prototype-website-released-5ej3</link>
      <guid>https://dev.to/signor_p/lynx-prototype-website-released-5ej3</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Lynx cPanel Prototype is Live!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Hello developers! 🚀 We have officially launched Lynx’s prototype site running smoothly on cPanel. Here’s a quick summary of what’s new in this phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;CDN System Integrated&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For the first time, we are introducing an &lt;strong&gt;optional CDN system&lt;/strong&gt; in Lynx projects! 📡 You will be able to manage your static files effortlessly via a &lt;strong&gt;dedicated CDN panel&lt;/strong&gt;, ensuring better performance. The &lt;strong&gt;CLI tool will allow seamless CDN integration&lt;/strong&gt; with just a few commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Lynx in a Real Environment&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This prototype demonstrates Lynx’s ability to &lt;strong&gt;connect to a real MySQL server and handle sessions and data management flawlessly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Runs fully within a cPanel environment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
🔹 &lt;strong&gt;Includes a simple authentication system&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
🔹 &lt;strong&gt;Features an admin panel with limited data access&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;We have just started focusing on &lt;strong&gt;security&lt;/strong&gt;, and we are committed to making Lynx as safe as possible. 🔒&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Explore the Prototype!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Want to see how Lynx performs on cPanel? Check out our live prototype site:&lt;br&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://lynx-prototipe.alwaysfreehost.xyz/auth/register" rel="noopener noreferrer"&gt;Lynx Prototype Site&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
cdn login data...&lt;br&gt;
username: user&lt;br&gt;
password: password&lt;/p&gt;

&lt;p&gt;To access other pages. To open an account, you only need to enter a username and password, no other data is taken behind. It is already a prototype and test site.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Stay Connected and Follow Our Progress!&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://discord.gg/GFtfkYQ2de" rel="noopener noreferrer"&gt;Discord Server&lt;/a&gt; 💬&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://zexson.vercel.app" rel="noopener noreferrer"&gt;Our Website&lt;/a&gt; 🌐&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@ZexsonStudio" rel="noopener noreferrer"&gt;YouTube Channel&lt;/a&gt; 📺&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.instagram.com/zexsonteam/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; 📷&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We plan to release Lynx in the coming months, even if it is not completely finished.&lt;/p&gt;

&lt;p&gt;We’re continuously working to bring a fresh perspective to PHP development. &lt;strong&gt;Lynx is not finished yet, but we’re making big strides!&lt;/strong&gt; 💡🐾&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>news</category>
      <category>php</category>
      <category>learning</category>
    </item>
    <item>
      <title>Lynx in CPanel🦄</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Wed, 26 Mar 2025 20:06:55 +0000</pubDate>
      <link>https://dev.to/signor_p/lynx-in-cpanel-kno</link>
      <guid>https://dev.to/signor_p/lynx-in-cpanel-kno</guid>
      <description>&lt;p&gt;Signor_P: First of all, I send my greetings to all of you :).&lt;br&gt;
We’re thrilled to share the latest update on Lynx’s performance on cPanel! Although the MySQL connection functionality has been in place, we recently tested it on cPanel and the system has been fully approved. In addition, we’re just starting to focus on the security aspect, ensuring that every component of Lynx is as safe as possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Brief Overview of the Database System
&lt;/h3&gt;

&lt;p&gt;With Lynx, managing your database has never been easier. Here’s a quick deep note on how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple Table Creation:&lt;/strong&gt; Simply write your table definitions in a PHP file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Detection:&lt;/strong&gt; Whenever your Lynx project performs a database-related operation, Lynx automatically detects it and creates the necessary tables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lynx-Specific Features:&lt;/strong&gt; Enjoy a range of unique features that simplify and streamline your database management directly from your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Demo Site Overview
&lt;/h3&gt;

&lt;p&gt;Our upcoming demo site is designed to showcase Lynx’s capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple Auth System:&lt;/strong&gt; Register an account to access various pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin Panel:&lt;/strong&gt; Once logged in, explore a secure admin panel displaying limited, protected data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-World Test:&lt;/strong&gt; See firsthand what you can achieve with Lynx in a real, tested environment 😄.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Built with Pure PHP
&lt;/h3&gt;

&lt;p&gt;Lynx is crafted using pure PHP, ensuring there are no unnecessary dependencies. We recognize that being built purely in PHP might feel like taking a step back for some modern features, but this design choice is intentional. For those who need advanced dependency management, Lynx can be optionally integrated with tools like Composer, ensuring full compatibility with modern technologies.&lt;/p&gt;

&lt;p&gt;Stay connected and follow our journey:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://discord.gg/GFtfkYQ2de" rel="noopener noreferrer"&gt;Discord Server&lt;/a&gt; 💬&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://zexson.vercel.app" rel="noopener noreferrer"&gt;Our site&lt;/a&gt; 🌐&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/@ZexsonStudio" rel="noopener noreferrer"&gt;YouTube Channel&lt;/a&gt; 📺&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.instagram.com/zexsonteam/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; 📷&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s continue to push the boundaries of PHP development together 🤍🐾&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>programming</category>
      <category>news</category>
      <category>php</category>
    </item>
    <item>
      <title>Simple Encryption Solutions with Zexson Toolkit</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Fri, 21 Mar 2025 13:04:11 +0000</pubDate>
      <link>https://dev.to/signor_p/simple-encryption-solutions-with-zexson-toolkit-cld</link>
      <guid>https://dev.to/signor_p/simple-encryption-solutions-with-zexson-toolkit-cld</guid>
      <description>&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%2Fwxvo429hucsg880otgqf.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%2Fwxvo429hucsg880otgqf.png" alt="Zexson Toolkit Logo" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;zexson_toolkit&lt;/strong&gt; is an npm package you can use for data encryption, token generation, and string manipulation. Below is a quick look at the package's main features and usage examples.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encryption &amp;amp; Decryption:&lt;/strong&gt; Securely encrypt your data and decrypt it when needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Generation:&lt;/strong&gt; Create tokens with customizable length and character sets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;String Comparison:&lt;/strong&gt; Perform simple text comparisons to ensure data consistency.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. Encryption &amp;amp; Decryption
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;encrypt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;decrypt&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;zexson_toolkit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;secret information&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;encrypted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;encrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;customKey&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decrypted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;decrypt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encrypted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;customKey&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decrypted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "secret information"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Token Generation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;tokenGenerator&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;zexson_toolkit&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;tokenGenerator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;defaultSet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;&lt;strong&gt;zexson_toolkit&lt;/strong&gt; provides simple and effective solutions for data encryption and token management in your projects. For more details and examples, visit the &lt;a href="https://www.npmjs.com/package/zexson_toolkit" rel="noopener noreferrer"&gt;npm page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Speaking of our NPM package, we will be releasing our new package for web development very soon 🚀! This package is being developed with the philosophy of your needs (less code, more work), so developers can focus only on your project instead of dealing with complex configurations 🤍. The package will continue to be versioned, adding small features...⭐&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>news</category>
      <category>node</category>
    </item>
    <item>
      <title>Lynx: The Next-Gen PHP Framework</title>
      <dc:creator>Signor_P</dc:creator>
      <pubDate>Wed, 19 Mar 2025 06:38:04 +0000</pubDate>
      <link>https://dev.to/signor_p/lynx-the-next-gen-php-framework-b2d</link>
      <guid>https://dev.to/signor_p/lynx-the-next-gen-php-framework-b2d</guid>
      <description>&lt;p&gt;PHP has been a dominant force in web development for years, but it’s time for a fresh perspective. &lt;strong&gt;Lynx&lt;/strong&gt; is here to redefine PHP development, bringing a powerful and modern framework to developers who demand both flexibility and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  A New Era for PHP Developers
&lt;/h2&gt;

&lt;p&gt;Lynx is built for developers who want a streamlined, modular, and high-performance PHP experience. It offers a clean architecture, efficient development tools, and an optimized workflow to elevate your projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Lynx Stands Out
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modular and Scalable Design&lt;/strong&gt; – Build applications with clean separation and maintainability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-Performance Core&lt;/strong&gt; – Powered by Rust at critical levels for an unmatched developer experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless Middleware System&lt;/strong&gt; – Efficient request handling with full control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer-Friendly CLI&lt;/strong&gt; – Automate and accelerate your workflow effortlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A New Standard for PHP
&lt;/h2&gt;

&lt;p&gt;Lynx is more than just a framework—it’s a movement towards a more efficient and powerful PHP ecosystem. Stay tuned for its release and join a community that is shaping the future of PHP development.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Signor_P &amp;amp; Zexson Team&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Software should always be easy. When someone starts programming today, they shouldn’t have to spend too much time just learning the technologies needed for web development. This may vary from person to person, but as engineers, we must always minimize this time. Lynx is just the beginning. We hope you like it when it’s released. One of the reasons I created Lynx is because popular but heavier frameworks like Laravel dominate the market. From my experience, they add unnecessary overhead for small to medium-sized projects. Zexson Team will continue developing for you. Instead of spending time learning, configuring, installing packages, or handling system integrations, most of these processes will be handled automatically by the system, allowing you to focus solely on your work. Remember, Zexson Team doesn’t just provide technology—it gives you back a significant part of your time. 😄"&lt;/p&gt;

&lt;p&gt;If you want to support us now, you can reach out on Instagram and Discord at &lt;code&gt;_signor_p_&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>news</category>
      <category>php</category>
    </item>
  </channel>
</rss>
