<?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: Keenan Olsen</title>
    <description>The latest articles on DEV Community by Keenan Olsen (@keeno12).</description>
    <link>https://dev.to/keeno12</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%2F358447%2F18678df7-a434-4cf6-a419-1dedd9b20a69.jpeg</url>
      <title>DEV Community: Keenan Olsen</title>
      <link>https://dev.to/keeno12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keeno12"/>
    <language>en</language>
    <item>
      <title>Built a New TypeScript-first API framework (faster than Express/Fastify)</title>
      <dc:creator>Keenan Olsen</dc:creator>
      <pubDate>Fri, 12 Sep 2025 20:27:19 +0000</pubDate>
      <link>https://dev.to/keeno12/built-a-new-typescript-first-api-framework-faster-than-expressfastify-2cpm</link>
      <guid>https://dev.to/keeno12/built-a-new-typescript-first-api-framework-faster-than-expressfastify-2cpm</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3" class="crayons-story__hidden-navigation-link"&gt;Introducing MoroJS: A TypeScript-First API Framework Faster Than Express &amp;amp; Fastify&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/keeno12" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F358447%2F18678df7-a434-4cf6-a419-1dedd9b20a69.jpeg" alt="keeno12 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/keeno12" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Keenan Olsen
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Keenan Olsen
                
              
              &lt;div id="story-author-preview-content-2841972" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/keeno12" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F358447%2F18678df7-a434-4cf6-a419-1dedd9b20a69.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Keenan Olsen&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 12 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3" id="article-link-2841972"&gt;
          Introducing MoroJS: A TypeScript-First API Framework Faster Than Express &amp;amp; Fastify
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>programming</category>
      <category>javascript</category>
      <category>node</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Introducing MoroJS: A TypeScript-First API Framework Faster Than Express &amp; Fastify</title>
      <dc:creator>Keenan Olsen</dc:creator>
      <pubDate>Fri, 12 Sep 2025 20:12:26 +0000</pubDate>
      <link>https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3</link>
      <guid>https://dev.to/keeno12/introducing-morojs-a-typescript-first-api-framework-faster-than-express-fastify-36n3</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Introducing MoroJS: A TypeScript-First API Framework Faster Than Express &amp;amp; Fastify
&lt;/h1&gt;

&lt;p&gt;If you’ve ever built an API with &lt;strong&gt;Express&lt;/strong&gt; or &lt;strong&gt;Fastify&lt;/strong&gt;, you know the drill: boilerplate, validation, middleware juggling, and debugging at scale. They work, but they weren’t designed for today’s &lt;strong&gt;TypeScript-first, serverless-heavy world&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;That’s why we built &lt;strong&gt;&lt;a href="https://morojs.com/" rel="noopener noreferrer"&gt;MoroJS&lt;/a&gt;&lt;/strong&gt; — a new backend framework that combines &lt;strong&gt;speed, type safety, and extensibility&lt;/strong&gt; into one package.  &lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Performance That Speaks for Itself
&lt;/h2&gt;

&lt;p&gt;Benchmarks don’t lie:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hello World&lt;/strong&gt;: ~68,392 req/sec (about &lt;strong&gt;47% faster than Fastify&lt;/strong&gt;)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real APIs&lt;/strong&gt;: ~52,992 req/sec for GET and ~37,863 req/sec for POST + validation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: ~4–6ms even under load
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 See full benchmarks here: &lt;a href="https://morojs.com/benchmarks" rel="noopener noreferrer"&gt;MoroJS Benchmarks&lt;/a&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Built for Developers
&lt;/h2&gt;

&lt;p&gt;What makes MoroJS stand out:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript-first&lt;/strong&gt; → full type safety, no guessing at runtime
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless-ready&lt;/strong&gt; → works seamlessly with Cloudflare Workers, AWS Lambda, and Vercel
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batteries included&lt;/strong&gt; → validation, middleware, caching, and rate-limiting out of the box
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔥 CLI&lt;/strong&gt; → &lt;a href="https://morojs.com/cli" rel="noopener noreferrer"&gt;scaffold projects in seconds&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&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 new MoroJS project&lt;/span&gt;
npx create-moro-app my-api
&lt;span class="nb"&gt;cd &lt;/span&gt;my-api
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧩 The Long Game: MoroJS Modules
&lt;/h2&gt;

&lt;p&gt;The vision goes beyond just a framework. We’re building a modules directory — an ecosystem where you can plug in everything from auth to payments to analytics without reinventing the wheel.&lt;/p&gt;

&lt;p&gt;Think of it like an app store for APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Get Started Today
&lt;/h2&gt;

