• Stars
    star
    306
  • Rank 131,220 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 9 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Microsoft Application Insights SDK for Node.js

Application Insights for Node.js

npm version

Application Insights SDK monitors your backend services and components after you deploy them to help you discover and rapidly diagnose performance and other issues. Add this SDK to your Node.js services to include deep info about Node.js processes and their external dependencies such as database and cache services. You can use this SDK for your Node.js services hosted anywhere: your datacenter, Azure VMs and Web Apps, and even other public clouds. This solution is based on OpenTelemetry, to learn more about OpenTelemetry concepts, see the OpenTelemetry overview or OpenTelemetry FAQ.

Supported Node.js versions

Important: The Azure Monitor OpenTelemetry-based Offerings for Node.js applications do not support older versions of Node that were supported by Application Insights 2.X SDK. If you rely on this support, please continue to use version 2.X.

We support the versions of Node.js that are supported by OpenTelemetry.

Limitations of Application Insights 3.X SDK

Consider whether this version is right for you. It enables distributed tracing, metrics, logs and excludes:

  • Autopopulation of Cloud Role Name and Cloud Role Instance in Azure environments
  • Autopopulation of User ID and Authenticated User ID when you use the Application Insights JavaScript SDK
  • Autopopulation of User IP (to determine location attributes)
  • Ability to override Operation Name
  • Ability to manually set User ID or Authenticated User ID
  • Propagating Operation Name to Dependency Telemetry

Warning: This SDK only works for Node.js environments. Use the Application Insights JavaScript SDK for web and browser scenarios.

To determine if this version of Application Insights is right for you, review the Application Insights 2.X SDK migration guide.

Prerequisites

Get started

Important: On March 31st, 2025, support for instrumentation key ingestion will end. Instrumentation key ingestion will continue to work, but we’ll no longer provide updates or support for the feature. Transition to connection strings to take advantage of new capabilities.

  1. Create an Application Insights resource in Azure by following these instructions.
  2. Grab the Connection String from the resource you created in step 1. Later, you'll either add it to your app's environment variables or use it directly in your scripts.
  3. Add the Application Insights Node.js SDK to your app's dependencies and package.json:
    npm install --save applicationinsights

    Note: If you're using TypeScript, please install @types/node package to prevent build issues, this npm package contains built-in typings.

  4. As early as possible in your app's code, load the Application Insights package:
    let appInsights = require('applicationinsights');
  5. Configure the local SDK by calling appInsights.setup('YOUR_CONNECTION_STRING');, using the connection string you grabbed in step 2. Or put it in the APPLICATIONINSIGHTS_CONNECTION_STRING environment variable and call appInsights.setup() without parameters.

    For more configuration options see below.

  6. Finally, start automatically collecting and sending data by calling appInsights.start();.
  • If the connection string is set in the environment variable APPLICATIONINSIGHTS_CONNECTION_STRING, .setup() can be called with no arguments. This makes it easy to use different connection strings for different environments.

Load the Application Insights library (i.e. require("applicationinsights")) as early as possible in your scripts, before loading other packages. This is needed so that the Application Insights library can prepare later packages for tracking. If you encounter conflicts with other libraries doing similar preparation, try loading the Application Insights library after those.

Configuration

The appInsights object provides a number of methods to setup SDK behavior. They are listed in the following snippet with their default values.

let appInsights = require("applicationinsights");
appInsights.setup("<YOUR_CONNECTION_STRING>")
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(true, true)
    .setAutoCollectExceptions(true)
    .setAutoCollectDependencies(true)
    .setAutoCollectConsole(true, false)
    .setAutoCollectPreAggregatedMetrics(true)
    .setSendLiveMetrics(false)
    .setInternalLogging(false, true)
    .enableWebInstrumentation(false)
    .start();

Please review their descriptions in your IDE's built-in type hinting, or applicationinsights.ts for detailed information on what these control, and optional secondary arguments.

Note that by default setAutoCollectConsole is configured to exclude calls to console.log (and other console methods). By default, only calls to supported third-party loggers (e.g. winston, bunyan) will be collected. You can change this behavior to include calls to console methods by using setAutoCollectConsole(true, true).

