About Proglangwatch

A programming language directory, inspired by DistroWatch. It brings together language history, technical features, release information and links to official sources.

Credits & maintenance

Created by
GPT6-Astra generated the initial website code and design.
Vibecoded by
Benjamin Kiefl

I enjoy exploring programming languages and keeping track of what's happening in the space. I've long wanted something like DistroWatch for programming languages. But I'm not a web developer, and I don't particularly enjoy web development, so building it never became a high enough priority. Recent LLMs made me curious enough about their capabilities to try having them implement the entire site, with my role limited to directing the initial setup, priorities and design decisions.

Content updates
GPT / Grok Bot
Hosted by
Cloudflare

Inclusion criteria

This is a curated list for programmers exploring languages, not an exhaustive inventory or a popularity index. Languages are included only if they have sustained practical use, substantial historical influence, or a distinctive technical approach backed by an accessible implementation and documentation. A new language need not already be mature to be worth examining.

One demonstration project, a package count or a project's own claim of maturity is not enough. Tiny experiments and near-duplicate dialects are generally outside the scope. Distinct dialects get separate entries where their features and ecosystems differ materially: Common Lisp, Scheme and Racket, for example. Hardware description languages are included with their own simulation, synthesis and hardware-target classifications.

Inclusion is not a production recommendation. The assessments below deliberately set a high bar and explain limitations in each profile.

Privacy & page hits

There are no advertising scripts, external fonts or visitor accounts. Search and language comparison run in your browser. Comparison selections are kept in tab-session storage and in comparison URLs for bookmarking or sharing. A manual light/dark theme choice is saved only in your browser's local storage; otherwise the site follows your system preference. This preference is not transmitted to the site. The page-hit counter stores daily totals for each language; its database does not store IP addresses, fingerprints or unique visitor IDs.

The site deliberately counts aggregate visits even when your browser sends Do Not Track (DNT) or Global Privacy Control (GPC). These totals show interest in language profiles, without building visitor profiles, tracking people across sites, or selling or sharing personal information for advertising. Excluding these visits would also leave privacy-conscious visitors out of the rankings. You do not need to change your browser’s privacy settings to have your visit counted.

Your browser uses tab-session storage to avoid counting repeat visits to the same language on the same UTC day. These local markers are not transmitted to the site. Cloudflare uses your IP address transiently to rate-limit counter requests; it is not stored in the counter database. Cloudflare receives normal request metadata and may retain operational logs under its own policies.

Page-hit counts are approximate, not counts of unique visitors. Automated traffic and repeat visits across sessions can affect them. If the counter is unavailable, language profiles remain accessible.

Filter definitions

Filters describe documented features and common implementations. Family, execution and typing match any selected value within their category. Uses match any by default, with an option to require all. Selected platforms and features must all match. Different categories are combined with AND. Specialized platform tooling and partial feature support have separate opt-ins.

