FinOpenPOS

Tech Stack

Technologies and libraries used in FinOpenPOS

Stack Overview

LayerTechnologyPurpose
FrameworkNext.js 16 (App Router)Server-side rendering, API routes, proxy
UIReact 19, Tailwind CSS 4, Radix UIComponent library and styling
ChartsRechartsDashboard interactive charts
DatabasePGLite (PostgreSQL via WASM)Embedded PostgreSQL, zero config
ORMDrizzle ORMType-safe SQL queries and schema management
APItRPC v11 (superjson)End-to-end type-safe API layer
AuthBetter AuthEmail/password authentication with session cookies
API DocsScalar (OpenAPI 3.0)Interactive API documentation at /api/docs
XML Signingxml-cryptoNF-e/NFC-e digital signature (RSA-SHA1)
XML Parsingfast-xml-parserSEFAZ response parsing
RuntimeBunPackage manager, test runner, dev server
i18nnext-intlInternationalization (en + pt-BR), cookie-based
MonorepoTurborepoTask orchestration, caching, parallel builds
LinterBiomeLinting and formatting
Fiscal@finopenpos/fiscalStandalone Brazilian fiscal module

Architecture Layers

Loading diagram...

Why These Choices?

PGLite

Full PostgreSQL running as WASM inside the Node.js process. No need to install, configure or run a separate database server. Data is stored on the filesystem at apps/web/data/pglite. For production, you can migrate to real PostgreSQL without changing any queries.

tRPC v11

Provides end-to-end type safety from the database schema to the React components. No code generation, no API spec maintenance — change a procedure and TypeScript catches all consumers.

Better Auth

Simple email/password authentication with session cookies. Uses Drizzle adapter for storing sessions and users in the same PGLite database.

Bun

Used as the package manager (bun install), test runner (bun test), and dev server. Significantly faster than npm/yarn for installs and script execution.

next-intl

Cookie-based internationalization (no URL routing). Supports English and Brazilian Portuguese. Message files are .ts (not .json) for HMR support during development.

On this page