Note that by default enableWebInstrumentation will use the connection string for SDK initialization. If you want to use a different one, you can set it as enableWebInstrumentation(true, "your-connection-string").

The TelemetryClient object contains a config property with many optional settings. These can be set as follows:

client.config.PROPERTYNAME = VALUE;

These properties are client specific, so you can configure appInsights.defaultClient separately from clients created with new appInsights.TelemetryClient().

Property Description
proxyHttpUrl A proxy server for SDK HTTP traffic (Optional, Default pulled from http_proxy environment variable)
proxyHttpsUrl A proxy server for SDK HTTPS traffic (Optional, Default pulled from https_proxy environment variable)
maxBatchIntervalMs The maximum amount of time to wait to for a payload to reach maxBatchSize (Default 15000)
samplingPercentage The percentage of telemetry items tracked that should be transmitted (Default 100)
enableAutoCollectExternalLoggers Sets the state of console. If true logger activity will be sent to Application Insights
enableAutoCollectConsole Sets the state of logger tracking (enabled by default for third-party loggers only). If true, logger auto collection will include console.log calls (default false)
enableAutoCollectExceptions Sets the state of exception tracking (enabled by default). If true uncaught exceptions will be sent to Application Insights
enableAutoCollectPerformance Sets the state of performance tracking (enabled by default). If true performance counters will be collected every second and sent to Application Insights
enableAutoCollectPreAggregatedMetrics Sets the state of pre aggregated metrics tracking (enabled by default). If true pre aggregated metrics will be collected every minute and sent to Application Insights
enableAutoCollectRequests Sets the state of request tracking (enabled by default). If true requests will be sent to Application Insights
enableAutoCollectDependencies Sets the state of dependency tracking (enabled by default). If true dependencies will be sent to Application Insights
enableUseDiskRetryCaching If true events that occurred while client is offline will be cached on disk
enableInternalDebugLogging Enables debug and warning logging for AppInsights itself. If true, enables debug logging
enableInternalWarningLogging Enables debug and warning logging for AppInsights itself. If true, enables warning logging
enableSendLiveMetrics Enables communication with Application Insights Live Metrics. If true, enables communication with the live metrics service
noDiagnosticChannel In order to track context across asynchronous calls, some changes are required in third party libraries such as mongodb and redis. By default ApplicationInsights will use diagnostic-channel-publishers to monkey-patch some of these libraries. This property is to disable the feature. Note that by setting this flag, events may no longer be correctly associated with the right operation.
noPatchModules Disable individual monkey-patches. Set noPatchModules to a comma separated list of packages to disable. e.g. "noPatchModules": "console,redis" to avoid patching the console and redis packages. The following modules are available: azuresdk, bunyan, console, mongodb, mongodb-core, mysql, redis, winston, pg, and pg-pool. Visit the diagnostic-channel-publishers' README for information about exactly which versions of these packages are patched.
aadTokenCredential Azure Credential instance to be used to authenticate the App. AAD Identity Credential Classes
enableWebInstrumentation Sets the state of automatic web Instrumentation (Optional, disabled by default). If true, web instrumentation will be enabled on valid node server http response with the connection string used for SDK initialization
webInstrumentationConnectionString Sets connection string used for web Instrumentation (Optional, Default undefined)
webInstrumentationSrc Sets web Instrumentation CDN url (Optional). see more details at ApplicationInsights JavaScript SDK

All these properties except aadTokenCredential could be configured using configuration file applicationinsights.json located under root folder of applicationinsights package installation folder, Ex: node_modules/applicationinsights. These configuration values will be applied to all TelemetryClients created in the SDK.

{
    "samplingPercentage": 80,
    "enableAutoCollectExternalLoggers": true,
    "enableAutoCollectExceptions": true,
    "enableSendLiveMetrics": true,
    ...
}
  

Custom JSON file could be provided using APPLICATIONINSIGHTS_CONFIGURATION_FILE environment variable.

process.env.APPLICATIONINSIGHTS_CONFIGURATION_FILE = "C:/applicationinsights/config/customConfig.json"

