diff --git a/.gitignore b/.gitignore
index 46fc4b01cd..c86cfea6c2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -171,6 +171,9 @@ PublishScripts/
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
+# except is specific places in composer-samples
+!composer-samples/csharp_dotnetcore/packages/*
+!composer-samples/javascript_nodejs/packages/*
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
diff --git a/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/MemberUpdatesBotComponent.cs b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/MemberUpdatesBotComponent.cs
new file mode 100644
index 0000000000..52323a8f7d
--- /dev/null
+++ b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/MemberUpdatesBotComponent.cs
@@ -0,0 +1,33 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+using Microsoft.Bot.Builder;
+using Microsoft.Bot.Builder.Dialogs.Declarative;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Microsoft.Bot.Components.Samples.DialogAndTriggerPackage
+{
+ ///
+ /// Definition of a that allows registration of
+ /// services, custom actions, memory scopes and adapters.
+ ///
+ /// To make your components available to the system you derive from BotComponent and register services to add functionality.
+ /// These components then are consumed in appropriate places by the systems that need them. When using Composer, Startup gets called
+ /// automatically on the components by the bot runtime, as long as the components are registered in the configuration.
+ public class MemberUpdatesBotComponent : BotComponent
+ {
+ ///
+ /// Entry point for bot components to register types in resource explorer, consume configuration and register services in the
+ /// services collection.
+ ///
+ /// Services collection to register dependency injection.
+ /// Configuration for the bot component.
+ public override void ConfigureServices(IServiceCollection services, IConfiguration configuration)
+ {
+ // Anything that could be done in Startup.ConfigureServices can be done here.
+ // In this case, the OnMembersAdded and OnMembersRemoved needs to be added as a new DeclarativeTypes.
+ services.AddSingleton(sp => new DeclarativeType(OnMembersAdded.Kind));
+ }
+ }
+}
diff --git a/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Microsoft.Bot.Components.Samples.DialogAndTriggerPackage.csproj b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Microsoft.Bot.Components.Samples.DialogAndTriggerPackage.csproj
new file mode 100644
index 0000000000..3be3537503
--- /dev/null
+++ b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Microsoft.Bot.Components.Samples.DialogAndTriggerPackage.csproj
@@ -0,0 +1,24 @@
+
+
+
+ Library
+ netcoreapp3.1
+ Microsoft.Bot.Components.Samples.DialogAndTriggerPackage
+ This library implements .NET support for a custom trigger and an Adaptive dialog.
+ This library implements .NET support for a custom trigger (OnMembersAdded) and an Adaptive dialog (WelcomeDialog).
+ content
+ msbot-component;msbot-content;msbot-trigger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/README.md b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/README.md
new file mode 100644
index 0000000000..ca2598cda8
--- /dev/null
+++ b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/README.md
@@ -0,0 +1,13 @@
+# Microsoft.Bot.Components.Samples.DialogAndTriggerPackage
+
+This sample package contains a dialog and supporting declarative assets for greeting new and returning users, as well as a custom trigger that fires when new members join the conversation.
+
+## Getting started
+
+* Published it to a NuGet feed. For testing purposes, this is easiest when done to a [local feed](https://docs.microsoft.com/nuget/hosting-packages/local-feeds). After setting up the local feed, add it to the Package Manager in Composer so that your local packages can be installed in a bot.
+
+* Once you've installed the package in Composer, you can use it in your bot.
+
+## Feedback and issues
+
+If you encounter any issues with this package, or would like to share any feedback please open an Issue in our [GitHub repository](https://github.com/microsoft/botframework-components/issues/new/choose).
\ No newline at end of file
diff --git a/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Schemas/TriggerConditions/Microsoft.OnMembersAdded.schema b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Schemas/TriggerConditions/Microsoft.OnMembersAdded.schema
new file mode 100644
index 0000000000..b6efd76b44
--- /dev/null
+++ b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Schemas/TriggerConditions/Microsoft.OnMembersAdded.schema
@@ -0,0 +1,9 @@
+{
+ "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
+ "$role": [ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ],
+ "title": "On Members Added",
+ "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate' and MembersAdded > 0.",
+ "type": "object",
+ "required": [
+ ]
+}
diff --git a/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Schemas/TriggerConditions/Microsoft.OnMembersAdded.uischema b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Schemas/TriggerConditions/Microsoft.OnMembersAdded.uischema
new file mode 100644
index 0000000000..6458b1f88a
--- /dev/null
+++ b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/Schemas/TriggerConditions/Microsoft.OnMembersAdded.uischema
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema",
+ "form": {
+ "order": [
+ "condition",
+ "*"
+ ],
+ "hidden": [
+ "actions"
+ ],
+ "label": "Members Added",
+ "subtitle": "Members Added ConversationUpdate activity",
+ "description": "Handle the events fired when a members have been added to a conversation.",
+ "helpLink": "https://aka.ms/bf-composer-docs-conversation-update-activity"
+ },
+ "trigger": {
+ "label": "Members Added (ConversationUpdate activity)",
+ "order": 5.2,
+ "submenu": "Activities"
+ }
+}
diff --git a/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/TriggerConditions/OnMembersAdded.cs b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/TriggerConditions/OnMembersAdded.cs
new file mode 100644
index 0000000000..b61f98dc52
--- /dev/null
+++ b/composer-samples/csharp_dotnetcore/packages/DialogAndTriggerPackage/TriggerConditions/OnMembersAdded.cs
@@ -0,0 +1,49 @@
+// Licensed under the MIT License.
+// Copyright (c) Microsoft Corporation. All rights reserved.
+
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using AdaptiveExpressions;
+using Microsoft.Bot.Builder.Dialogs;
+using Microsoft.Bot.Builder.Dialogs.Adaptive.Conditions;
+using Microsoft.Bot.Schema;
+using Newtonsoft.Json;
+
+namespace Microsoft.Bot.Components.Samples.DialogAndTriggerPackage
+{
+ ///
+ /// Actions triggered when ConversationUpdateActivity is received with Activity.MembersAdded > 0.
+ ///
+ public class OnMembersAdded : OnActivity
+ {
+ ///
+ /// Gets the unique name (class identifier) of this trigger.
+ ///
+ ///
+ /// There should be at least a .schema file of the same name. There can optionally be a
+ /// .uischema file of the same name that describes how Composer displays this trigger.
+ ///
+ [JsonProperty("$kind")]
+ public new const string Kind = "Microsoft.OnMembersAdded";
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// Optional, list of actions.
+ /// Optional, condition which needs to be met for the actions to be executed.
+ /// Optional, source file full path.
+ /// Optional, line number in source file.
+ [JsonConstructor]
+ public OnMembersAdded(List