Structured metadata for programming languages, packaged as a typed, tree-shakeable TypeScript library.
code-languages is useful when you need a small source of truth for language names, slugs, file extensions, release metadata, websites, paradigms, and logos in developer tools, docs sites, learning platforms, or editor-like interfaces.
- TypeScript-first data model
- Zero runtime dependencies
- ESM and CommonJS builds
- Subpath imports for per-language usage
- Tree-shakeable exports
- Works in Node.js and modern bundlers
npm install code-languagesImport only the language metadata you need:
import { typescript } from "code-languages/typescript";
import { localizeLanguage } from "code-languages/i18n";
const localized = localizeLanguage(typescript, "en");
console.log(localized.name);
console.log(localized.description);
console.log(typescript.extensions);
console.log(typescript.paradigms);Import multiple languages:
import { abap } from "code-languages/abap";
import { actionscript } from "code-languages/actionscript";
import { ada } from "code-languages/ada";
import { apex } from "code-languages/apex";
import { asp } from "code-languages/asp";
import { astro } from "code-languages/astro";
import { assembly } from "code-languages/assembly";
import { awk } from "code-languages/awk";
import { bash } from "code-languages/bash";
import { batch } from "code-languages/batch";
import { c } from "code-languages/c";
import { clojure } from "code-languages/clojure";
import { cmake } from "code-languages/cmake";
import { coffeescript } from "code-languages/coffeescript";
import { cobol } from "code-languages/cobol";
import { cpp } from "code-languages/cpp";
import { csharp } from "code-languages/csharp";
import { crystal } from "code-languages/crystal";
import { css } from "code-languages/css";
import { cuda } from "code-languages/cuda";
import { d } from "code-languages/d";
import { dart } from "code-languages/dart";
import { dockerfile } from "code-languages/dockerfile";
import { elixir } from "code-languages/elixir";
import { elm } from "code-languages/elm";
import { erlang } from "code-languages/erlang";
import { fennel } from "code-languages/fennel";
import { fortran } from "code-languages/fortran";
import { fsharp } from "code-languages/fsharp";
import { git } from "code-languages/git";
import { gleam } from "code-languages/gleam";
import { gradle } from "code-languages/gradle";
import { glsl } from "code-languages/glsl";
import { graphql } from "code-languages/graphql";
import { groovy } from "code-languages/groovy";
import { haskell } from "code-languages/haskell";
import { haxe } from "code-languages/haxe";
import { hcl } from "code-languages/hcl";
import { html } from "code-languages/html";
import { ini } from "code-languages/ini";
import { javascript } from "code-languages/javascript";
import { java } from "code-languages/java";
import { julia } from "code-languages/julia";
import { kotlin } from "code-languages/kotlin";
import { less } from "code-languages/less";
import { lisp } from "code-languages/lisp";
import { lua } from "code-languages/lua";
import { makefile } from "code-languages/makefile";
import { matlab } from "code-languages/matlab";
import { markdown } from "code-languages/markdown";
import { meson } from "code-languages/meson";
import { metal } from "code-languages/metal";
import { nginx } from "code-languages/nginx";
import { nim } from "code-languages/nim";
import { nix } from "code-languages/nix";
import { ocaml } from "code-languages/ocaml";
import { objectiveC } from "code-languages/objective-c";
import { pascal } from "code-languages/pascal";
import { perl } from "code-languages/perl";
import { php } from "code-languages/php";
import { powershell } from "code-languages/powershell";
import { protobuf } from "code-languages/protobuf";
import { pug } from "code-languages/pug";
import { python } from "code-languages/python";
import { r } from "code-languages/r";
import { racket } from "code-languages/racket";
import { razor } from "code-languages/razor";
import { ruby } from "code-languages/ruby";
import { scala } from "code-languages/scala";
import { scss } from "code-languages/scss";
import { solidity } from "code-languages/solidity";
import { json } from "code-languages/json";
import { jupyterNotebook } from "code-languages/jupyter-notebook";
import { sql } from "code-languages/sql";
import { svg } from "code-languages/svg";
import { svn } from "code-languages/svn";
import { svelte } from "code-languages/svelte";
import { swift } from "code-languages/swift";
import { tcl } from "code-languages/tcl";
import { toml } from "code-languages/toml";
import { visualBasic } from "code-languages/visual-basic";
import { vue } from "code-languages/vue";
import { webassembly } from "code-languages/webassembly";
import { xaml } from "code-languages/xaml";
import { xml } from "code-languages/xml";
import { yaml } from "code-languages/yaml";
import { zig } from "code-languages/zig";
import { zsh } from "code-languages/zsh";
console.log(abap.version);
console.log(actionscript.extensions);
console.log(ada.version);
console.log(apex.extensions);
console.log(asp.extensions);
console.log(astro.version);
console.log(assembly.extensions);
console.log(awk.version);
console.log(bash.version);
console.log(batch.extensions);
console.log(c.extensions);
console.log(clojure.version);
console.log(cmake.extensions);
console.log(coffeescript.version);
console.log(cpp.i18n.en.name);
console.log(csharp.website);
console.log(crystal.version);
console.log(css.paradigms);
console.log(cuda.version);
console.log(d.version);
console.log(dockerfile.i18n.en.name);
console.log(elm.version);
console.log(erlang.version);
console.log(fennel.extensions);
console.log(fortran.extensions);
console.log(fsharp.version);
console.log(git.extensions);
console.log(gleam.version);
console.log(gradle.extensions);
console.log(glsl.extensions);
console.log(graphql.version);
console.log(groovy.version);
console.log(hcl.extensions);
console.log(haxe.version);
console.log(html.extensions);
console.log(ini.extensions);
console.log(javascript.website);
console.log(java.version);
console.log(jupyterNotebook.extensions);
console.log(julia.version);
console.log(kotlin.version);
console.log(less.extensions);
console.log(lisp.version);
console.log(lua.version);
console.log(makefile.extensions);
console.log(matlab.version);
console.log(markdown.website);
console.log(meson.extensions);
console.log(metal.version);
console.log(nginx.version);
console.log(nim.version);
console.log(nix.version);
console.log(objectiveC.version);
console.log(pascal.version);
console.log(perl.version);
console.log(php.version);
console.log(powershell.extensions);
console.log(protobuf.version);
console.log(pug.version);
console.log(python.publishedDate);
console.log(r.version);
console.log(racket.extensions);
console.log(razor.extensions);
console.log(ruby.website);
console.log(scala.version);
console.log(scss.extensions);
console.log(solidity.version);
console.log(json.i18n.en.description);
console.log(sql.i18n.en.name);
console.log(svg.extensions);
console.log(svn.extensions);
console.log(svelte.version);
console.log(swift.version);
console.log(tcl.extensions);
console.log(toml.version);
console.log(visualBasic.i18n.en.name);
console.log(vue.website);
console.log(webassembly.extensions);
console.log(xaml.extensions);
console.log(xml.extensions);
console.log(yaml.version);
console.log(zig.version);
console.log(zsh.extensions);Import from the package root when bundle size is not a concern:
import {
abap,
actionscript,
ada,
apex,
asp,
astro,
assembly,
awk,
bash,
c,
clojure,
cmake,
coffeescript,
cpp,
csharp,
crystal,
css,
cuda,
d,
detectLanguage,
detectLanguages,
dockerfile,
elixir,
elm,
erlang,
fennel,
fortran,
fsharp,
go,
gleam,
glsl,
graphql,
groovy,
haskell,
haxe,
hcl,
html,
ini,
java,
json,
jupyterNotebook,
julia,
kotlin,
less,
lisp,
lua,
makefile,
matlab,
localizeLanguage,
markdown,
meson,
metal,
nginx,
nim,
nix,
ocaml,
objectiveC,
pascal,
perl,
php,
powershell,
protobuf,
pug,
r,
racket,
razor,
ruby,
rust,
scala,
scss,
solidity,
sql,
svg,
svn,
svelte,
swift,
tcl,
toml,
typescript,
visualBasic,
vue,
webassembly,
xaml,
xml,
yaml,
zig,
zsh,
} from "code-languages";
console.log(localizeLanguage(abap).description);
console.log(localizeLanguage(actionscript, "es").description);
console.log(localizeLanguage(ada, "es").description);
console.log(localizeLanguage(apex, "es").description);
console.log(localizeLanguage(asp, "es").description);
console.log(localizeLanguage(astro, "es").description);
console.log(localizeLanguage(assembly).description);
console.log(localizeLanguage(awk, "es").description);
console.log(detectLanguage("src/index.ts")?.slug);
console.log(detectLanguages("include/config.h").map((language) => language.slug));
console.log(localizeLanguage(bash, "es").description);
console.log(c.version);
console.log(localizeLanguage(clojure, "es").description);
console.log(localizeLanguage(cmake).description);
console.log(localizeLanguage(coffeescript).name);
console.log(cpp.website);
console.log(localizeLanguage(csharp).description);
console.log(localizeLanguage(crystal, "es").description);
console.log(localizeLanguage(css).name);
console.log(localizeLanguage(cuda, "es").description);
console.log(localizeLanguage(d, "es").description);
console.log(dockerfile.website);
console.log(localizeLanguage(elixir, "es").description);
console.log(localizeLanguage(elm, "es").description);
console.log(localizeLanguage(erlang, "es").description);
console.log(localizeLanguage(fennel, "es").description);
console.log(localizeLanguage(fortran).description);
console.log(localizeLanguage(fsharp, "es").description);
console.log(localizeLanguage(gleam, "es").description);
console.log(localizeLanguage(glsl, "es").description);
console.log(localizeLanguage(graphql, "es").description);
console.log(localizeLanguage(groovy).description);
console.log(localizeLanguage(haskell, "es").description);
console.log(localizeLanguage(haxe, "es").description);
console.log(localizeLanguage(hcl, "es").description);
console.log(localizeLanguage(ini, "es").description);
console.log(localizeLanguage(java).name);
console.log(html.website);
console.log(localizeLanguage(julia, "es").description);
console.log(localizeLanguage(kotlin, "es-PE").description);
console.log(localizeLanguage(less, "es").name);
console.log(localizeLanguage(lisp).description);
console.log(localizeLanguage(lua, "es").description);
console.log(localizeLanguage(makefile).description);
console.log(localizeLanguage(matlab, "es").description);
console.log(markdown.extensions);
console.log(localizeLanguage(meson, "es").description);
console.log(localizeLanguage(metal).description);
console.log(localizeLanguage(nginx, "es").description);
console.log(localizeLanguage(nim, "es").description);
console.log(localizeLanguage(nix, "es").description);
console.log(localizeLanguage(ocaml, "es").description);
console.log(objectiveC.extensions);
console.log(localizeLanguage(pascal, "es").description);
console.log(localizeLanguage(perl).description);
console.log(localizeLanguage(php, "es").description);
console.log(localizeLanguage(powershell).name);
console.log(localizeLanguage(protobuf, "es").description);
console.log(localizeLanguage(pug, "es").description);
console.log(go.logo);
console.log(localizeLanguage(r, "es").description);
console.log(localizeLanguage(racket, "es").description);
console.log(localizeLanguage(razor, "es").description);
console.log(localizeLanguage(ruby, "es").description);
console.log(localizeLanguage(scala, "es").description);
console.log(localizeLanguage(scss).name);
console.log(localizeLanguage(solidity, "es").description);
console.log(json.website);
console.log(sql.extensions);
console.log(localizeLanguage(svg, "es").description);
console.log(localizeLanguage(svn, "es").description);
console.log(localizeLanguage(svelte).name);
console.log(swift.i18n.en.description);
console.log(localizeLanguage(tcl, "es").description);
console.log(localizeLanguage(toml, "es").description);
console.log(localizeLanguage(visualBasic, "es").description);
console.log(localizeLanguage(vue, "es").description);
console.log(localizeLanguage(webassembly).name);
console.log(localizeLanguage(xaml, "es").description);
console.log(localizeLanguage(xml, "es").name);
console.log(yaml.paradigms);
console.log(localizeLanguage(zig, "es").description);
console.log(zsh.version);Every language object satisfies the Language interface:
export type Locale = "en" | "es" | `en-${string}` | `es-${string}` | string;
export interface LanguageContent {
name: string;
description: string;
longDescription: string;
}
export interface Language {
slug: string;
publishedDate: string;
extensions: string[];
author: string;
website: string;
paradigms: string[];
tooling?: {
runtimes?: string[];
packageManagers?: string[];
ecosystems?: string[];
};
version: string;
logo: string;
i18n: {
en: LanguageContent;
es?: LanguageContent;
};
}Use the fluent API when you want one entry point for localization, dynamic loading, and filename detection:
import { api } from "code-languages/api";
const astro = api.language("astro").locale("es-PE").get();
const vue = await api.language("vue").locale("en-US").load();
const detected = api.detect("src/App.vue").locale("es").get();
const ambiguous = await api.detectAll("include/config.h").locale("en").load();
console.log(astro?.resolvedLocale); // "es"
console.log(vue?.slug); // "vue"
console.log(detected?.name); // "Vue"
console.log(ambiguous.map((language) => language.slug)); // ["c", "cpp"]get() reads from the bundled in-memory catalog. load() uses explicit dynamic
imports so bundlers can lazy-load individual language modules when the consumer
build supports code splitting.
Use localizeLanguage to read localized display content with English fallback:
import { json } from "code-languages/json";
import { localizeLanguage } from "code-languages/i18n";
const language = localizeLanguage(json, "es-PE");
console.log(language.name);
console.log(language.longDescription);
console.log(language.resolvedLocale); // "es"localizeLanguage resolves locales in this order:
- Exact locale, for example
es. - Base language from a regional locale, for example
es-PE->es. - English fallback, for example
fr-FR->en.
Use detectLanguage or detectLanguages to infer languages from filenames:
import { detectLanguage, detectLanguages } from "code-languages/detect";
console.log(detectLanguage("src/index.ts")?.slug); // "typescript"
console.log(detectLanguage("Dockerfile")?.slug); // "dockerfile"
console.log(detectLanguages("include/config.h").map((language) => language.slug)); // ["c", "cpp"]npm ci
npm run check
npm run buildCommon scripts:
| Script | Purpose |
|---|---|
npm run lint |
Run Biome checks |
npm run typecheck |
Run TypeScript without emitting files |
npm test |
Run Vitest |
npm run bench |
Run manual performance benchmarks |
npm run build |
Build ESM, CommonJS, and declaration files |
npm run check |
Run lint, typecheck, and tests |
npm run website:prepare |
Build the static website data, unit test summary, and benchmark summary |
npm run website:serve |
Preview the static website locally |
The static website lives in docs and is generated from the package build.
It includes a live filename detector, localized language lookup, the full language
catalog, unit test summary, and benchmark summary.
npm run website:prepare
npm run website:serveSee CONTRIBUTING.md for setup instructions, field rules, and the process for adding a new language.
MIT