// Application Insights SDK setup....

Alternatively, instead of using a configuration file, you can specify the entire content of the JSON configuration via the environment variable APPLICATIONINSIGHTS_CONFIGURATION_CONTENT.

Sampling

By default, the SDK will send all collected data to the Application Insights service. If you collect a lot of data, you might want to enable sampling to reduce the amount of data sent. Set the samplingPercentage field on the Config object of a Client to accomplish this. Setting samplingPercentage to 100 (the default) means all data will be sent, and 0 means nothing will be sent.

If you are using automatic correlation, all data associated with a single request will be included or excluded as a unit.

Add code such as the following to enable sampling:

const appInsights = require("applicationinsights");
appInsights.setup("<YOUR_CONNECTION_STRING>");
appInsights.defaultClient.config.samplingPercentage = 33; // 33% of all telemetry will be sent to Application Insights
appInsights.start();

Automatic web Instrumentation

For node server with configuration enableWebInstrumentation set to true or environment variable APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_ENABLED = true, web Instrumentation will be enabled on node server response when all of the following requirements are met:

  • Response has status code 200.
  • Response method is GET.
  • Sever response has Content-Type html.
  • Server response must have both <head> and </head> Tags.
  • If response is compressed, it must have only one Content-Encoding type, and encoding type must be one of gzip, br or deflate.
  • Response does not contain current /backup web Instrumentation CDN endpoints. (current and backup Web Instrumentation CDN endpoints here)

web Instrumentation CDN endpoint can be changed by setting environment variable APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_SOURCE = "web Instrumentation CDN endpoints". web Instrumentation connection string can be changed by setting environment variable APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_CONNECTION_STRING = "web Instrumentation connection string"

Note: web Instrumentation may slow down server response time, especially when response size is large or response is compressed. For the case in which some middle layers are applied, it may result in web Instrumentation not working and original response will be returned.

Automatic third-party instrumentation

If you require further third-party instrumenatations please use the Azure Monitor OpenTelemetry Distro to take advantage of OpenTelemetry. If you are an Application Insights 2.X SDK user, a migration guide is available.

In order to track context across asynchronous calls, some changes are required in third party libraries such as mongodb and redis. By default ApplicationInsights will use the appropriate OpenTelemetry instrumentation for each library. This can be disabled by setting the APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL environment variable. Note that by setting that environment variable, events may no longer be correctly associated with the right operation. Individual instrumentations can be disabled by setting the APPLICATION_INSIGHTS_NO_PATCH_MODULES environment variable to a comma separated list of packages to disable, e.g. APPLICATION_INSIGHTS_NO_PATCH_MODULES=console,redis to avoid patching the console and redis packages.

The following modules are available: azuresdk, bunyan, console, mongodb, mongodb-core, mysql, redis, winston, pg, and pg-pool.

Automatic instrumentation for several Azure SDKs is also enabled. Javascript Azure SDKs

The bunyan, winston, and console patches will generate Application Insights Trace events based on whether setAutoCollectConsole is enabled. The rest will generate Application Insights Dependency events based on whether setAutoCollectDependencies is enabled. Make sure that applicationinsights is imported before any 3rd-party packages for them to be instrumented successfully.

Live Metrics

To enable sending live metrics of your app to Azure, use setSendLiveMetrics(true). Filtering of live metrics in the Portal is currently not supported.

Track custom telemetry

You can track any request, event, metric or exception using the Application Insights client. Examples follow:

let appInsights = require("applicationinsights");
appInsights.setup().start(); // assuming connection string is in environment variables. start() can be omitted to disable any non-custom data
let client = appInsights.defaultClient;
client.trackEvent({name: "my custom event", properties: {customProperty: "custom property value"}});
client.trackException({exception: new Error("handled exceptions can be logged with this method")});
client.trackMetric({name: "custom metric", value: 3});
client.trackTrace({message: "trace message"});
client.trackDependency({target:"http://dbname", name:"select customers proc", data:"SELECT * FROM Customers", duration:231, resultCode:0, success: true, dependencyTypeName: "ZSQL"});
client.trackRequest({name:"GET /customers", url:"http://myserver/customers", duration:309, resultCode:200, success:true});
 