&lt;p&gt;Docs: &lt;a href="https://morojs.com/docs" rel="noopener noreferrer"&gt;https://morojs.com/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples: &lt;a href="https://github.com/Moro-JS/examples" rel="noopener noreferrer"&gt;https://github.com/Moro-JS/examples&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🙌 We Want Your Feedback
&lt;/h2&gt;

&lt;p&gt;We’re looking for early adopters to kick the tires and tell us what you think:&lt;/p&gt;

&lt;p&gt;What would make you switch from Express/Fastify?&lt;/p&gt;

&lt;p&gt;What modules would save you the most time?&lt;/p&gt;

&lt;p&gt;Where would you deploy first (Vercel, AWS, Cloudflare)?&lt;/p&gt;

&lt;p&gt;Drop your thoughts in the comments — or better yet, try MoroJS on your next project and let us know how it goes.&lt;/p&gt;

&lt;p&gt;No one beats this speed right now. Let’s build the future of APIs together. &lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>performance</category>
    </item>
    <item>
      <title>Announcing the Spring 2021 Chainlink Hackathon!
</title>
      <dc:creator>Keenan Olsen</dc:creator>
      <pubDate>Tue, 23 Feb 2021 19:01:22 +0000</pubDate>
      <link>https://dev.to/chainlink/announcing-the-spring-2021-chainlink-hackathon-f1m</link>
      <guid>https://dev.to/chainlink/announcing-the-spring-2021-chainlink-hackathon-f1m</guid>
      <description>&lt;p&gt;We're excited to announce the Spring 2021 Chainlink Virtual Hackathon from March 15th to April 11th!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compete to win over $80k+ in prizes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every participant that submits a valid project earns 1 LINK&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learn in workshops with top protocols in DeFi, gaming, and more&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Team up with other devs to build a product that showcases your creativity&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be seen by top recruiters in the space&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Join the Hackathon channels in the Chainlink Technical Discord to be part of building the future with Chainlink oracles. We can’t wait to see what you’ve been dreaming up, so sign up now and let’s get hacking.&lt;/p&gt;

&lt;p&gt;Register here ➡️ &lt;a href="http://chn.lk/3aEozOC"&gt;http://chn.lk/3aEozOC&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to use Chainlink with Truffle</title>
      <dc:creator>Keenan Olsen</dc:creator>
      <pubDate>Tue, 31 Mar 2020 17:41:23 +0000</pubDate>
      <link>https://dev.to/keeno12/how-to-use-chainlink-with-truffle-347c</link>
      <guid>https://dev.to/keeno12/how-to-use-chainlink-with-truffle-347c</guid>
      <description>&lt;p&gt;When working with &lt;a href="https://chain.link/"&gt;Chainlink&lt;/a&gt;, a powerful development environment is essential to ensure your smart contracts are deployed successfully and securely on-chain. &lt;a href="https://www.trufflesuite.com/"&gt;Truffle&lt;/a&gt; aims to be exactly that, offering an easy to use dApp framework to help make your developer's life a lot more manageable.&lt;/p&gt;

&lt;p&gt;Working with Truffle is simple, thanks to the &lt;a href="https://www.trufflesuite.com/boxes"&gt;Truffle Boxes&lt;/a&gt; feature that allows you to download sample dApp boilerplates directly from your terminal. To help you get started, we've prepared a Chainlink Truffle Box for you. Inside is a sample Chainlinked smart contract titled “MyContract” as well as a pre-made test suite. To grab it, open up your terminal of choice and install truffle.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install truffle -g&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, create a new directory and grab the box via the following commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir Chainlink&lt;/code&gt;&lt;br&gt;
&lt;code&gt;cd Chainlink&lt;/code&gt;&lt;br&gt;
&lt;code&gt;truffle unbox smartcontractkit/box&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Upon successful unboxing, you will notice some new directories have been added. These contain helpful boilerplate code and modules to get you started with Chainlinked smart contracts. For the purposes of this article, the smart contract we will be focusing on is “MyContract” and can be found under the &lt;em&gt;contracts&lt;/em&gt; directory. This contains some basic Chainlink functionality to help us get a solid understanding of how Chainlinked contracts work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing
&lt;/h2&gt;

&lt;p&gt;First, it’s always a good idea to test your contracts to ensure correct functionality. You can do so via the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will run a variety of test cases on our sample contract, such as creating requests with and without Link tokens, sending these requests to oracle contract addresses, and testing contract ownership.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;Note:&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;You may encounter some compilation warnings dealing with the various Link token contracts. This is because we are using an updated version of the Solidity compiler than what was used when these contracts were created initially. Thus, these warnings can be ignored. The Link token is already deployed and we are simply making these contracts available for local testing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It is important to note that after every test is run, we redeploy each contract. This allows us to have true unit testing, as we do not want our tests to rely on the output of other tests. Furthermore, redeploying each contract takes time, but this is only for testing purposes and does not impact our actual performance run time.&lt;/p&gt;

