Menu

Introduction

Learn about Oxidt Teams — a fullstack Rust SaaS starter rendered with Topcoat

What is Oxidt Teams?

Oxidt Teams is a production-ready SaaS starter for organizations, built entirely in Rust. Every page is rendered on the server by Topcoat; there is no WASM client.

Stack Overview

Topcoat

Server-rendered Rust framework from the tokio team: async components, typed browser expressions, no WASM bundle.

PostgreSQL

Relational database accessed with sqlx. Schema lives in migrations/, embedded in the binary and applied on boot.

oxidt-auth

Email one-time codes and passkeys against your own database, no identity provider needed. Switch to FerrisKey OIDC when apps must share one login.

TailwindCSS + DaisyUI

Utility-first CSS with DaisyUI 5 component library. Dark theme by default.

Architecture

Pages are Topcoat components in src/web/. The Axum stack in src/server/ (authentication, OAuth/MCP, billing webhooks, sessions, rate limits) wraps them, so a page reads the same session the login routes write. Changes in Settings are ordinary form POSTs that redirect back with a message.

Project Structure

src/
├── main.rs          # Axum server; Topcoat renders the pages
├── web/             # Pages and shells (Home, Dashboard, Settings, Docs, Login)
├── models/          # Shared types (AppError, organizations, API keys)
└── server/          # AppState, config, database, auth, billing, jobs

# auth, billing, crypto, smtp, stripe and polar are oxidt-kit crates, pinned by git tag in Cargo.toml

Optional features

  • --features sentry enables Sentry error tracking and tracing breadcrumbs (requires SENTRY_DSN).

Next Steps

Organization subscriptions

Settings includes owner-only checkout and a customer portal for Stripe or Polar. Billing is disabled until a provider, catalog, and signed webhook endpoint are configured. See docs/BILLING.md in the source bundle for setup and test-mode validation.