let http = require("http");
http.createServer( (req, res) => {
  client.trackNodeHttpRequest({request: req, response: res}); // Place at the beginning of your request handler
});

Note that custom properties are converted to their string representation before being sent, see Using properties for more information.

An example utility using trackMetric to measure how long event loop scheduling takes:

function startMeasuringEventLoop() {
  var startTime = process.hrtime();
  var sampleSum = 0;
  var sampleCount = 0;

  // Measure event loop scheduling delay
  setInterval(() => {
    var elapsed = process.hrtime(startTime);
    startTime = process.hrtime();
    sampleSum += elapsed[0] * 1e9 + elapsed[1];
    sampleCount++;
  }, 0);

  // Report custom metric every second
  setInterval(() => {
    var samples = sampleSum;
    var count = sampleCount;
    sampleSum = 0;
    sampleCount = 0;

    if (count > 0) {
      var avgNs = samples / count;
      var avgMs = Math.round(avgNs / 1e6);
      client.trackMetric({name: "Event Loop Delay", value: avgMs});
    }
  }, 1000);
}

Self-diagnostics

"Self-diagnostics" refers to internal logging from Application Insights Node.js SDK.

This functionality can be helpful for spotting and diagnosing issues with Application Insights itself.

By default, Application Insights Node.js SDK logs at warning level to console, following code demonstrate how to enable debug logging as well and generate telemetry for internal logs:

let appInsights = require("applicationinsights");
appInsights.setup("<YOUR_CONNECTION_STRING>")
    .setInternalLogging(true, true) // Enable both debug and warning logging
    .setAutoCollectConsole(true, true) // Generate Trace telemetry for winston/bunyan and console logs
    .start();

Debug Logs could be enabled as well using APPLICATION_INSIGHTS_ENABLE_DEBUG_LOGS environment variable, and APPLICATION_INSIGHTS_DISABLE_WARNING_LOGS environment variable to disable warnings. Logs could be put into local file using APPLICATIONINSIGHTS_LOG_DESTINATION environment variable, supported values are file and file+console, a file named applicationinsights.log will be generated on tmp folder by default, including all logs, /tmp for *nix and USERDIR/AppData/Local/Temp for Windows. Log directory could be configured using APPLICATIONINSIGHTS_LOGDIR environment variable.

process.env.APPLICATIONINSIGHTS_LOG_DESTINATION = "file";
process.env.APPLICATIONINSIGHTS_LOGDIR = "C:/applicationinsights/logs"

// Application Insights SDK setup....

ApplicationInsights 3.X SDK Unsupported Properties

Application Insights 3.X SDK will provide support path for customers who only require basic instrumentation as opposed to migrating to Azure Monitor OpenTelemetry. If unsupported methods are called, they are not breaking and your application will still run. Calling these unsupported methods will throw a warning that the method is not supported.

The following methods are called after using the below method.

let applicationinsights = require("applicationinsights");
appinsights.setup("<YOUR_CONNECTION_STRING>").start();

And invoked via appInsights.<METHOD_NAME>

Property Support Status
setDistributedTracingMode AI only tracing mode is no longer supported. Migrate to using W3C_AND_AI tracing mode.
setAutoCollectHeartbeat Heartbeat is not supported in either Azure Monitor OpenTelemetry or the Application Insights 3.X SDK.
setAutoDependencyCorrelation Turning off autoDependencyCorrelation is not supported by either Azure Monitor OpenTelemetry or the Application Insights 3.X SDK.
setUseDiskRetryCaching While enabling/disabling offline storage is supported, setting the resend interval or the maxBytesOnDisk values are not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
setAutoCollectIncomingRequestAzureFunctions Auto collection of Azure Functions is not supported by the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.

The following configurations are set using either environment variables, setting them in the applicationinsights.json file or by calling appInsights.defaultClient.config.<CONFIG_SETTING_VALUE>;.

