$ cnpm install locutus
All your standard libraries will be assimilated into our
JavaScriptTypeScript collective. Resistance is futile.
Locutus is ~500 TypeScript implementations of standard library functions from PHP, Go, Python, Ruby, C, and more. Each function is individually importable and tree-shakeable.
Most of these started as rainy Sunday afternoon puzzles. Some are genuinely useful. Some are just fun to write. All of them are a way to learn how different languages solve the same problems.
Locutus ports function behavior, not foreign runtime baggage. We reimplement standard-library semantics in TypeScript, but keep API boundaries JavaScript-native.
That means we do not recreate alien language data structures or object models in Locutus APIs (for example: Go slices/maps, Python tuples/bytes, Ruby symbols, C structs/pointers, Perl refs).
Historic exception: for PHP compatibility, plain JS objects may be treated as associative arrays when locutus.objectsAsArrays is enabled.
Example: a Go date-formatting port in Locutus should accept a JavaScript Date and return a string, not a custom Go time.Time object.
npm install locutus
Locutus uses pragmatic versioning: patch is the default even for function-level parity fixes; see
CONTRIBUTING.md#versioning for exact bump criteria.
import { sprintf } from 'locutus/php/strings/sprintf'
const effectiveness = 'futile'
console.log(sprintf('Resistance is %s', effectiveness))
// Resistance is futile
import { Contains } from 'locutus/golang/strings/Contains'
console.log(Contains('Locutus', 'cut'))
// true
For bundle-sensitive browser builds, prefer per-function deep imports over category index imports.
Good:
import { sprintf } from 'locutus/php/strings/sprintf'
Avoid in browser bundles:
import { sprintf } from 'locutus/php/strings/index'
Why:
If you are publishing your own browser bundle on top of Locutus, treat deep imports as the default.
Code shown on function pages (Module JS / Standalone JS) targets:
baseline widely available with downstreamPackage runtime targets:
engines.node >= 22dist/ CommonJS + dist/esm ESM): ES2022If your application targets older browsers, treat Locutus snippets like normal application code:
Locutus does not inject polyfills into copy-paste snippets by default.
Some guidelines and instructions can be found in CONTRIBUTING.md
Quick commands:
yarn check - format + lint + testyarn test:parity - cross-language verificationyarn test - full test suiteyarn lint - Biome checkyarn fix:biome - auto-fixMIT, except for src/php/bc/ and src/php/_helpers/_bc.js which are LGPL-2.1 (derived from PHP's bcmath/Libbcmath). See LICENSE for details.
Copyright 2013 - present © cnpmjs.org | Home |