<?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: Zak R.</title>
    <description>The latest articles on DEV Community by Zak R. (@zakpie).</description>
    <link>https://dev.to/zakpie</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%2F555732%2F22c39793-c0c1-474b-a7d5-ac252f757924.png</url>
      <title>DEV Community: Zak R.</title>
      <link>https://dev.to/zakpie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zakpie"/>
    <language>en</language>
    <item>
      <title>Stellar AppKit: Building a Complete Application Layer for Stellar</title>
      <dc:creator>Zak R.</dc:creator>
      <pubDate>Thu, 27 Aug 2026 08:47:28 +0000</pubDate>
      <link>https://dev.to/zakpie/stellar-appkit-building-a-complete-application-layer-for-stellar-4d10</link>
      <guid>https://dev.to/zakpie/stellar-appkit-building-a-complete-application-layer-for-stellar-4d10</guid>
      <description>&lt;p&gt;Building a Stellar application shouldn't require developers to assemble a dozen different pieces before they can get to the product itself.&lt;/p&gt;

&lt;p&gt;Wallet connectivity is only the beginning.&lt;/p&gt;

&lt;p&gt;A production-grade Stellar application needs to handle wallet integration, responsive wallet UX, authentication, session management, Soroban transactions, transaction simulation, error handling, localization, and increasingly, compliance and user onboarding.&lt;/p&gt;

&lt;p&gt;That is the problem we're trying to solve with &lt;strong&gt;Stellar AppKit&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Stellar AppKit is an application SDK designed to provide a unified layer between your application, your users, wallets, and the Stellar network.&lt;/p&gt;

&lt;p&gt;The easiest way to think about it is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Wallet connectivity gets a user into your application. AppKit is focused on everything that happens around that connection.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Stellar AppKit?
&lt;/h2&gt;

&lt;p&gt;Stellar AppKit started as a wallet connectivity library, but the project has evolved into something broader.&lt;/p&gt;

&lt;p&gt;The goal is to provide developers with reusable infrastructure for the application layer of Stellar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Application
       │
       ▼
┌──────────────────────┐
│    Stellar AppKit    │
├──────────────────────┤
│ Wallet Connectivity  │
│ Authentication       │
│ Session Management   │
│ Transaction UX       │
│ Soroban Infrastructure│
│ Risk Detection       │
│ Localization         │
│ Compliance           │
└──────────┬───────────┘
           │
           ▼
   Stellar Ecosystem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of every application independently implementing these primitives, AppKit aims to provide them through one consistent developer experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wallet connectivity is only the starting point
&lt;/h2&gt;

&lt;p&gt;There are already good wallet connectivity solutions in the Stellar ecosystem.&lt;/p&gt;

&lt;p&gt;Stellar Wallets Kit, for example, solves an important problem: connecting applications to multiple Stellar wallets through a common interface.&lt;/p&gt;

&lt;p&gt;We don't see that problem as the entire application stack.&lt;/p&gt;

&lt;p&gt;A developer building a real application eventually has to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How should the wallet selector behave on mobile?&lt;/li&gt;
&lt;li&gt;How do I support multiple frontend frameworks?&lt;/li&gt;
&lt;li&gt;How do I localize the wallet experience?&lt;/li&gt;
&lt;li&gt;How do I authenticate a user with their wallet?&lt;/li&gt;
&lt;li&gt;How do I maintain their session?&lt;/li&gt;
&lt;li&gt;How do I validate that authentication on the server?&lt;/li&gt;
&lt;li&gt;How do I simulate a Soroban transaction before signing?&lt;/li&gt;
&lt;li&gt;How do I show the user what they're actually signing?&lt;/li&gt;
&lt;li&gt;How do I detect potentially dangerous transactions?&lt;/li&gt;
&lt;li&gt;How do I onboard users who don't already have a wallet?&lt;/li&gt;
&lt;li&gt;How do I handle compliance requirements?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AppKit is intended to address that larger set of problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  A better wallet UX
&lt;/h2&gt;

&lt;p&gt;Wallet connectivity APIs are useful, but the user experience surrounding a wallet connection matters just as much.&lt;/p&gt;