Property Support Status
instrumentationKey & endpointUrl Not supported by the Application Insights 3.X SDK or Azure Monitor OpenTelemetry. Please migrate to using the connectionString.
maxBatchSize Not supported by the Application Insights 3.X SDK but can be configured by using OpenTelemetry SpanProcessors in Azure Monitor OpenTelemetry.
disableAppInsights Not supported by the Application Insights 3.X SDK. Disabling telemetry export is possible via Azure Monitor OpenTelemetry using OpenTelemetry.
correlationIdRetryIntervalMs Not supported by either the Application Insights 3.X SDK or Azure Monitor OpenTelemetry as correlation ID is deprecated.
ignoreLegacyHeaders Legacy headers in outgoing requests are not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry. Therefore they will always be disabled.
distributedTracingMode Distributed tracing mode is always set to AI_AND_W3C. AI only tracing mode is not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
enableLoggerErrorToTrace Not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry as all errors will be logged as exceptions in both.
enableAutoCollectHeartbeat Heartbeat is not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry as it is deprecated.
enableAutoDependencyCorrelation Cannot disable dependency correlation in either the Application Insights 3.X SDK or Azure Monitor OpenTelemetry. Dependency correlation will always be enabled and therefore this setting is always true.
enableAutoCollectIncomingRequestAzureFunctions Auto collection of Azure Functions is not supported by the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
enableUseAsyncHooks Using async hooks is not supported by the Application Insights 3.X SDK or Azure Monitor OpenTelemetry as it is not supported by OpenTelemetry.
enableResendInterval Not supported by the Application Insights 3.X SDK. It is possible to configure the interval between exports via OpenTelemetry span processors, but not specifically cached events. The @azure/monitor-opentelemetry-exporter uses a resend interval of one minute.
enableMaxBytesOnDisk Not supported by the Application Insights 3.X SDK. And not supported to be changed in Azure Monitor OpenTelemetry. The @azure/monitor-opentelemetry-exporter sets this value at 50MB.
noHttpAgentKeepAlive Not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
httpAgent/httpsAgent Not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
webInstrumentationConfig Not currently supported by the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
quickPulseHost Not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
enableAutoCollectExtendedMetrics Extended/native metrics are not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
disableAllExtendedMetrics Will not have any effect as extended/native metrics are not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
extendedMetricDisablers Will not have any effect as extended/native metrics are not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.
correlationHeaderExcludedDomains Not supported in the Application Insights 3.X SDK or Azure Monitor OpenTelemetry.

The following methods are part of the TelemetryClient class. They can be called using applicationinsights.defaultClient.<METHOD_NAME>().

Property Support Status
trackPageView PageViewTelemetry requires an id and a name field now instead of only an optional name field.
track Tracking generic telemetry is not longer supported. Please use one of the other manual track methods to track a specific telemetry type.
getAuthorizationHandler Not supported in the Application Insights 3.X SDK.
addTelemetryProcessor TelemetryProcessors are not supported in the Application Insights 3.X SDK. Please migrate to Azure Monitor OpenTelemetry and use OpenTelemetry Span Processors.
clearTelemetryProcessors TelemetryProcessors are not supported in the Application Insights 3.X SDK. Please migrate to Azure Monitor OpenTelemetry and use OpenTelemetry Span Processors.
runTelemetryProcessors TelemetryProcessors are not supported in the Application Insights 3.X SDK. Please migrate to Azure Monitor OpenTelemetry and use OpenTelemetry Span Processors.
trackNodeHttpRequestSync Not supported. Please use the trackRequest method instead.
trackNodeHttpRequest Not supported. Please use the trackRequest method instead.
trackNodeHttpDependency Not supported. Please use the trackDependency method instead.

APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL environment varialbe could be used to set desired log level, supporting the following values: NONE, ERROR, WARN, INFO, DEBUG, VERBOSE and ALL.

Logs could be put into local file using APPLICATIONINSIGHTS_LOG_DESTINATION environment variable, supported values are file and file+console, a file named applicationinsights.log will be generated on tmp folder by default, including all logs, /tmp for *nix and USERDIR/AppData/Local/Temp for Windows. Log directory could be configured using APPLICATIONINSIGHTS_LOGDIR environment variable.

