diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props
index a80716b1cc..54640b774a 100644
--- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props
+++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props
@@ -94,7 +94,6 @@
-
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj
index 6806f34332..5a0b38d0c4 100644
--- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj
+++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj
@@ -68,7 +68,6 @@
-
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs
index 73735fe015..4200b0e758 100644
--- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs
+++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs
@@ -5,7 +5,9 @@
//#if (signalR == true || database == "PostgreSQL" || database == "SqlServer")
using System.ClientModel.Primitives;
using Microsoft.SemanticKernel.Embeddings;
-using SmartComponents.LocalEmbeddings.SemanticKernel;
+//#endif
+//#if (database == "PostgreSQL")
+using Npgsql;
//#endif
//#if (database == "Sqlite")
using Microsoft.Data.Sqlite;
@@ -277,6 +279,7 @@ void AddDbContext(DbContextOptionsBuilder options)
});
//#elif (database == "PostgreSQL")
var dataSourceBuilder = new Npgsql.NpgsqlDataSourceBuilder(configuration.GetRequiredConnectionString("postgresdb"));
+ dataSourceBuilder.UseVector();
dataSourceBuilder.EnableDynamicJson();
options.UseNpgsql(dataSourceBuilder.Build(), dbOptions =>
{
@@ -498,14 +501,6 @@ void AddDbContext(DbContextOptionsBuilder options)
.UseOpenTelemetry();
// .UseDistributedCache()
}
- else
- {
- services.AddEmbeddingGenerator(sp => new LocalTextEmbeddingGenerationService()
- .AsEmbeddingGenerator())
- .UseLogging()
- .UseOpenTelemetry();
- // .UseDistributedCache()
- }
//#endif
builder.Services.AddHangfire(configuration =>
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json
index e1f1e19b71..d89c14fe96 100644
--- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json
+++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json
@@ -64,7 +64,8 @@
},
"HuggingFace": {
"EmbeddingApiKey": null,
- "EmbeddingEndpoint": null
+ "EmbeddingEndpoint": "http://localhost:7000",
+ "EmbeddingModel__Comment": "Run locally using `docker run -d --restart unless-stopped --name tei-embedding -p 7000:80 -v tei_data:/data ghcr.io/huggingface/text-embeddings-inference:cpu-1.8 --model-id BAAI/bge-small-en-v1.5`"
}
},
//#endif
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Realms/README.md b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Realms/README.md
new file mode 100644
index 0000000000..cdb64eb6cc
--- /dev/null
+++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.AppHost/Realms/README.md
@@ -0,0 +1,29 @@
+# Keycloak Realm Configuration
+
+## Overview
+
+This directory contains the Keycloak realm configuration file (`dev-realm.json`) used by the Boilerplate. Keycloak is an **optional** open-source identity and access management solution that provides enterprise-grade authentication and authorization features.
+
+## What is Keycloak?
+
+Keycloak is a free, open-source identity server that provides:
+
+- **Centralized User Management**: Manage users, credentials, roles, and groups from a single location
+- **Single Sign-On (SSO)**: Allow users to authenticate once and access multiple applications
+- **Identity Brokering**: Integrate with external identity providers (LDAP, Active Directory, etc.)
+- **Fine-Grained Authorization**: Define and enforce complex access control policies
+- **Standards-Based**: Supports OpenID Connect, OAuth 2.0, and SAML 2.0 protocols
+
+## Keycloak in .NET Aspire
+
+When you run the Boilerplate project with .NET Aspire enabled (default configuration), Keycloak is automatically started as a containerized service. This provides a complete identity server for development and testing without any manual setup.
+
+The Keycloak container is configured in `Program.cs`:
+
+```csharp
+var keycloak = builder.AddKeycloak("keycloak", 8080)
+ .WithDataVolume()
+ .WithRealmImport("./Realms");
+```
+
+For more information, checkout .docs/07- ASP.NET Core Identity - Authentication & Authorization.md
\ No newline at end of file
diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json
index 375bf154e0..f84cabd261 100644
--- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json
+++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json
@@ -54,7 +54,7 @@
},
"HuggingFace": {
"EmbeddingApiKey": null,
- "EmbeddingEndpoint": null
+ "EmbeddingEndpoint": "http://localhost:7000"
}
},
"Email": {