Family / tradition
Broad, overlapping groupings for exploration, not a formal ancestry tree. C-style describes a syntactic tradition; Functional / ML / lazy groups related functional traditions without claiming that all descend from ML. ECMAScript identifies the JavaScript family; Erlang / BEAM identifies that runtime tradition. Individual influence links provide more precise relationships.
Suited for
Documented applications or usable toolchains, not a recommendation for every project or a benchmark. A missing tag means this catalogue does not establish that use, not that it is impossible. Games includes scripting as well as engines; high-performance graphics concerns native rendering and GPU tooling. HPC concerns high-performance numerical toolchains; data / scientific computing also includes higher-level analysis. Embedded devices may run an OS; bare metal is a separate platform target.
Platforms
Execution targets, not the machine on which an editor runs. General toolchains cover ordinary native builds or standard runtime deployments. Specialized tooling covers additional SDK integration, embedding, WebAssembly builds or constrained-device workflows. Enable that option to include those targets. Browser means executing code in a browser; Android and iOS mean native-app integration, not merely visiting a website. These are editorial groupings, not vendor support tiers or a promise that every library works. FPGA and ASIC denote hardware targets, not the OS running the simulator. CPU architectures, OS versions and SDK restrictions are described in profiles and their linked documentation. Unlisted targets are not assessed.
Browser execution
With Browser selected, Any includes all documented browser routes. JavaScript includes languages compiled to JavaScript; WebAssembly includes compiled applications and interpreters running inside WebAssembly. A language can support both. Specialized-toolchain requirements still apply. These labels do not imply direct DOM access, equal download sizes, or compatibility with every library.
Native cross-compilation
Producing native code for a different OS or CPU from the build host. Established toolchains means a documented, conventional cross-build route, still subject to SDK and dependency requirements. Restricted / involved means tighter host–target limits or substantial toolchain setup. Not the usual deployment model covers languages normally deployed as source or bytecode with a runtime. It does not rule out alternative native compilers or specialized build systems. Hardware synthesis is classified separately and is not counted as native cross-compilation. Portable bytecode alone does not count as native cross-compilation.
Maturity
Established requires a stable language and mainstream implementation, sustained production adoption across independent organizations, and dependable tooling in its established domains. Stable niche describes stable, long-lived implementations with a smaller adoption base. Maturing means usable tooling whose stability, adoption or supporting infrastructure still falls short. Experimental covers research-oriented or substantially unsettled designs. Not assessed means evidence is insufficient.
Stability and version numbers
Pre-1.0 languages or mainstream implementations cannot qualify as Established or Stable niche here. Production users do not override that restriction. Reaching 1.0 is necessary for projects following that release model, but is not sufficient evidence of maturity. A mature language introducing a new major version, edition or optional backend is different: the assessment covers the stable language and mainstream toolchain, with migration risks described separately. Standardized languages and date-based releases are judged by an actual stable specification and implementation, not an invented 1.0 milestone. A new experimental compiler or a pre-1.0 library does not reset the maturity of the entire language.
Ecosystem breadth
Broad requires substantial maintained libraries, integration tooling and sustained independent industrial adoption across several application areas. A long package list, one successful product, many compilation targets or access to another language's libraries is not enough. Focused can mean excellent, industry-grade depth in particular domains. Limited means relatively little maintained independent library and tooling coverage. Established plus Broad is intentionally selective; neither age nor a project's marketing earns those labels. These are reasoned editorial assessments, not numerical scores or measured market shares.
Project health & support
Dated descriptions of governance, institutional backing, maintenance policies and implementation activity. Foundation membership and corporate use are evidence of support, not guarantees of future maintenance. Language, compiler, framework and package lifecycles can differ.
Execution
AOT compiles before execution; JIT compiles during execution; bytecode VM describes execution through a virtual machine; transpiled means translated to another source language; interpreted means evaluation by an interpreter. Simulation and synthesis describe hardware-language workflows, not ordinary native software compilation. These are not mutually exclusive. Profiles explain which implementations provide them.
Typing
Static, dynamic and gradual refer to when and how types are checked. Type inference, structural typing and optional annotations are separate ideas; the profile notes provide context.
Block structure
Significant indentation defines blocks from whitespace. Layout supports indentation with an explicit alternative. Explicit delimiters include braces or keywords such as do/end.
Namespaced modules
Language-level namespaces or modules with qualified access. Table-based conventions, such as Lua modules, count as partial support.
Lexical closures
Functions that can capture their lexical environment. Restrictions on lambda bodies or captured values are noted in the profile.
Syntactic macros
Macros that operate on language syntax rather than just replacing text. A C-style preprocessor does not meet this definition. Implementation extensions count as partial. The broader Macro system row in profiles and comparisons describes textual preprocessors, syntax macros and related facilities explicitly. “No macro system” does not mean no compile-time programming; templates, generics and compile-time evaluation are separate capabilities. External code generators are not treated as built-in macros.
Pattern matching
Structural matching and destructuring supported by the language. Ordinary switch statements and string-pattern libraries do not qualify.
Functional paradigm
A broad classification of support for functional programming. Refer to the closure and pattern-matching fields for concrete capabilities.
Origin and influences
The catalogue normally uses first public appearance. Some origins are gradual; profile notes distinguish development and announcement dates. Reverse influence links are derived from the recorded relationships and cover only this catalogue.
Activity and releases
Activity describes the language or representative project, not every implementation. A settled standard is not automatically abandoned. Each tracked release identifies its artifact; it may be a feature series or standard rather than the newest patch. Dates not verified from a source are explicitly marked. Development snapshots are not presented as stable releases.