Skip to content

Shared TypeScript packages ​

Small production packages shared by independent products. They are infrastructure for reusable capabilities, not a product or application framework. Products consume these packages and retain ownership of their business logic.

Packages use the @finluth scope and publish to Finluth Git's npm registry. See npm package registry.

Do not move code into packages merely because it is shared once. Extract something when it represents a stable, reusable capability.

Local development ​

Requires Node.js 20 or newer and pnpm 11.19.0 (pinned in package.json).

sh
pnpm install
pnpm build
pnpm test
pnpm lint
pnpm typecheck

Run a package task by filtering, for example pnpm --filter @finluth/logger test.

Packages ​

@finluth/config ​

Small, dependency-free helpers for reading configuration values. The caller passes an environment-like record, so the package does not read process globals or define application-specific variables.

ts
import { optionalConfig, requireConfig } from '@finluth/config';

const port = Number(requireConfig(process.env, 'PORT'));
const sentryDsn = optionalConfig(process.env, 'SENTRY_DSN');

@finluth/logger ​

A dependency-free structured logger with debug, info, warn, and error levels. Readable lines outside production and JSON in production.

ts
import { createLogger } from '@finluth/logger';

const logger = createLogger({ level: 'info' });
logger.info('Server started', { port: 3000 });

@finluth/ui ​

A few accessible React primitives (Button, Input, Label, Card, Badge), not a complete design system. React 18 or 19 is a peer dependency.

Import from the package root, such as import { createLogger } from '@finluth/logger'; do not import from src/.

Private operations documentation for the Finluth workspace.