process.env.APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL = "VERBOSE";
process.env.APPLICATIONINSIGHTS_LOG_DESTINATION = "file";
process.env.APPLICATIONINSIGHTS_LOGDIR = "C:/applicationinsights/logs";

// Application Insights SDK setup....

Support

For help and questions about using this project, please create a Support request issue on https://github.com/microsoft/ApplicationInsights-node.js/issues.

For OpenTelemetry issues, contact the OpenTelemetry JavaScript community directly. Support Policy

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repositories using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Data Collection

As this SDK is designed to enable applications to perform data collection which is sent to the Microsoft collection endpoints the following is required to identify our privacy statement.

The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft’s Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party’s policies.

License

MIT

More Repositories

1

vscode

Visual Studio Code
TypeScript
157,226
star
2

PowerToys

Windows system utilities to maximize productivity
C#
104,001
star
3

TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
TypeScript
96,979
star
4

terminal

The new Windows Terminal and the original Windows console host, all in the same place!
C++
93,068
star
5

Web-Dev-For-Beginners

24 Lessons, 12 Weeks, Get Started as a Web Developer
JavaScript
81,438
star
6

ML-For-Beginners

12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all
HTML
66,844
star
7

playwright

Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.
TypeScript
61,636
star
8

generative-ai-for-beginners

18 Lessons, Get Started Building with Generative AI 🔗 https://microsoft.github.io/generative-ai-for-beginners/
Jupyter Notebook
42,344
star
9

monaco-editor

A browser based code editor
JavaScript
35,437
star
10

AI-For-Beginners

12 Weeks, 24 Lessons, AI for All!
Jupyter Notebook
31,046
star
11

calculator

Windows Calculator: A simple yet powerful calculator that ships with Windows
C++
27,371
star
12

DeepSpeed

DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.
Python
26,923
star
13

Data-Science-For-Beginners

10 Weeks, 20 Lessons, Data Science for All!
Jupyter Notebook
26,413
star
14

autogen

A programming framework for agentic AI. Discord: https://aka.ms/autogen-dc. Roadmap: https://aka.ms/autogen-roadmap
Jupyter Notebook
25,056
star
15

cascadia-code

This is a fun, new monospaced font that includes programming ligatures and is designed to enhance the modern look and feel of the Windows Terminal.
Python
24,118
star
16

JARVIS

JARVIS, a system to connect LLMs with ML community. Paper: https://arxiv.org/pdf/2303.17580.pdf
Python
22,801
star
17

api-guidelines

Microsoft REST API Guidelines
22,345
star
18

winget-cli

WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell modules, and a COM (Component Object Model) API (Application Programming Interface).
C++
20,495
star
19

vcpkg

C++ Library Manager for Windows, Linux, and MacOS
CMake
19,600
star
20

semantic-kernel

Integrate cutting-edge LLM technology quickly and easily into your apps
C#
17,792
star
21

fluentui

Fluent UI web represents a collection of utilities, React components, and web components for building web applications.
TypeScript
17,674
star
22

CNTK

Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit
C++
17,412
star
23

MS-DOS

The original sources of MS-DOS 1.25 and 2.0, for reference purposes
Assembly
17,220
star
24

unilm

Large-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities
Python
17,032
star
25

WSL

Issues found on WSL
PowerShell
16,562
star
26

recommenders

Best Practices on Recommendation Systems
Python
16,075
star
27

react-native-windows

A framework for building native Windows apps with React.
C++
15,939
star
28

LightGBM

A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.
C++
15,890
star
29

AirSim

Open source simulator for autonomous vehicles built on Unreal Engine / Unity, from Microsoft AI & Research
C++
15,836
star
30

IoT-For-Beginners

12 Weeks, 24 Lessons, IoT for All!
C++
14,693
star
31

Bringing-Old-Photos-Back-to-Life

Bringing Old Photo Back to Life (CVPR 2020 oral)
Python
14,132
star
32

qlib

Qlib is an AI-oriented quantitative investment platform that aims to realize the potential, empower research, and create value using AI technologies in quantitative investment, from exploring ideas to implementing productions. Qlib supports diverse machine learning modeling paradigms. including supervised learning, market dynamics modeling, and RL.
Python
14,124
star
33

dotnet

This repo is the official home of .NET on GitHub. It's a great starting point to find many .NET OSS projects from Microsoft and the community, including many that are part of the .NET Foundation.
HTML
14,026
star
34

nni

An open source AutoML toolkit for automate machine learning lifecycle, including feature engineering, neural architecture search, model compression and hyper-parameter tuning.
Python
13,084
star
35

ai-edu

AI education materials for Chinese students, teachers and IT professionals.
HTML
13,046
star
36

pyright

Static Type Checker for Python
Python
11,969
star
37

guidance

A guidance language for controlling large language models.
Jupyter Notebook
11,777
star
38

TypeScript-Node-Starter

A reference example for TypeScript and Node with a detailed README describing how to use the two together.
SCSS
11,258
star
39

Swin-Transformer

This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows".
Python
11,187
star
40

TypeScript-React-Starter

A starter template for TypeScript and React with a detailed README describing how to use the two together.
TypeScript
11,081
star
41

frontend-bootcamp

Frontend Workshop from HTML/CSS/JS to TypeScript/React/Redux
TypeScript
10,797
star
42

language-server-protocol

Defines a common protocol for language servers.
HTML
10,093
star
43

onnxruntime

ONNX Runtime: cross-platform, high performance ML inferencing and training accelerator
C++
9,837
star
44

windows-rs

Rust for Windows
Rust
9,820
star
45

wslg

Enabling the Windows Subsystem for Linux to include support for Wayland and X server related scenarios
C++
9,626
star
46

sql-server-samples

Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge
9,434
star
47

computervision-recipes

Best Practices, code samples, and documentation for Computer Vision.
Jupyter Notebook
9,264
star
48

napajs

Napa.js: a multi-threaded JavaScript runtime
C++
9,256
star
49

Windows-universal-samples

API samples for the Universal Windows Platform.
JavaScript
9,253
star
50

mimalloc

mimalloc is a compact general purpose allocator with excellent performance.
C
9,165
star
51

vscode-tips-and-tricks

Collection of helpful tips and tricks for VS Code.
9,038
star
52

fast

The adaptive interface system for modern web experiences.
TypeScript
9,006
star
53

playwright-python

Python version of the Playwright testing and automation library.
Python
8,990
star
54

STL

MSVC's implementation of the C++ Standard Library.
C++
8,978
star
55

LoRA

Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models"
Python
8,785
star
56

fluentui-emoji

A collection of familiar, friendly, and modern emoji from Microsoft
Python
8,678
star
57

react-native-code-push

React Native module for CodePush
C
8,643
star
58

reactxp

Library for cross-platform app development.
TypeScript
8,298
star
59

vscode-extension-samples

Sample code illustrating the VS Code extension API.
TypeScript
8,063
star
60

inshellisense

IDE style command line auto complete
TypeScript
8,034
star
61

reverse-proxy

A toolkit for developing high-performance HTTP reverse proxy applications.
C#
7,702
star
62

c9-python-getting-started

Sample code for Channel 9 Python for Beginners course
Jupyter Notebook
7,642
star
63

ailab

Experience, Learn and Code the latest breakthrough innovations with Microsoft AI
C#
7,623
star
64

cpprestsdk

The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
C++
7,573
star
65

WSL2-Linux-Kernel

The source for the Linux kernel used in Windows Subsystem for Linux 2 (WSL2)
C
7,527
star
66

botframework-sdk

Bot Framework provides the most comprehensive experience for building conversation applications.
JavaScript
7,334
star
67

azuredatastudio

Azure Data Studio is a data management and development tool with connectivity to popular cloud and on-premises databases. Azure Data Studio supports Windows, macOS, and Linux, with immediate capability to connect to Azure SQL and SQL Server. Browse the extension library for more database support options including MySQL, PostreSQL, and MongoDB.
TypeScript
7,182
star
68

