Skip to content
FrankFMYPublic

About

TypeScript toolkit monorepo: core utilities, validation, Svelte UI, Elysia helpers and Drizzle workflows.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

FMY Stack

A personal TypeScript toolkit monorepo with focused packages for core utilities, runtime validation, Svelte UI, Elysia applications, and Drizzle ORM workflows.

I built these packages to keep recurring product-system concerns explicit and testable without copying ad-hoc helpers between applications.

CI License Bun TypeScript

Packages

Package Scope Verification
@frankfmy/core Dates, money, strings, phone normalization, business identifiers, collections, functions, IDs and cryptographic helpers 241 tests / 634 assertions
@frankfmy/validation ArkType schemas for identity, accounts, money, passwords, pagination and common request contracts 46 tests / 72 assertions
@frankfmy/db-utils Drizzle pagination, search, soft deletion, transaction retry, batch operations and seeding 48 tests / 80 assertions
@frankfmy/elysia-kit Elysia application setup, auth helpers, errors, rate limiting, logging and response contracts 40 tests / 66 assertions
@frankfmy/ui Svelte 5 + Tailwind components for forms, tables, pagination, overlays, feedback and themes strict Svelte check, package build, and styles export consumer

Repository status

The source repository is public. The five workspace packages are versioned together at 1.1.2. Publication is allowed only from the immutable release workflow after the complete monorepo and coordinated tarball-consumer gates pass.

Quick start

git clone https://github.com/FrankFMY/fmy-stack.git
cd fmy-stack
bun install --frozen-lockfile
bun run verify

Examples

Core utilities

import {
  formatDateRU,
  formatMoneyRU,
  groupBy,
  validateINN,
} from "@frankfmy/core";

formatDateRU(new Date());
formatMoneyRU(1_234.56);
validateINN("7707083893");
groupBy(records, "status");

Validation

import {
  Email,
  INN,
  PasswordStrong,
  UserCreate,
} from "@frankfmy/validation";

const result = UserCreate({
  email: "user@example.com",
  password: "Example-Passphrase-2026!",
  firstName: "Example",
  lastName: "User",
});

Elysia

import {
  ApiError,
  authPlugin,
  createApp,
  rateLimiter,
  respond,
} from "@frankfmy/elysia-kit";

const app = createApp({ name: "Example API" })
  .use(authPlugin({ secret: process.env.JWT_SECRET! }))
  .use(rateLimiter({ max: 100, windowMs: 60_000 }))
  .get("/health", () => respond.success({ ok: true }))
  .listen(3000);

Drizzle

import {
  buildPaginatedResult,
  paginate,
  runTransactionWithRetry,
} from "@frankfmy/db-utils";

const page = await paginate(query, { page: 1, limit: 20 });
await runTransactionWithRetry(db, async (tx) => {
  // transaction-owned writes
});

Quality gates

bun run format:check
bun run lint
bun run check
bun run test
bun run build
bun run packages:check
bun audit

The current clean gate uses Bun 1.4, TypeScript 6, Svelte 5, Vite 8, Turbo 2, Drizzle ORM 0.45, and Elysia 1.4 with zero known dependency advisories.

Author

Artem Prianishnikov

License

Apache-2.0 © 2026 Artem Prianishnikov. See LICENSE and NOTICE.

About

TypeScript toolkit monorepo: core utilities, validation, Svelte UI, Elysia helpers and Drizzle workflows.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages