Skip to content

Technology Stack Overview

The workspace contains nine repositories, each with its own build and deploy lifecycle, sharing a common set of tooling preferences and version constraints.


Quick Reference: All Repos

RepositoryPrimary StackRuntimeDeployment
vela-protocolRust, Anchor 0.32.1, spl-token-2022, Arcium circuitsSolana BPFDevnet → Mainnet
vela-sdkTypeScript, Bun, Commander, Anchor TS clientnpm package + CLIPublished to npm as @vela/sdk
vela-dashboardReact 19, TanStack Router/Query, Hono, Better Auth, DrizzleVite dev server + Cloudflare Worker–compatible backendCloudflare Workers (D1)
vela-adminReact 19, TanStack Router/Query, HonoCloudflare WorkerCloudflare Workers (service binding to dashboard)
vela-webAstro 6, React islands, Tailwind v4Astro SSG/SSRCloudflare Workers
vela-docsAstro 6, Starlight 0.38Astro SSGCloudflare Workers
vela-widgetBun build, React checkout app, Wallet StandardLoader script + Worker-hosted iframeCloudflare Workers (js.velapay.com)
vela-checkoutReact 19, Hono, Cloudflare WorkersVite + WorkerCloudflare Worker at pay.velapay.com
vela-portalReact 19, Hono, Better Auth magic linksVite + WorkerCloudflare Worker at portal.velapay.com
vela-webhookHono, Cloudflare WorkersWorker + QueuesCloudflare Workers
vela-syntheticHono, Cloudflare Workers Cron TriggersWorkerCloudflare Workers

Shared Workspace Preferences

These show up across every TypeScript repo in the workspace. They are not aspirational — they are checked in.

PreferenceWhereWhy
BunAll TS reposPackage manager, TS runtime, and test runner. bun test everywhere, bun.lock everywhere. No npm, no yarn, no pnpm.
TypeScript 5.8+All TS reposShared implementation language. Bun runs it natively; tsc --noEmit for type checking.
Cloudflare WorkersDashboard, admin, web, docs, widget, checkout, portal, webhook, syntheticDominant deployment target. Wrangler for dev/prod. D1 for state. Service bindings for interop.
React 19Dashboard, admin, widget, checkout, portalShared UI layer. TanStack Router/Query for routing and data in the app surfaces.
HonoDashboard, admin, checkout, portal, webhook, syntheticAPI layer. Runs everywhere Bun and Workers do. Replaces Express in every context.
BiomeSDK, widget, protocol (TS side)Formatting + linting in a single tool. 100× faster than ESLint + Prettier.
Drizzle ORMDashboard, checkout, portalD1-first ORM. SQLite dialect now, Postgres migration path later.

Key Version Truths

These are pinned for compatibility reasons and must not be bumped without cross-repo impact analysis.

PackageVersionWhy It's Pinned
anchor-lang / @coral-xyz/anchor0.32.1Program framework. IDL must match deployed program. Anchor 1.0 RC removes #[interface] attribute needed for transfer hooks — not production-ready.
@solana/web3.jsv1.xAnchor TS client requires v1. Kit (@solana/kit) is incompatible with the Anchor client. Migration when Anchor 1.0 ships Kit support.
@solana/spl-token^0.4.14Token-2022 helpers. Works with web3.js v1.
React19.xAll app surfaces. TanStack Start supports 18/19; we use 19.
Tailwind CSSv4.2.xCSS-first config (no tailwind.config.js). 5× faster full builds. @theme directive for design tokens.
Arcium client0.9.3@arcium-hq/client — matches MXE cluster version for encrypted instruction building.
Bun1.3.11+Workspace package manager. Native TS, built-in test runner, auto-loads .env.

Version Compatibility Matrix

Derived from STACK.md and verified against checked-in package.json / Cargo.toml files.

Component ACompatible WithNotes
Anchor CLI 0.32.1Solana CLI 2.3.0+ (Agave)Tested target. Use agive-install, not deprecated solana-install.
Anchor CLI 0.32.1Rust 1.89.0+Required for Span::local_file stabilization in IDL generation.
@coral-xyz/anchor 0.32.1@solana/web3.js v1v2 (@solana/kit) NOT supported by Anchor TS client.
@solana/spl-token 0.4.14@solana/web3.js v1For Kit, use @solana-program/token-2022 instead.
helius-sdk 2.2.x@solana/kit 3.0.x (internal)Uses Kit internally but exposes a clean API; no conflict with web3.js v1 in your code.
Drizzle ORM 0.45.xCloudflare D1Uses D1 batch() API — no interactive transactions.
Astro 6.1.xStarlight 0.38.xVerified compatible.
Better Auth 1.5.xDrizzle 0.45.x + D1Native adapter. No custom config needed.