&lt;p&gt;Let’s now view these test cases for “MyContract” in more detail, which you can find under &lt;strong&gt;&lt;em&gt;test/MyContract_test.js&lt;/em&gt;&lt;/strong&gt;. If you have used Mocha.js for testing before, you’ll notice that the syntax is familiar. Truffle is based on the Mocha testing framework and has the additional function of working with smart contracts. Let’s go over some of these new features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Eca0zapl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tgxyfbft6cn78nzcg4ym.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Eca0zapl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tgxyfbft6cn78nzcg4ym.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Defining the variables to be used for MyContract. In particular, the jobId value used for MyContract is never actually validated and is strictly a placeholder for demonstration purposes. If you would like to use actual jobId values, you can find them &lt;a href="https://docs.chain.link/docs/request-and-receive-data"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;contract()&lt;/em&gt; function behaves similarly to &lt;em&gt;Mocha’s describe()&lt;/em&gt;, yet it incorporates Truffle’s &lt;a href="https://www.trufflesuite.com/docs/truffle/testing/testing-your-contracts#clean-room-environment"&gt;clean-room-features&lt;/a&gt;. From the &lt;a href="https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-javascript"&gt;Truffle documentation&lt;/a&gt;, it works like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before each &lt;em&gt;contract()&lt;/em&gt; function is run, your contracts are redeployed to the running Ethereum client so the tests within it run with a clean contract state.&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;contract()&lt;/em&gt; function provides a list of accounts made available by your Ethereum client which you can use to write tests. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore, our example “MyContract” requires artifacts from other smart contracts. To do so, we will make use of the &lt;em&gt;artifacts.require()&lt;/em&gt; method, which essentially imports a specific smart contract’s artifacts as a contract abstraction. This data is stored as a JSON blob that Truffle can work with, and can be easily viewed under &lt;em&gt;build/contracts/&lt;/em&gt;. Read more about how &lt;em&gt;artifacts.require()&lt;/em&gt; works &lt;a href="https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-javascript"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yq4qWgO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q127zzlgcsfd5ltp9f10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yq4qWgO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/q127zzlgcsfd5ltp9f10.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Testing contract fulfillment requirements&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With our helper contracts now stored as constant references, we can now start to create test cases. To do so, we will need to properly understand key test methods such as &lt;em&gt;describe()&lt;/em&gt;, &lt;em&gt;beforeEach()&lt;/em&gt;, &lt;em&gt;it()&lt;/em&gt;, and &lt;em&gt;context()&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;&lt;em&gt;describe()&lt;/em&gt;&lt;/em&gt; allows us to group our test cases together. It takes two arguments, the first being a string for our test group name, and the second being a callback function. You will notice in our code example, the test cases involved are creating a request, fulfilling a request, canceling a request, and withdrawing LINK.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;beforeEach()&lt;/em&gt; runs before each individual test in it’s block scope. For many tests, certain actions will have to take place first (such as awaiting a transfer of link) before we can run our test case.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;it()&lt;/em&gt; is used for an individual test case. These are used to test our contract at different states, and should be explicit in what they are trying to accomplish. You will notice when we ran &lt;em&gt;npm test&lt;/em&gt;, the strings in each &lt;em&gt;it() functions&lt;/em&gt;’ parameters are output as logs, helping us clearly see our tests timeline.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;context()&lt;/em&gt; is an alias for &lt;em&gt;describe()&lt;/em&gt;, yet is meant to be used in more specific states of a contract’s execution. Put simply, it provides another way to keep tests easier to read and more organized.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Truffle offers a powerful toolbox to help ensure your Chainlinked smart contracts are working as intended. Thanks to its world-class testing framework based on the popular and well-documented Mocha.js, many developers will find working with it to be friendly and familiar, helping you hit the ground running. With Truffle boxes, dApp companies are able to easily provide useful examples for their fellow developers, helping grow the blockchain ecosystem. We at Chainlink plan on providing more Chainlinked smart contracts for you to work within the near future. Stay tuned.&lt;/p&gt;

&lt;p&gt;If you’re a developer, visit the &lt;a href="https://docs.chain.link"&gt;Developer Documentation&lt;/a&gt; or join the technical discussion on &lt;a href="https://discordapp.com/invite/aSK4zew"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