&lt;p&gt;A desktop application and a mobile application shouldn't necessarily present wallet selection in the same way.&lt;/p&gt;

&lt;p&gt;AppKit supports different UI presentation patterns, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desktop modal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mobile bottom sheet&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inline and UI-agnostic flows&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows applications to use AppKit's ready-made experience or build their own interface around the underlying SDK.&lt;/p&gt;

&lt;p&gt;The objective isn't to force a specific design.&lt;/p&gt;

&lt;p&gt;It is to give developers a good default experience while keeping the underlying functionality flexible.&lt;/p&gt;




&lt;h2&gt;
  
  
  25 languages out of the box
&lt;/h2&gt;

&lt;p&gt;Stellar is a global ecosystem, so localization shouldn't become another project developers have to maintain themselves.&lt;/p&gt;

&lt;p&gt;AppKit currently supports &lt;strong&gt;25 languages&lt;/strong&gt;, including Chinese and other major languages.&lt;/p&gt;

&lt;p&gt;That means wallet-related interfaces, authentication flows, and other AppKit components can be presented to users in their preferred language without every application having to implement the translation infrastructure independently.&lt;/p&gt;

&lt;p&gt;Localization is treated as part of the application experience rather than an afterthought.&lt;/p&gt;




&lt;h2&gt;
  
  
  Multi-framework support
&lt;/h2&gt;

&lt;p&gt;Another important design decision is keeping AppKit independent from a single frontend framework.&lt;/p&gt;

&lt;p&gt;The core SDK is framework-agnostic, while UI integrations are available for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vue&lt;/li&gt;
&lt;li&gt;Svelte&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're also working toward support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;LynxJS&lt;/li&gt;
&lt;li&gt;Flutter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is to make AppKit useful across both web and mobile applications while maintaining the same underlying concepts and developer experience.&lt;/p&gt;

&lt;p&gt;A developer shouldn't have to completely rethink wallet and authentication infrastructure just because their frontend stack changed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Transaction UX: don't make users sign blind XDR
&lt;/h2&gt;

&lt;p&gt;One of the areas we're particularly interested in is &lt;strong&gt;transaction understanding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Traditionally, an application builds a transaction, produces XDR, and asks a wallet to sign it.&lt;/p&gt;

&lt;p&gt;From the user's perspective, that can be extremely opaque.&lt;/p&gt;

&lt;p&gt;The user may be asked to approve a transaction without having a clear understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which operations are being executed&lt;/li&gt;
&lt;li&gt;Which assets are moving&lt;/li&gt;
&lt;li&gt;How balances will change&lt;/li&gt;
&lt;li&gt;What fees are involved&lt;/li&gt;
&lt;li&gt;Which contracts are being called&lt;/li&gt;
&lt;li&gt;Whether there are potential risks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AppKit is designed to put an interpretation layer around transactions.&lt;/p&gt;

&lt;p&gt;The vision is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
     │
     ▼
Decode
     │
     ▼
Simulate
     │
     ▼
Explain
     │
     ▼
Assess Risk
     │
     ▼
User Approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This includes capabilities around transaction previews, operation decoding, simulation, balance and fee information, contract information, and risk detection.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Users should have a much better understanding of what they are signing.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Soroban application infrastructure
&lt;/h2&gt;

&lt;p&gt;Soroban introduces another layer of complexity.&lt;/p&gt;

&lt;p&gt;A typical transaction flow isn't simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create → Sign → Submit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Applications often need to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build
  ↓
Simulate
  ↓
Prepare
  ↓
Sign
  ↓
Submit
  ↓
Track
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AppKit provides abstractions around this lifecycle so developers can work with higher-level APIs instead of rebuilding the same workflow in every project.&lt;/p&gt;

&lt;p&gt;We're also working on capabilities such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Typed contract clients&lt;/li&gt;
&lt;li&gt;Transaction helpers&lt;/li&gt;
&lt;li&gt;RPC failover&lt;/li&gt;
&lt;li&gt;Simulation-aware execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to make interacting with Soroban feel more like using an application SDK and less like manually orchestrating every transaction step.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authentication shouldn't stop at "Connect Wallet"
&lt;/h2&gt;

