Free, privacy-friendly utilities in the browser — CSV, JSON, Parquet, PDF, images, and dozens of other tools. Workflows run entirely on the client so your files often never leave your device.
- Why FreeLocalConverter?
- Features
- Tech stack
- Getting started
- Scripts
- Internationalization
- Project structure
- Contributing
- Security
- License
- Local-first: Core data tools are built so processing happens in your browser when possible.
- Multilingual: UI is translated across many locales via next-intl.
- Modern stack: Next.js App Router, React 19, TypeScript, Tailwind CSS v4, and accessible UI primitives (Radix / shadcn-style components).
- Data: CSV viewer, converters (JSON, Parquet, SQL, and more), grids, and validation-style workflows.
- Documents & media: PDF, images, video/audio helpers where applicable (some use WASM, e.g. FFmpeg-related assets).
- Developer & misc: JSON/YAML tools, colors, mesh gradients, and other small utilities.
- Content: Programmatic SEO pages (guides/topics), blog, legal pages, and a contact page.
Note: Behavior can vary by tool. If a feature uploads to a server, the UI should say so explicitly.
| Area | Choices |
|---|---|
| Framework | Next.js (App Router) |
| UI | React 19, Tailwind CSS v4, Radix UI, Lucide |
| i18n | next-intl |
| Quality | Biome, TypeScript, Vitest |
- Node.js (LTS recommended)
- pnpm — version pinned via
packageManagerinpackage.json(Corepack:corepack enable)
pnpm install
pnpm devThen open the URL shown in the terminal (usually http://localhost:3000).
postinstall copies static assets required by some tools (for example FFmpeg WASM).
pnpm build
pnpm start| Command | Description |
|---|---|
pnpm dev |
Development server |
pnpm build |
Production build |
pnpm start |
Run production server |
pnpm lint / pnpm lint:fix |
Biome lint (and auto-fix) |
pnpm typecheck |
TypeScript, no emit |
pnpm check |
lint + typecheck |
pnpm test |
Vitest |
pnpm messages:sync |
Fill/update non-en locale files from messages/en.json |
pnpm validate:messages |
Full i18n parity and related checks |
pnpm validate:pseo |
Validate programmatic SEO data |
- Canonical strings:
**messages/en.json** - Other locales live in
**messages/*.json** - Supported locale codes include:
en,zh,es,pt,fr,de,nl,it,ja,tr,az,ko,ar,fa,ru,he,el(seesrc/i18n/routing.ts) - After adding or changing keys in English, run:
pnpm messages:syncsrc/app/ # App Router: pages, layouts, route handlers
src/app/api/ # API routes (e.g. contact)
src/components/ # Shared UI and layout
src/lib/ # Libraries, helpers, SEO, tool logic
src/i18n/ # Routing and i18n config
messages/ # next-intl JSON per locale
public/ # Static assets
scripts/ # Build and maintenance scripts
Contributions are welcome.
By submitting a pull request, you agree to the Contributor Copyright Assignment Agreement
in [docs/legal/CONTRIBUTOR-COPYRIGHT-ASSIGNMENT.md](./docs/legal/CONTRIBUTOR-COPYRIGHT-ASSIGNMENT.md).
If you do not agree, please do not contribute code.
- Fork the repository and create a branch from
main(or the default branch). - Make changes with clear commits.
- Run checks before opening a PR:
pnpm check
pnpm test- If you change
**messages/en.json**, run**pnpm messages:sync**and ensure**pnpm validate:messages**passes when you touch copy or locales. - Open a pull request with a short description of what changed and why.
Please keep PRs focused. Match existing patterns (TypeScript, Biome formatting, and component style).
If you discover a security issue, please do not open a public issue. Contact the maintainers privately (for example via security advisories on GitHub or the contact channel the maintainers publish for the project).
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only) — see the LICENSE file.
Built with care by contributors like you.