winget-pkgs

The Microsoft community Windows Package Manager manifest repository
6,981
star
69

Windows-driver-samples

This repo contains driver samples prepared for use with Microsoft Visual Studio and the Windows Driver Kit (WDK). It contains both Universal Windows Driver and desktop-only driver samples.
C
6,603
star
70

winfile

Original Windows File Manager (winfile) with enhancements
C
6,437
star
71

nlp-recipes

Natural Language Processing Best Practices & Examples
Python
6,320
star
72

WinObjC

Objective-C for Windows
C
6,229
star
73

SandDance

Visually explore, understand, and present your data.
TypeScript
6,091
star
74

MixedRealityToolkit-Unity

This repository is for the legacy Mixed Reality Toolkit (MRTK) v2. For the latest version of the MRTK please visit https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity
C#
5,943
star
75

vscode-go

An extension for VS Code which provides support for the Go language. We have moved to https://github.com/golang/vscode-go
TypeScript
5,931
star
76

VFSForGit

Virtual File System for Git: Enable Git at Enterprise Scale
C#
5,918
star
77

microsoft-ui-xaml

Windows UI Library: the latest Windows 10 native controls and Fluent styles for your applications
5,861
star
78

GSL

Guidelines Support Library
C++
5,850
star
79

vscode-recipes

JavaScript
5,802
star
80

MMdnn

MMdnn is a set of tools to help users inter-operate among different deep learning frameworks. E.g. model conversion and visualization. Convert models between Caffe, Keras, MXNet, Tensorflow, CNTK, PyTorch Onnx and CoreML.
Python
5,780
star
81

ethr

Ethr is a Comprehensive Network Measurement Tool for TCP, UDP & ICMP.
Go
5,642
star
82

FASTER

Fast persistent recoverable log and key-value store + cache, in C# and C++.
C#
5,630
star
83

rushstack

Monorepo for tools developed by the Rush Stack community
TypeScript
5,576
star
84

fluentui-system-icons

Fluent System Icons are a collection of familiar, friendly and modern icons from Microsoft.
HTML
5,445
star
85

vscode-docs

Public documentation for Visual Studio Code
Markdown
5,443
star
86

DirectX-Graphics-Samples

This repo contains the DirectX Graphics samples that demonstrate how to build graphics intensive applications on Windows.
C++
5,440
star
87

vscode-cpptools

Official repository for the Microsoft C/C++ extension for VS Code.
TypeScript
5,339
star
88

BosqueLanguage

The Bosque programming language is an experiment in regularized design for a machine assisted rapid and reliable software development lifecycle.
TypeScript
5,282
star
89

DeepSpeedExamples

Example models using DeepSpeed
Python
5,092
star
90

promptbase

All things prompt engineering
Python
5,012
star
91

TypeScript-Handbook

Deprecated, please use the TypeScript-Website repo instead
JavaScript
4,881
star
92

Windows-classic-samples

This repo contains samples that demonstrate the API used in Windows classic desktop applications.
4,824
star
93

Detours

Detours is a software package for monitoring and instrumenting API calls on Windows. It is distributed in source code form.
C++
4,811
star
94

tsyringe

Lightweight dependency injection container for JavaScript/TypeScript
TypeScript
4,700
star
95

TaskWeaver

A code-first agent framework for seamlessly planning and executing data analytics tasks.
Python
4,679
star
96

vscode-dev-containers

NOTE: Most of the contents of this repository have been migrated to the new devcontainers GitHub org (https://github.com/devcontainers). See https://github.com/devcontainers/template-starter and https://github.com/devcontainers/feature-starter for information on creating your own!
Shell
4,665
star
97

tsdoc

A doc comment standard for TypeScript
TypeScript
4,617
star
98

FluidFramework

Library for building distributed, real-time collaborative web applications
TypeScript
4,611
star
99

SPTAG

A distributed approximate nearest neighborhood search (ANN) library which provides a high quality vector index build, search and distributed online serving toolkits for large scale vector search scenario.
C++
4,603
star
100

WPF-Samples

Repository for WPF related samples
C#
4,545
star