&lt;p&gt;A wallet connection does not necessarily mean the user is authenticated in your application.&lt;/p&gt;

&lt;p&gt;Modern applications usually need a proper authentication lifecycle.&lt;/p&gt;

&lt;p&gt;AppKit is building &lt;strong&gt;Stellar authentication and session management inspired by Sign In with Ethereum (SIWE)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The system is designed around concepts such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Connect Wallet
      ↓
Request Nonce
      ↓
Sign Authentication Message
      ↓
Server Validation
      ↓
Create Session
      ↓
Authenticated Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nonce-based authentication&lt;/li&gt;
&lt;li&gt;Signed authentication messages&lt;/li&gt;
&lt;li&gt;Session creation&lt;/li&gt;
&lt;li&gt;Session persistence&lt;/li&gt;
&lt;li&gt;Re-authentication&lt;/li&gt;
&lt;li&gt;Sign-out&lt;/li&gt;
&lt;li&gt;Server-side signature and session validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to make a Stellar wallet usable as an application identity rather than treating wallet connection as the authentication mechanism itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Walletless onboarding
&lt;/h2&gt;

&lt;p&gt;One of the bigger areas on our roadmap is &lt;strong&gt;walletless connectivity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Crypto onboarding can be a significant barrier for users who have never interacted with a wallet before.&lt;/p&gt;

&lt;p&gt;We're working toward allowing applications to onboard users through more familiar authentication methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  Social login
&lt;/h2&gt;

&lt;p&gt;Applications will be able to offer familiar social authentication flows so users can get started without first installing and configuring a traditional crypto wallet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passkeys
&lt;/h2&gt;

&lt;p&gt;We're also working toward passkey-based authentication, allowing users to authenticate using device-native credentials and biometrics.&lt;/p&gt;

&lt;p&gt;The broader goal is to make Stellar applications accessible to users who don't already identify themselves as "crypto users."&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install wallet
↓
Create account
↓
Find recovery phrase
↓
Connect wallet
↓
Start application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the experience can move closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authenticate
↓
Start using the application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while still allowing applications to interact with Stellar underneath.&lt;/p&gt;




&lt;h2&gt;
  
  
  Compliance and KYC
&lt;/h2&gt;

&lt;p&gt;Another area we're exploring is making compliance infrastructure available directly at the application layer.&lt;/p&gt;

&lt;p&gt;For many Stellar applications, particularly those involving regulated assets, real-world assets, financial services, or restricted jurisdictions, compliance can't simply be an external concern.&lt;/p&gt;

&lt;p&gt;Developers may need to know whether a user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Has completed KYC&lt;/li&gt;
&lt;li&gt;Is eligible to use a particular application&lt;/li&gt;
&lt;li&gt;Is from an allowed jurisdiction&lt;/li&gt;
&lt;li&gt;Meets an age requirement&lt;/li&gt;
&lt;li&gt;Satisfies another compliance policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today, developers often have to assemble separate identity and compliance systems to handle these requirements.&lt;/p&gt;

&lt;p&gt;We're working toward allowing developers to request and manage KYC directly through AppKit.&lt;/p&gt;

&lt;h2&gt;
  
  
  A zero-knowledge compliance layer
&lt;/h2&gt;

&lt;p&gt;The longer-term vision is to combine compliance verification with zero-knowledge technology.&lt;/p&gt;

&lt;p&gt;Instead of putting sensitive personal information on-chain, applications could verify specific properties about a user.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;KYC completed      → ✓
Allowed jurisdiction → ✓
Age requirement    → ✓
Restricted status   → ✗
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;without exposing the underlying personal information directly on-chain.&lt;/p&gt;

&lt;p&gt;The objective is to make compliance:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verifiable + Privacy-preserving + Reusable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is still an area we're actively developing, but we believe it could become increasingly important as Stellar applications move into regulated and real-world use cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why not just use a wallet SDK?
&lt;/h2&gt;

&lt;p&gt;This is probably the most important distinction.&lt;/p&gt;

&lt;p&gt;If your application only needs to connect to a Stellar wallet, a wallet-focused SDK may be exactly what you need.&lt;/p&gt;

&lt;p&gt;AppKit is intended for applications that need more.&lt;/p&gt;

