{"_id":"unitfyi","_rev":"3-afacd48d78755c8199316e1c35120dc5","name":"unitfyi","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"unitfyi","version":"0.1.0","keywords":["unit","conversion","units","measurement","temperature","length","weight","volume","area","speed","pressure","energy","cooking","typography"],"author":{"name":"FYIPedia"},"license":"MIT","_id":"unitfyi@0.1.0","maintainers":[{"name":"dobestan","email":"me@ansuchan.com"}],"homepage":"https://unitfyi.com","bugs":{"url":"https://github.com/fyipedia/unitfyi-js/issues"},"dist":{"shasum":"4d9c84a8b171d56b1dc4125cf707ce582c609df0","tarball":"https://registry.npmjs.org/unitfyi/-/unitfyi-0.1.0.tgz","fileCount":5,"integrity":"sha512-zWvJe7snR4JqfuYyDYm+dlSFNrRMSnokxWSalmUxnycp3uNzC8y++FQZB3NWw2MCCOP+WTacAoohKF+u2Qg3RA==","signatures":[{"sig":"MEQCIBSbl0layFMxjpRVmAAlb2LRuFsln1fLknGH0orRL1QmAiAb7jv/fAH9pL0EybYewCjUulpEkeAhxR13FFxJmMQYWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66798},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c1f554d26894ea43f805af32e5f9ed12c639916d","scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dobestan","email":"me@ansuchan.com"},"repository":{"url":"git+https://github.com/fyipedia/unitfyi-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Pure TypeScript unit conversion engine — 200 units across 20 categories, temperature formulas, smart rounding. Zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0","vitest":"^3.0","typescript":"^5.7"},"_npmOperationalInternal":{"tmp":"tmp/unitfyi_0.1.0_1772678810008_0.7177375592084074","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"unitfyi","version":"0.1.1","keywords":["unit","conversion","units","measurement","temperature","length","weight","volume","area","speed","pressure","energy","cooking","typography"],"author":{"name":"FYIPedia"},"license":"MIT","_id":"unitfyi@0.1.1","maintainers":[{"name":"dobestan","email":"me@ansuchan.com"}],"homepage":"https://unitfyi.com","bugs":{"url":"https://github.com/fyipedia/unitfyi-js/issues"},"dist":{"shasum":"f10d4bb089405d66036fe4b3d8be2019e4b8d4e3","tarball":"https://registry.npmjs.org/unitfyi/-/unitfyi-0.1.1.tgz","fileCount":5,"integrity":"sha512-E4wwTcKKfp4eYMQYHfVnWDOudbg7pWBVhfxEo5QTw9WoGMoGaZQ9KdRa0pHT/C/ljmwm22iKTRCuLmkuga7weA==","signatures":[{"sig":"MEUCIQC2OHsd5I+wcAQ/l9akqqqwtwjdAuT/W8g38kaBoo+b+AIgO0OsoRw08zbKUietDep1GcPjUIxBqZ5NS+8MZ6McRec=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70057},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b4178dce6c66c5998c5ac47a305104dcea864e77","scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm --dts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"dobestan","email":"me@ansuchan.com"},"repository":{"url":"git+https://github.com/fyipedia/unitfyi-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Pure TypeScript unit conversion engine — 200 units across 20 categories, temperature formulas, smart rounding. Zero dependencies.","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0","vitest":"^3.0","typescript":"^5.7"},"_npmOperationalInternal":{"tmp":"tmp/unitfyi_0.1.1_1772728619930_0.15720606664181713","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"unitfyi","version":"0.1.2","description":"Pure TypeScript unit conversion engine — 200 units across 20 categories, temperature formulas, smart rounding. Zero dependencies.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsup src/index.ts --format esm --dts","test":"vitest run","typecheck":"tsc --noEmit"},"keywords":["unit","conversion","units","measurement","temperature","length","weight","volume","area","speed","pressure","energy","cooking","typography"],"repository":{"type":"git","url":"git+https://github.com/fyipedia/unitfyi-js.git"},"homepage":"https://unitfyi.com","license":"MIT","author":{"name":"FYIPedia"},"devDependencies":{"tsup":"^8.0","typescript":"^5.7","vitest":"^3.0"},"gitHead":"90838035d38b4eb8afcd93e9e777932123fb69dd","_id":"unitfyi@0.1.2","bugs":{"url":"https://github.com/fyipedia/unitfyi-js/issues"},"_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-153tAZouZqyM7S5HbsSzaBOxsHjy/Mhs0QInozRmtxhUXQ6r9ohDEZMQe0PIRqAJrTatnnutS3pQVhiVaa7GGQ==","shasum":"341046f407f59b6425d8deb92019bf9ee989be29","tarball":"https://registry.npmjs.org/unitfyi/-/unitfyi-0.1.2.tgz","fileCount":3,"unpackedSize":12791,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCDEIbjJjye3jfb3fLTrMtsmUiFuS88JYn7q7AFYr7ACQIgP0ckZmZcQwtB30XAE/JLxJ+7Zk3Py3FiucwVt+2ENiw="}]},"_npmUser":{"name":"dobestan","email":"me@ansuchan.com"},"directories":{},"maintainers":[{"name":"dobestan","email":"me@ansuchan.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/unitfyi_0.1.2_1774837801300_0.349472621590468"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-05T02:46:49.895Z","modified":"2026-03-30T02:30:01.575Z","0.1.0":"2026-03-05T02:46:50.153Z","0.1.1":"2026-03-05T16:37:00.088Z","0.1.2":"2026-03-30T02:30:01.444Z"},"bugs":{"url":"https://github.com/fyipedia/unitfyi-js/issues"},"author":{"name":"FYIPedia"},"license":"MIT","homepage":"https://unitfyi.com","keywords":["unit","conversion","units","measurement","temperature","length","weight","volume","area","speed","pressure","energy","cooking","typography"],"repository":{"type":"git","url":"git+https://github.com/fyipedia/unitfyi-js.git"},"description":"Pure TypeScript unit conversion engine — 200 units across 20 categories, temperature formulas, smart rounding. Zero dependencies.","maintainers":[{"name":"dobestan","email":"me@ansuchan.com"}],"readme":"# unitfyi\n\n[![npm version](https://agentgif.com/badge/npm/unitfyi/version.svg)](https://www.npmjs.com/package/unitfyi)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Zero Dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](https://www.npmjs.com/package/unitfyi)\n\nPure TypeScript unit conversion engine for developers. [Convert between 200 units](https://unitfyi.com/) across 20 measurement categories including length, weight, temperature, volume, area, speed, time, data storage, pressure, energy, frequency, force, power, angle, fuel economy, data transfer, density, torque, cooking, and typography -- all with zero dependencies.\n\n> **Try the interactive tools at [unitfyi.com](https://unitfyi.com/)** -- unit converter, conversion tables, and category explorer.\n\n<p align=\"center\">\n  <img src=\"demo.gif\" alt=\"unitfyi demo — unit conversion with precision\" width=\"800\">\n</p>\n\n## Table of Contents\n\n- [Install](#install)\n- [Quick Start](#quick-start)\n- [What You Can Do](#what-you-can-do)\n  - [Precision in Unit Conversion](#precision-in-unit-conversion)\n  - [Temperature Conversion](#temperature-conversion)\n  - [Conversion Tables](#conversion-tables)\n  - [Unit Lookup](#unit-lookup)\n- [API Reference](#api-reference)\n- [TypeScript Types](#typescript-types)\n- [Features](#features)\n- [Learn More About Units](#learn-more-about-units)\n- [Also Available for Python](#also-available-for-python)\n- [Utility FYI Family](#utility-fyi-family)\n- [License](#license)\n\n## Install\n\n```bash\nnpm install unitfyi\n```\n\nWorks in Node.js, Deno, Bun, and browsers (ESM).\n\n## Quick Start\n\n```typescript\nimport { convert, conversionTable, getCategoryUnits, getOrderedCategories } from \"unitfyi\";\n\n// Convert between any compatible units\nconst temp = convert(100, \"celsius\", \"fahrenheit\");\nconsole.log(temp.result);        // 212\nconsole.log(temp.formulaText);   // \"°F = (°C × 9/5) + 32\"\n\nconst length = convert(1, \"mile\", \"kilometer\");\nconsole.log(length.result);      // 1.6093\nconsole.log(length.fromSymbol);  // \"mi\"\nconsole.log(length.toSymbol);    // \"km\"\n\n// Generate a conversion table\nconst table = conversionTable(\"kilogram\", \"pound\");\n// [[1, 2.2046], [5, 11.0231], [10, 22.0462], ...]\n\n// Browse categories and units\nconst categories = getOrderedCategories();\nconsole.log(categories.length);  // 20\n\nconst lengthUnits = getCategoryUnits(\"length\");\nconsole.log(lengthUnits.length); // 20 (meter, km, cm, mm, ...)\n```\n\n## What You Can Do\n\n### Precision in Unit Conversion\n\nJavaScript uses IEEE 754 double-precision floats. For most unit conversions this is sufficient, but temperature and very large/small values use smart rounding to avoid floating-point artifacts like `99.99999999996`.\n\nThe engine applies magnitude-aware rounding:\n\n| Magnitude | Precision | Example |\n|-----------|-----------|---------|\n| >= 1,000 | 2 decimal places | 5,280.00 |\n| >= 1 | 4 decimal places | 1.6093 |\n| >= 0.01 | 6 decimal places | 0.453592 |\n| < 0.01 | 10 decimal places | 0.0000000001 |\n\nTemperature conversions use function-based formulas (not linear factors) to maintain exact results: `°F = (°C * 9/5) + 32`, `K = °C + 273.15`, etc.\n\nThe engine covers **20 measurement categories** with a total of **200 units**:\n\n| Category | Units | Examples |\n|----------|-------|---------|\n| **Length** | 20 | meter, kilometer, mile, foot, inch, yard, nautical mile, ... |\n| **Weight** | 15 | kilogram, pound, ounce, gram, stone, metric ton, ... |\n| **Temperature** | 4 | Celsius, Fahrenheit, Kelvin, Rankine |\n| **Volume** | 15 | liter, gallon (US/UK), cup, tablespoon, fluid ounce, ... |\n| **Area** | 10 | square meter, acre, hectare, square foot, ... |\n| **Speed** | 8 | km/h, mph, m/s, knot, Mach, speed of light, ... |\n| **Data Storage** | 16 | byte, KB, MB, GB, TB, PB, KiB, MiB, GiB, ... |\n| **Pressure** | 8 | pascal, bar, atm, psi, mmHg, torr, ... |\n| **Energy** | 10 | joule, calorie, kWh, BTU, eV, ... |\n| **Cooking** | 8 | cup, tablespoon, teaspoon, fluid ounce, ... |\n\nLearn more: [Unit Converter](https://unitfyi.com/) · [SI Base Units](https://en.wikipedia.org/wiki/International_System_of_Units) · [Category Explorer](https://unitfyi.com/category/)\n\n### Temperature Conversion\n\n```typescript\nimport { convert } from \"unitfyi\";\n\n// All temperature conversions use exact formulas (not linear approximation)\nconst c2f = convert(0, \"celsius\", \"fahrenheit\");\nconsole.log(c2f.result);        // 32\nconsole.log(c2f.formulaText);   // \"°F = (°C × 9/5) + 32\"\n\nconst f2c = convert(72, \"fahrenheit\", \"celsius\");\nconsole.log(f2c.result);        // 22.2222\n\nconst c2k = convert(-40, \"celsius\", \"kelvin\");\nconsole.log(c2k.result);        // 233.15\n\n// Rankine scale also supported\nconst f2r = convert(100, \"fahrenheit\", \"rankine\");\nconsole.log(f2r.result);        // 559.67\n```\n\nLearn more: [Temperature Converter](https://unitfyi.com/category/temperature/) · [Absolute Zero](https://en.wikipedia.org/wiki/Absolute_zero)\n\n### Conversion Tables\n\n```typescript\nimport { conversionTable } from \"unitfyi\";\n\n// Default values: [1, 5, 10, 25, 50, 100, 250, 500, 1000]\nconst table = conversionTable(\"meter\", \"foot\");\nfor (const [meters, feet] of table) {\n  console.log(`${meters} m = ${feet} ft`);\n}\n\n// Custom values\nconst custom = conversionTable(\"celsius\", \"fahrenheit\", [0, 20, 37, 100]);\n// [[0, 32], [20, 68], [37, 98.6], [100, 212]]\n```\n\nLearn more: [Conversion Tables](https://unitfyi.com/tools/table/) · [REST API Docs](https://unitfyi.com/developers/)\n\n### Unit Lookup\n\n```typescript\nimport { getUnit, getCategoryUnits, getOrderedCategories } from \"unitfyi\";\n\n// Look up a single unit\nconst meter = getUnit(\"meter\");\nconsole.log(meter?.name);         // \"Meter\"\nconsole.log(meter?.symbol);       // \"m\"\nconsole.log(meter?.category);     // \"length\"\nconsole.log(meter?.aliases);      // [\"metre\", \"meters\", \"metres\"]\n\n// List all units in a category\nconst tempUnits = getCategoryUnits(\"temperature\");\n// [{ slug: \"celsius\", name: \"Celsius\", symbol: \"°C\", ... }, ...]\n\n// Get all 20 categories sorted by display order\nconst cats = getOrderedCategories();\nfor (const cat of cats) {\n  console.log(`${cat.icon} ${cat.name}: ${cat.description}`);\n}\n```\n\nLearn more: [All Units](https://unitfyi.com/unit/) · [OpenAPI Spec](https://unitfyi.com/api/openapi.json)\n\n## API Reference\n\n### Conversion\n\n| Function | Description |\n|----------|-------------|\n| `convert(value, fromSlug, toSlug) -> ConversionResult` | Convert a value between two compatible units |\n| `conversionTable(fromSlug, toSlug, values?) -> [number, number][]` | Generate a conversion table for a unit pair |\n\n### Unit Lookup\n\n| Function | Description |\n|----------|-------------|\n| `getUnit(slug) -> UnitInfo \\| null` | Look up a unit by slug |\n| `getCategoryUnits(categorySlug) -> UnitInfo[]` | Get all units in a category |\n| `getOrderedCategories() -> CategoryDef[]` | Get all 20 categories sorted by display order |\n\n### Error Classes\n\n| Class | Description |\n|-------|-------------|\n| `UnknownUnitError` | Thrown when a unit slug is not found |\n| `IncompatibleUnitsError` | Thrown when converting between different categories |\n\n### Data Exports\n\n| Export | Description |\n|--------|-------------|\n| `UNITS` | Record of all 200 unit definitions |\n| `CATEGORIES` | Record of all 20 category definitions |\n| `FORMULAS` | Non-linear conversion formulas (temperature) |\n\n## TypeScript Types\n\n```typescript\nimport type {\n  UnitDef,\n  CategoryDef,\n  ConversionResult,\n  UnitInfo,\n  TemperatureFormula,\n} from \"unitfyi\";\n```\n\n## Features\n\n- **200 units**: Across 20 measurement categories\n- **20 categories**: Length, weight, temperature, volume, area, speed, time, data storage, pressure, energy, frequency, force, power, angle, fuel economy, data transfer, density, torque, cooking, typography\n- **Temperature formulas**: Exact function-based conversion (Celsius, Fahrenheit, Kelvin, Rankine)\n- **Smart rounding**: Magnitude-aware precision to avoid floating-point artifacts\n- **Conversion tables**: Generate value tables for any unit pair\n- **Human-readable formulas**: Each conversion includes a formula string (e.g., \"1 mi = 1.6093 km\")\n- **Unit aliases**: Search-friendly aliases (e.g., \"metre\", \"meters\", \"metres\" all find Meter)\n- **Zero dependencies**: Pure TypeScript, no runtime deps\n- **Type-safe**: Full TypeScript with strict mode\n- **Tree-shakeable**: ESM with named exports\n- **Fast**: All computations under 1ms\n\n## Learn More About Units\n\n- **Tools**: [Unit Converter](https://unitfyi.com/) · [Conversion Tables](https://unitfyi.com/tools/table/)\n- **Browse**: [Categories](https://unitfyi.com/category/) · [All Units](https://unitfyi.com/unit/)\n- **API**: [REST API Docs](https://unitfyi.com/developers/) · [OpenAPI Spec](https://unitfyi.com/api/openapi.json)\n- **Python**: [PyPI Package](https://pypi.org/project/unitfyi/)\n\n## Also Available for Python\n\n```bash\npip install unitfyi\n```\n\nSee the [Python package on PyPI](https://pypi.org/project/unitfyi/).\n\n## Utility FYI Family\n\nPart of the [FYIPedia](https://fyipedia.com) open-source developer tools ecosystem — everyday developer reference and conversion tools.\n\n| Package | PyPI | npm | Description |\n|---------|------|-----|-------------|\n| **unitfyi** | [PyPI](https://pypi.org/project/unitfyi/) | [npm](https://www.npmjs.com/package/unitfyi) | Unit conversion, 220 units -- [unitfyi.com](https://unitfyi.com/) |\n| timefyi | [PyPI](https://pypi.org/project/timefyi/) | [npm](https://www.npmjs.com/package/timefyi) | Timezone ops & business hours -- [timefyi.com](https://timefyi.com/) |\n| holidayfyi | [PyPI](https://pypi.org/project/holidayfyi/) | [npm](https://www.npmjs.com/package/holidayfyi) | Holiday dates & Easter calculation -- [holidayfyi.com](https://holidayfyi.com/) |\n| namefyi | [PyPI](https://pypi.org/project/namefyi/) | [npm](https://www.npmjs.com/package/namefyi) | Korean romanization & Five Elements -- [namefyi.com](https://namefyi.com/) |\n| distancefyi | [PyPI](https://pypi.org/project/distancefyi/) | [npm](https://www.npmjs.com/package/distancefyi) | Haversine distance & travel times -- [distancefyi.com](https://distancefyi.com/) |\n\n## Embed Widget\n\nEmbed [UnitFYI](https://unitfyi.com) widgets on any website with [unitfyi-embed](https://widget.unitfyi.com):\n\n```html\n<script src=\"https://cdn.jsdelivr.net/npm/unitfyi-embed@1/dist/embed.min.js\"></script>\n<div data-unitfyi=\"entity\" data-slug=\"example\"></div>\n```\n\nZero dependencies · Shadow DOM · 4 themes (light/dark/sepia/auto) · [Widget docs](https://widget.unitfyi.com)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}