PHPackages                             alto/language - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. alto/language

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

alto/language
=============

Alto PHP library for programming language identification: extensions, aliases, markers, indentations

v1.0.0(3mo ago)00MITPHPPHP &gt;=8.4CI passing

Since Feb 22Pushed 3mo agoCompare

[ Source](https://github.com/PhpAlto/language)[ Packagist](https://packagist.org/packages/alto/language)[ GitHub Sponsors](https://github.com/smnandre)[ RSS](/packages/alto-language/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

Alto Code Language
==================

[](#alto-code-language)

A lightweight PHP library providing structured metadata for **62 programming languages** — extensions, aliases, filenames, syntax markers, and more.

Zero dependencies. 100% test coverage. PHP 8.4+.

Installation
------------

[](#installation)

```
composer require alto/language
```

Quick Start
-----------

[](#quick-start)

```
use Alto\Language\Languages;

// Lookup by slug
$php = Languages::get('php');
$php->name;       // "PHP"
$php->extensions; // [".php", ".phtml", ".php3", …]
$php->type;       // LanguageType::Programming

// Lookup by file extension
Languages::fromExtension('.ts');       // → typescript
Languages::fromExtension('rs');        // → rust (dot is optional)

// Lookup by alias
Languages::fromAlias('py');            // → python
Languages::fromAlias('jsx');           // → javascript

// Lookup by filename
Languages::fromFilename('Dockerfile'); // → dockerfile
Languages::fromFilename('Makefile');   // → makefile
Languages::fromFilename('.gitignore'); // → ignore

// Compound extension fallback
Languages::fromFilename('phpunit.xml.dist'); // → xml

// Resolve from any identifier (slug → alias → extension → filename)
Languages::resolve('typescript');      // by slug
Languages::resolve('ts');             // by alias
Languages::resolve('.tsx');           // by extension
Languages::resolve('Makefile');       // by filename
```

API
---

[](#api)

### Static Facade (`Languages`)

[](#static-facade-languages)

MethodReturnsDescription`Languages::get($slug)``?Language`Lookup by slug`Languages::fromExtension($ext)``?Language`Lookup by file extension`Languages::fromAlias($alias)``?Language`Lookup by alias`Languages::fromFilename($name)``?Language`Lookup by exact filename or extension`Languages::resolve($identifier)``?Language`Try all lookup methods in order`Languages::all()``Language[]`All registered languages`Languages::ofType($type)``Language[]`Filter by `LanguageType``Languages::children($slug)``Language[]`Languages whose parent is the given slug`Languages::conflicts()``array`Extension/alias/filename collisions### Injectable Registry (`LanguageRegistry`)

[](#injectable-registry-languageregistry)

All facade methods delegate to `LanguageRegistry`, which can be injected directly:

```
use Alto\Language\LanguageRegistry;

$registry = new LanguageRegistry();
$python = $registry->get('python');
```

### Language Object

[](#language-object)

Each `Language` is an immutable value object:

```
$lang = Languages::get('typescript');

$lang->name;       // "TypeScript"
$lang->slug;       // "typescript"
$lang->type;       // LanguageType::Programming
$lang->extensions; // [".ts", ".tsx", ".mts", ".cts"]
$lang->aliases;    // ["ts"]
$lang->filenames;  // []
$lang->year;       // 2012
$lang->parent;     // "javascript"
$lang->markers;    // CodeMarkers instance
```

Languages are JSON-serializable:

```
json_encode(Languages::get('go'));
```

### Code Markers

[](#code-markers)

Syntax fingerprints attached to each language:

```
$markers = Languages::get('php')->markers;

$markers->lineComments;     // ["//", "#"]
$markers->blockComments;    // [["/*", "*/"]]
$markers->docComment;       // ["/**", "*/"]
$markers->stringDelimiters; // ["\"", "'"]
$markers->heredoc;          // true
$markers->shebang;          // "#!/usr/bin/env php"
$markers->openingTag;       // "