Important Nuance: TanStack Start vs. Vite + React

The strategy docs and roadmap describe the merchant dashboard as TanStack Start + Railway. The checked-in code in vela-dashboard is a Vite + React + TanStack Router/Query + Hono shape with Cloudflare Worker–aware deployment paths.

This distinction matters because:

  • TanStack Start is a full-stack framework with server functions, SSR, and file-based routing.
  • What's actually checked in uses TanStack Router (client-side routing with full type safety) and TanStack Query (server state management) on top of a Vite React app. The API layer is Hono.
  • The Cloudflare Worker compatibility is real — Hono runs on Workers, and D1 bindings work through Wrangler dev.
  • Railway is mentioned in strategy docs as a heavier compute option, but the current codebase defaults to Cloudflare Workers for everything.

Both approaches share the same UI stack (React 19, TanStack, Hono, Drizzle, D1). The difference is whether SSR happens via TanStack Start server functions or via a simpler Vite build + Worker serving static assets + Hono API routes. The wiki preserves this distinction rather than flattening it.


Pinning Strategy

PackagePin StrategyReason
AnchorExact (0.32.1)Program framework — must match deployed program IDL
@coral-xyz/anchorExact (0.32.1)Must match Anchor CLI and deployed program
@solana/web3.js^1.xStable v1 API, patches are safe
@solana/spl-token^0.4.xActive development, minor bumps add features
TanStack Router/Query^1.xStable, semantic versioning respected
Hono^4.12.xStable, semantic versioning respected
Drizzle ORM^0.45.xPre-1.0, but stable API surface
Astro^6.1.xMajor version locked, patches safe
Starlight^0.38.xPre-1.0, updates frequently
Better Auth^1.5.x1.x stable, patches/minors safe
helius-sdk^2.2.x2.x stable, patches safe
Arcium client0.9.3Exact — must match MXE cluster

What's Not Used (and Why)

These come up often in the Solana/web ecosystem but are deliberately excluded:

ExcludedWhy
eslint + prettierReplaced by Biome — single tool, 100× faster
vitest / jestbun:test is built-in, zero config, native TS
next-auth / auth.jsBetter Auth has superior D1/Hono integration, self-hosted
prismaNo D1 support; Drizzle is lighter and D1-native
@solana/kit directlyAnchor TS client requires web3.js v1; Kit migration at Anchor 1.0
@solana/wallet-adapter-* in SDKWallet adapters are for frontends, not library packages
dotenvBun auto-loads .env files
tsx / ts-nodeBun runs TypeScript natively
nodemonBun has --hot flag
Cloudflare PagesWorkers get all new features; Pages is the deprecated path

Development Workflow

Typical Development Loop

1. bun install                    # Install dependencies (workspace-root or per-repo)
2. bun test                       # Run tests (bun:test built-in)
3. bun run check                  # Type check (tsc --noEmit)
4. bun run lint                   # Lint + format (Biome)
5. wrangler dev                   # Local Cloudflare dev server (Workers repos)
6. wrangler deploy                # Deploy to Cloudflare (production)

Testing Stack by Repo

RepoTest RunnerFrameworkPurpose
vela-protocolcargo testLiteSVM (Rust crate)Unit tests for individual instructions
vela-protocolbun test (ts-tests/)anchor-litesvm 0.2.1 + litesvm 0.6.0TypeScript integration tests, E2E flows
vela-sdkbun testbun:testSDK method unit tests
vela-dashboardbun testbun:testAPI route tests, component tests
vela-webbun testbun:testBuild verification
vela-docsbun testbun:testBuild verification

Monorepo vs Multi-Repo Structure

The workspace is not a monorepo — each repo has its own deploy lifecycle, its own package.json, its own CI pipeline. The root bun.lock exists for workspace-level scripts, but each repo independently manages its own dependencies.

The shared workspace preferences (Bun, TypeScript, Cloudflare, React 19, Biome) are conventions enforced by documentation and code review, not by a shared build tool or lerna-like orchestrator.

Internal knowledge base for the Vela Labs workspace.