&lt;p&gt;The difference can be summarized like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Wallet Connectivity&lt;/th&gt;
&lt;th&gt;Application Layer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Connect wallet&lt;/td&gt;
&lt;td&gt;Connect wallet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sign transaction&lt;/td&gt;
&lt;td&gt;Sign transaction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wallet selection&lt;/td&gt;
&lt;td&gt;Wallet UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wallet abstraction&lt;/td&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Session management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Server-side validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Transaction preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Simulation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Risk detection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Soroban lifecycle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Localization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Cross-framework UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Walletless onboarding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Compliance infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We don't think developers need yet another abstraction simply for the sake of having one.&lt;/p&gt;

&lt;p&gt;The goal is to reduce the amount of application infrastructure they have to build repeatedly.&lt;/p&gt;




&lt;h2&gt;
  
  
  The bigger vision
&lt;/h2&gt;

&lt;p&gt;The long-term vision for AppKit is a single application layer that helps developers move through the entire user and transaction lifecycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌───────────────┐
                    │     User      │
                    └───────┬───────┘
                            │
                            ▼
                  ┌──────────────────┐
                  │   Authentication │
                  └────────┬─────────┘
                           │
                           ▼
                  ┌──────────────────┐
                  │     Session      │
                  └────────┬─────────┘
                           │
                           ▼
                  ┌──────────────────┐
                  │ Wallet / Identity│
                  └────────┬─────────┘
                           │
                           ▼
                  ┌──────────────────┐
                  │    Transaction   │
                  │ Preview / Risk   │
                  └────────┬─────────┘
                           │
                           ▼
                  ┌──────────────────┐
                  │      Soroban     │
                  │    Execution     │
                  └────────┬─────────┘
                           │
                           ▼
                  ┌──────────────────┐
                  │     Stellar      │
                  └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And eventually, developers should be able to choose between traditional wallets, smart wallets, social authentication, passkeys, and compliant identity flows without having to completely rewrite their application.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;We're continuing to build AppKit around the needs of Stellar developers.&lt;/p&gt;

&lt;p&gt;Some of the areas we're working on include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Walletless authentication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Social login&lt;/li&gt;
&lt;li&gt;Passkeys&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cross-platform&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Native&lt;/li&gt;
&lt;li&gt;LynxJS&lt;/li&gt;
&lt;li&gt;Flutter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrated KYC flows&lt;/li&gt;
&lt;li&gt;Zero-knowledge-based compliance verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Application infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More transaction intelligence&lt;/li&gt;
&lt;li&gt;More Soroban abstractions&lt;/li&gt;
&lt;li&gt;More wallet integrations&lt;/li&gt;
&lt;li&gt;Improved developer tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to build the biggest SDK possible.&lt;/p&gt;

&lt;p&gt;It's to make building a Stellar application significantly easier.&lt;/p&gt;




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

&lt;p&gt;Stellar already has strong infrastructure for wallets, assets, payments, and smart contracts.&lt;/p&gt;

&lt;p&gt;What we're building with &lt;strong&gt;Stellar AppKit&lt;/strong&gt; is the layer around those primitives.&lt;/p&gt;

&lt;p&gt;A developer shouldn't have to independently solve wallet UX, authentication, session management, transaction interpretation, Soroban execution, localization, and eventually compliance every time they start a new Stellar application.&lt;/p&gt;

&lt;p&gt;The vision is straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Connect → Authenticate → Understand → Sign → Execute → Verify&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's what we're building with Stellar AppKit.&lt;/p&gt;

&lt;p&gt;The project is open source, and we're actively looking for feedback from developers building on Stellar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/SagantaHQ/stellar-appkit" rel="noopener noreferrer"&gt;https://github.com/SagantaHQ/stellar-appkit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>stellar</category>
      <category>wallet</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Why I Stopped Using PM2 and Built My Own Bun Process Manager</title>
      <dc:creator>Zak R.</dc:creator>
      <pubDate>Thu, 12 Feb 2026 15:11:08 +0000</pubDate>
      <link>https://dev.to/zakpie/why-i-stopped-using-pm2-and-built-my-own-bun-process-manager-4ehe</link>
      <guid>https://dev.to/zakpie/why-i-stopped-using-pm2-and-built-my-own-bun-process-manager-4ehe</guid>
      <description>&lt;p&gt;&lt;strong&gt;I loved PM2. Then I switched to Bun.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me tell you a quick story. Six months ago, I migrated a handful of microservices from Node to Bun. The speed improvements were everything the benchmarks promised. Cold starts dropped dramatically. Memory usage shrank. I was thrilled.&lt;/p&gt;

