Skip to content
PluginStats

babel-plugin-transform-typescript-metadata weekly downloads statistics

By leonardfactory · npm · Babel plugins

Babel plugin to emit decorator metadata like typescript compiler

View on npm Fresh · Oct 18, 2026

babel-plugin-transform-typescript-metadata has 2,732,047 recorded weekly downloads on npm, a decrease of 35.9% over the past 30 days, ranking #151 of 2,322 tracked listings.

Weekly downloads
2,732,047
Official API · Oct 18, 2026
7-day growth
-48.1%
-2.5M weekly downloads
30-day growth
-35.9%
-1.5M weekly downloads
90-day growth
-36.4%
-1.6M weekly downloads
Rank
#151
Among tracked npm listings

About babel-plugin-transform-typescript-metadata

babel-plugin-transform-typescript-metadata

GitHub Workflow Build Status Codecov npm

Babel plugin to emit decorator metadata like typescript compiler

Motivation

TypeScript Decorators allows advanced reflection patterns when combined with Reflect.metadata output.

Current @babel/preset-typescript implementation however just strips all types and does not emit the relative Metadata in the output code.

Since this kind of information is used extensively in libraries like Nest and TypeORM to implement advanced features like Dependency Injection, I've thought it would be awesome to be able to provide the same functionality that TypeScript compiler experimentalDecorators and emitDecoratorMetadata flags provide.

This means that code like:

import { Injectable, Inject } from 'some-di-library'; // Just an example
import { MyService } from './MyService';
import { Configuration } from './Configuration';

@Injectable()
class AnotherService {
  @Inject()
  config: Configuration;

  constructor(private service: MyService) {}
}

will be interpreted like:

import { MyService } from './MyService';
import { Configuration } from './Configuration';

@Injectable()
@Reflect.metadata('design:paramtypes', [MyService])
class AnotherService {
  @Inject()
  @Reflect.metadata('design:type', Configuration)
  config: Configuration;

  constructor(private service: MyService) {}
}
Parameter decorators

Since decorators in typescript supports also Parameters, this plugin also provides support for them, enabling the following syntax:

@Injectable()
class Some {
  constructor(@Inject() private: SomeService);
}

This will be roughly translated to:

// ...
Inject()(Some.prototype, undefined, 0);

Installation

With npm:

npm install --dev --save babel-plugin-transform-typescript-metadata

or with Yarn:

yarn add --dev babel-plugin-transform-typescript-metadata

Usage

With .babelrc:

Note: should be placed before @babel/plugin-proposal-decorators.

{
  "plugins": [
    "babel-plugin-transform-typescript-metadata",
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    ["@babel/plugin-proposal-class-properties", { "loose": true }],
  ],
  "presets": [
    "@babel/preset-typescript"
  ]
}
Usage with InversifyJS

If you are using normal dependency injection letting Inversify create your instances, you should be fine with all kind of decorators.

Instead, if you are using property injection, when the container does not create the instances, you would likely encounter errors since babel decorators are not exactly the same as TypeScript.

You can fix it by enhancing property decorators with the following function:

import getDecorators from 'inversify-inject-decorators';
// setup the container...
let { lazyInject: originalLazyInject } = getDecorators(container);

// Additional function to make properties decorators compatible with babel.
function fixPropertyDecorator<T extends Function>(decorator: T): T {
  return ((...args: any[]) =>
    (target: any, propertyName: any, ...decoratorArgs: any[]) => {
      decorator(...args)(target, propertyName, ...decoratorArgs);
      return Object.getOwnPropertyDescriptor(target, propertyName);
    }) as any;
}

export const lazyInject = fixPropertyDecorator(originalLazyInject);

Current Pitfalls

  • If you are using webpack and it complains about missing exports due to types not being removed, you can switch from import { MyType } from ... to import type { MyType } from .... See #46 for details and examples.

  • We cannot know if type annotations are just types (i.e. IMyInterface) or concrete values (like classes, etc.). In order to resolve this, we emit the following: typeof Type === 'undefined' ? Object : Type. The code has the advantage of not throwing. If you know a better way to do this, let me know!

Description from the npm listing.

  • babel
  • babel-plugin
  • babel-typescript
  • decorators
  • reflect-metadata

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

babel-plugin-transform-typescript-metadata weekly downloads on npm, last 90 days: 2,732,047 weekly downloads as of Oct 18, 2026, -36.4% over 90 days.babel-plugin-transform-typescript-meta…Weekly downloads on npm · Last 90 days2,732,047downloads / week-36.4% over 90 days2M3M4M5M6M7MJul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekobservedarchived (Internet Archive)no observationsJul 22, 2026 – Oct 18, 2026 · 89 observations · Updated Oc…pluginstats.com
babel-plugin-transform-typescript-metadata weekly downloads on npm, last 90 days: 2,732,047 weekly downloads as of Oct 18, 2026, -36.4% over 90 days.

7/30/90-day growth

babel-plugin-transform-typescript-metadata weekly downloads growth on npm: -48.1% over 7 days, -35.9% over 30 days, -36.4% over 90 days.babel-plugin-transform-typescript-meta…Weekly downloads growth on npm2,732,047downloads / week now7-day growth-2,527,822 weekly downlo…-48.1%30-day growth-1,533,225 weekly downlo…-35.9%90-day growth-1,560,499 weekly downlo…-36.4%Growth vs. nearest observation to each baseline date · Updated Oct 18, 2026pluginstats.com
babel-plugin-transform-typescript-metadata weekly downloads growth on npm: -48.1% over 7 days, -35.9% over 30 days, -36.4% over 90 days.

Ranking history

babel-plugin-transform-typescript-metadata npm ranking history: currently #151 (by weekly downloads).babel-plugin-transform-typescript-meta…npm ranking · by weekly downloads · Last 90 days#151current rank#148#149#150#151#152#153Jul 22Aug 6Aug 21Sep 5Sep 20Oct 5Oct 20rankOct 18, 2026 – Oct 20, 2026 · 3 observations · Updated Oct 18, 2026pluginstats.com
babel-plugin-transform-typescript-metadata npm ranking history: currently #151 (by weekly downloads).

Listing placement

All npm2,320 listings · 116 pages · 1,161 shown · page 8, #11 (overall #151)
All npm: every listing in weekly downloads order

Listing placement

Babel plugins252 listings · 13 pages · page 6, #10 (overall #110)
Babel plugins: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (122)
Recent weekly downloads observations for babel-plugin-transform-typescript-metadata
Date (UTC)Weekly downloadsChange vs. previous
2,732,047+324.3K
2,407,710-331.1K
2,738,784+22.9K
2,715,885-1.2M
3,933,436-1.2M
5,171,4160
5,171,416-88.5K
5,259,869-16.4K
5,276,276+10.8K
5,265,525+70.5K
5,195,043+67.2K
5,127,802+94.7K
5,033,150-1.1M
6,151,825—

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/babel-plugin-transform-typescript-metadata. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.