&lt;p&gt;Then I noticed something. My process manager, PM2, the tool I'd relied on for years, was now the slowest part of my stack. It was the thing consuming the most memory in some cases. The irony of running a Node-based supervisor over hyper-optimized Bun processes started to eat at me.&lt;/p&gt;

&lt;p&gt;So I did what any reasonable developer does. I spent my weekends building a replacement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Breaking Point
&lt;/h2&gt;

&lt;p&gt;The final straw wasn't one big thing. It was a cascade of small frustrations. PM2 would occasionally misreport memory usage for Bun processes. The TypeScript integration required extra flags and workarounds. &lt;/p&gt;

&lt;p&gt;I had to maintain a separate ecosystem.json that felt increasingly disconnected from the rest of my Bun-native tooling. Every time I ran &lt;strong&gt;pm2 start&lt;/strong&gt;, there was a visible delay as the Node-based daemon spun up, only to then launch a Bun process.&lt;/p&gt;

&lt;p&gt;I started keeping a list of these friction points. After a few weeks, the list was long enough to justify a project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;ProcBoss (pboss) is a process manager that does one thing: manage long-running Bun processes without any Node dependency. &lt;/p&gt;

&lt;p&gt;No daemon running on a separate runtime. No compatibility layers. Just Bun managing Bun.&lt;/p&gt;

&lt;p&gt;The CLI is deliberately familiar:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bun i -g pboss&lt;br&gt;
pboss start server.ts --name api&lt;br&gt;
pboss restart api&lt;br&gt;
pboss logs api --lines 100&lt;br&gt;
pboss list&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Under the hood, everything uses Bun's native APIs. Subprocess spawning uses Bun.spawn. File operations use Bun.write and Bun.file. &lt;/p&gt;

&lt;p&gt;The internal state management uses Bun's built-in SQLite. No fs polyfills. No child_process from Node. Pure Bun.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;After migrating my services from PM2 to ProcBoss (pboss), here's what I noticed.&lt;br&gt;
The process manager itself starts almost instantly. &lt;/p&gt;

&lt;p&gt;There's no daemon boot delay. The memory overhead of the manager dropped significantly because it's not running a full Node runtime alongside Bun. &lt;/p&gt;

&lt;p&gt;TypeScript files just work — no flags, no config, no transpilation. And the whole thing feels coherent in a way that's hard to describe. My entire stack is one runtime now, top to bottom.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Switch?
&lt;/h2&gt;

&lt;p&gt;If you're running Node services, PM2 is still excellent. Seriously. It's mature, battle-tested, and feature-rich.&lt;/p&gt;

&lt;p&gt;But if you've committed to Bun, consider whether your toolchain has actually caught up with that decision. Your runtime is Bun. Your package manager is Bun. Your test runner is Bun. Why is your process manager still Node?&lt;/p&gt;

&lt;p&gt;That's the question that led me to build ProcBoss (pboss). Maybe it's the question you've been ignoring too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;br&gt;
Repository: &lt;a&gt;https://github.com/procboss/pboss&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Package: &lt;a href="https://www.npmjs.com/package/pboss" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/pboss&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>pm2</category>
      <category>procboss</category>
      <category>pboss</category>
    </item>
    <item>
      <title>Deploying Solana Anchor Programs Easily with Rocket Anchor</title>
      <dc:creator>Zak R.</dc:creator>
      <pubDate>Mon, 10 Nov 2025 23:50:06 +0000</pubDate>
      <link>https://dev.to/zakpie/deploying-solana-anchor-programs-easily-with-rocket-anchor-48jf</link>
      <guid>https://dev.to/zakpie/deploying-solana-anchor-programs-easily-with-rocket-anchor-48jf</guid>
      <description>&lt;p&gt;If you're a developer working with Anchor on Solana, you know the drill. You build your powerful program, and then... you're stuck writing a tangled mess of ad-hoc scripts for deployment, upgrades, and account initialization. It's time-consuming, error-prone, and just plain frustrating.&lt;/p&gt;

&lt;p&gt;What if you could have a smooth, repeatable, Hardhat-style workflow?&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/rocket-anchor" rel="noopener noreferrer"&gt;Rocket Anchor&lt;/a&gt;&lt;/strong&gt;, a new open-source tool designed to save you from deployment headaches and streamline your entire process. This guide will walk you through exactly what it is and how to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Rocket Anchor?
&lt;/h2&gt;

&lt;p&gt;Rocket Anchor is a CLI and programmatic tool that brings the developer-friendly experience of tools like Hardhat to the Anchor ecosystem.&lt;/p&gt;

&lt;p&gt;Its main goal is to solve the "last mile" problem of Anchor development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It replaces manual scripts&lt;/strong&gt; with a clean, config-based CLI workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It introduces "seeding,"&lt;/strong&gt; a powerful concept for initializing accounts, PDAs, and program state right after deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's built for teams,&lt;/strong&gt; making it easy to manage deployments across different networks (&lt;code&gt;devnet&lt;/code&gt;, &lt;code&gt;mainnet&lt;/code&gt;) without changing your code.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardhat-Inspired CLI:&lt;/strong&gt; Get a familiar workflow with commands like &lt;code&gt;init&lt;/code&gt;, &lt;code&gt;deploy&lt;/code&gt;, and &lt;code&gt;seed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Powerful Seeding:&lt;/strong&gt; Run scripts &lt;em&gt;after&lt;/em&gt; deployment to initialize program state, create PDAs, or set up initial data. This is a massive time-saver.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Management:&lt;/strong&gt; Easily configure different networks (like &lt;code&gt;devnet&lt;/code&gt;, &lt;code&gt;testnet&lt;/code&gt;, &lt;code&gt;mainnet&lt;/code&gt;, &lt;code&gt;custom-network&lt;/code&gt;) in a single config file, complete with RPC endpoints and keypair paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programmatic API:&lt;/strong&gt; Need to integrate Rocket Anchor into your existing TypeScript toolchain? You can import and use it directly.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;You can install Rocket Anchor globally to use it as a CLI tool across all your projects, or locally as a &lt;code&gt;devDependency&lt;/code&gt; in a specific project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global Install:&lt;/strong&gt;&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; rocket-anchor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Local Install:&lt;/strong&gt;&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;--save-dev&lt;/span&gt; rocket-anchor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Getting Started: Your First Deployment
&lt;/h2&gt;

&lt;p&gt;Let's walk through the entire workflow from zero to a seeded deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Initialize Rocket Anchor
&lt;/h3&gt;

&lt;p&gt;In the root of your Anchor project, run the &lt;code&gt;init&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx ra init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new file named &lt;code&gt;ra.config.ts&lt;/code&gt; in your project's root. This is where you'll define all your networks and deployment configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Configure Your Networks
&lt;/h3&gt;

&lt;p&gt;Open the newly created &lt;code&gt;ra.config.ts&lt;/code&gt;. This is where you'll tell Rocket Anchor how to connect to different Solana clusters.&lt;/p&gt;

&lt;p&gt;A typical configuration might look something like this:&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;// ra.config.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RocketAnchorConfig&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;rocket-anchor&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;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RocketAnchorConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Local validator&lt;/span&gt;
    &lt;span class="na"&gt;localnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[http://127.0.0.1:8899](http://127.0.0.1:8899)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;keypair&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/path/to/your/localnet/keypair.json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="c1"&gt;// Devnet&lt;/span&gt;
    &lt;span class="na"&gt;devnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[https://api.devnet.solana.com](https://api.devnet.solana.com)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;keypair&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/path/to/your/devnet/keypair.json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="c1"&gt;// Mainnet&lt;/span&gt;
    &lt;span class="na"&gt;mainnet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[https://api.mainnet-beta.solana.com](https://api.mainnet-beta.solana.com)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;keypair&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/path/to/your/mainnet/keypair.json&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="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: (Optional but Recommended) Create Seed Scripts
&lt;/h3&gt;

&lt;p&gt;This is where the magic happens. "Seeding" is the process of initializing your program's state right after deployment.&lt;/p&gt;

&lt;p&gt;Create a &lt;code&gt;seeds/&lt;/code&gt; directory and an &lt;code&gt;index.ts&lt;/code&gt; file inside it (&lt;code&gt;seeds/index.ts&lt;/code&gt;). Here, you'll define a &lt;code&gt;SeedConfig&lt;/code&gt; array.&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;// seeds/index.ts&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SeedConfig&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;rocket-anchor&lt;/span&gt;&lt;span class="dl"&gt;'&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;const&lt;/span&gt; &lt;span class="nx"&gt;seeds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SeedConfig&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;program&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;counter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// a name for your program&lt;/span&gt;
    &lt;span class="na"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;initialize&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pda:counter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;authority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;signer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;systemProgram&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;systemProgram&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// initial_count&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;seeds&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="na"&gt;function&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;increment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;accounts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pda:counter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;authority&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;signer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
        &lt;span class="na"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Run 5 times&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;seeds&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Deploy and Seed!
&lt;/h3&gt;

&lt;p&gt;You're all set. Now, to deploy your program to &lt;code&gt;devnet&lt;/code&gt; and run the seed scripts immediately after, you just run one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx ra deploy &lt;span class="nt"&gt;--network&lt;/span&gt; devnet &lt;span class="nt"&gt;--seed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rocket Anchor will handle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Connecting to the correct network (&lt;code&gt;devnet&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Using the correct keypair.&lt;/li&gt;
&lt;li&gt; Deploying your Anchor program.&lt;/li&gt;
&lt;li&gt; Once deployed, it will run the seed scripts you defined for that program.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You're live! No more manual &lt;code&gt;solana program deploy&lt;/code&gt; commands or separate &lt;code&gt;initialize.ts&lt;/code&gt; scripts to run.&lt;/p&gt;




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

&lt;p&gt;Rocket Anchor fills a much-needed gap in the Solana development workflow. By adopting a config-based and scriptable approach to deployments and seeding, it saves time, reduces errors, and lets you focus on what matters: building your program's logic.&lt;/p&gt;

&lt;p&gt;Always remember to test thoroughly on &lt;code&gt;devnet&lt;/code&gt; before deploying to &lt;code&gt;mainnet&lt;/code&gt;. Happy building!&lt;/p&gt;

</description>
      <category>solana</category>
      <category>web3</category>
      <category>smartcontract</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Introducing Truffle Solidity Data Seeder</title>
      <dc:creator>Zak R.</dc:creator>
      <pubDate>Tue, 27 Apr 2021 02:17:12 +0000</pubDate>
      <link>https://dev.to/zakpie/introducing-truffle-solidity-data-seeder-peg</link>
      <guid>https://dev.to/zakpie/introducing-truffle-solidity-data-seeder-peg</guid>
      <description>&lt;p&gt;The Truffle framework is an awesome toolkit for every solidity and dapp developer, we at &lt;a href="https://libertypie.com"&gt;LibertyPie&lt;/a&gt; make advanced use of the truffle framework.&lt;br&gt;&lt;br&gt;
During &lt;a href="https://github.com/LibertyPie/libertypie-p2p"&gt;LibertyPie's P2P&lt;/a&gt; protocol development, we needed a simple way to seed initial data to different contracts similar to database seeding. &lt;br&gt;&lt;br&gt;
Truffle has great migration support but no seeding of data out of the box.&lt;br&gt;&lt;br&gt;
So we decided to build a simple CLI tool as an npm package for seeding initial data out of the box with 0 configurations.   &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://github.com/LibertyPie/truffle-seeder"&gt;Liberty Pie's Truffle Seeder&lt;/a&gt;, your easy way to seed initial data to any smart contract. Kindly help us improve it by giving us your feedback&lt;/p&gt;

&lt;p&gt;Project: &lt;a href="https://github.com/LibertyPie/truffle-seeder"&gt;https://github.com/LibertyPie/truffle-seeder&lt;/a&gt;&lt;/p&gt;

</description>
      <category>etheruem</category>
      <category>javascript</category>
      <category>blockchain</category>
      <category>truffleframework</category>
    </item>
    <item>
      <title>Introducing LibertyPie’s Wallet Provider</title>
      <dc:creator>Zak R.</dc:creator>
      <pubDate>Thu, 07 Jan 2021 23:58:17 +0000</pubDate>
      <link>https://dev.to/zakpie/introducing-libertypie-s-wallet-provider-17h0</link>
      <guid>https://dev.to/zakpie/introducing-libertypie-s-wallet-provider-17h0</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UAilS8n4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rvhixu82hskx1uqpuywd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UAilS8n4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rvhixu82hskx1uqpuywd.png" alt="LibertyPie WalletProvider Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As the team builds the protocol’s user interface, it is very important to research deeply into which external libraries to include. The user interface must have a rich user experience &amp;amp; also very light weighted.&lt;/p&gt;

&lt;p&gt;Every DApp must find a way to connect to users’ wallet without compromising privacy and security. Fortunately, we found many matured and well-developed libraries such as web3modal (previously web3connect), web3-wallets-kit (by Akropolis), bnc-onboard (by BlockNative) &amp;amp; many more.&lt;/p&gt;

&lt;p&gt;After a careful analysis of these existing solutions, we found reasons which discouraged us from using them. A major reason was the bloat in library size, other reasons included an incomplete library or having to pay for usage in the case of BloackNative bnc-onboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A-ytLQLm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/98fkuqhj29hg3iccwjl8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A-ytLQLm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/98fkuqhj29hg3iccwjl8.jpeg" alt="WalletProvider Image 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our final resort was to build a library exactly how we wanted it, thankfully, the initial version of LibertyPie Wallet Provider is successfully published on npm (&lt;a href="https://www.npmjs.com/package/@libertypie/wallet-provider"&gt;https://www.npmjs.com/package/@libertypie/wallet-provider&lt;/a&gt;).&lt;br&gt;
LibertyPie Wallet Provider was built to provide extra advantages over other libraries, a detailed comparison has been given below.&lt;/p&gt;

&lt;h4&gt;
  
  
  Size (according to Bundlephobia.com)
&lt;/h4&gt;

&lt;p&gt;LibertyPie Wallet Provider — 6.9kb minified +gzipped&lt;br&gt;
Web3Modal — 195kb minified + gzipped&lt;br&gt;
bnc-onboard — 65.1kb minified + gzipped&lt;br&gt;
web3-wallets-kit — 784.4kb minified + gzipped&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best&lt;/em&gt;: LibertyPie Wallet Provider&lt;br&gt;
&lt;em&gt;Worst&lt;/em&gt;: web3-wallets-kit&lt;/p&gt;

&lt;h4&gt;
  
  
  Runtime Dependencies
&lt;/h4&gt;

&lt;p&gt;LibertyPie Wallet Provider— 0&lt;br&gt;
Web3Modal — 6&lt;br&gt;
bnc-onboard — 20&lt;br&gt;
web3-wallets-kit — 9&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Best:&lt;/em&gt; LibertyPie Wallet Provider&lt;br&gt;
&lt;em&gt;Worst:&lt;/em&gt; bnc-onboard&lt;/p&gt;

&lt;h4&gt;
  
  
  Supported Wallets Providers
&lt;/h4&gt;

&lt;p&gt;LibertyPie Wallet Provider — 9&lt;br&gt;
Web3Modal — 11&lt;br&gt;
bnc-onboard — 6&lt;br&gt;
web3-wallets-kit — N/A&lt;/p&gt;

&lt;p&gt;As seen from the data above, LibertyPie Wallet Provider has many merits compared to the other libraries.&lt;br&gt;
NPM: &lt;a href="https://www.npmjs.com/package/@libertypie/wallet-provider"&gt;https://www.npmjs.com/package/@libertypie/wallet-provider&lt;/a&gt;&lt;br&gt;
Github Repo: &lt;a href="https://github.com/LibertyPie/Wallet-Provider"&gt;https://github.com/LibertyPie/Wallet-Provider&lt;/a&gt;&lt;/p&gt;

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