Palmalytics.SqlServer 0.3.0-alpha

This is a prerelease version of Palmalytics.SqlServer.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Palmalytics.SqlServer --version 0.3.0-alpha
                    
NuGet\Install-Package Palmalytics.SqlServer -Version 0.3.0-alpha
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Palmalytics.SqlServer" Version="0.3.0-alpha" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Palmalytics.SqlServer" Version="0.3.0-alpha" />
                    
Directory.Packages.props
<PackageReference Include="Palmalytics.SqlServer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Palmalytics.SqlServer --version 0.3.0-alpha
                    
#r "nuget: Palmalytics.SqlServer, 0.3.0-alpha"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Palmalytics.SqlServer@0.3.0-alpha
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Palmalytics.SqlServer&version=0.3.0-alpha&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Palmalytics.SqlServer&version=0.3.0-alpha&prerelease
                    
Install as a Cake Tool

Palmalytics

Palmalytics is a self-hosted, first-party, server-side web analytics dashboard for ASP.NET Core applications. It can replace standard client-side web analytics tools like Google Analytics and Matomo. It tracks pageviews, sessions, referrals, locations, user agents, and more.

Why Server-Side Analytics?

Unlike client-side analytics, server-side analytics offers the following advantages:

  • High Performance: Minimal impact on the server side as data is saved asynchronously, and zero impact on the client side.
  • User-Friendly: No cookies, no annoying consent popups.
  • Accuracy: Not blocked by adblockers and privacy-focused browsers and extensions.
  • Data Ownership: You own your data, and it doesn’t leave your server.

The data can be stored in the same database your application already uses (e.g. SQL Server), which means you can also easily query it if you'd like.

Getting Started

  1. Add the storage-specific NuGet package from the Package Manager Console:

    PM> Install-Package Palmalytics.SqlServer -Pre
    
  2. Register services in your Startup.cs and configure the SQL Server storage:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddPalmalytics(options => {
            options.UseSqlServer(new SqlServerOptions
            {
                ConnectionString = Configuration.GetConnectionString("PalmalyticsConnection"),
                Schema = "Palmalytics"
            });
        });
    
        // ...other services
    }
    
  3. Register the middleware:

    public void Configure(IApplicationBuilder app)
    {
        app.UsePalmalytics();
    
        // ...other middleware
    }
    
  4. Navigate to https://<your-app>/palmalytics to see your dashboard.

<img src="Assets/Screenshot.webp" alt="Screenshot of the Palmalytics dashboard" />

Dashboard Authorization

By default, the dashboard is only accessible by local requests. In production, you will probably want to change this. Here are some options:

Public access

If you want to allow public access to your dashboard, just remove the default authorization rule:

services.AddPalmalytics(options =>
{
    options.DashboardOptions.Authorize = null;
    // ... other options
}

Restricted access

You can implement your own authorization rule, for example based on ASP.NET user roles:

services.AddPalmalytics(options =>
{
    options.DashboardOptions.Authorize = (context) =>
    {
        return context.User.IsInRole("Admin");
    };

    // ... other options
}

Requirements

Currently, Palmalytics requires:

  • .NET 6
  • SQL Server for storage

Future support is planned for older versions of .NET (including .NET Framework 4.x) as well as other data stores (Postgres, SQLite…).

Project Status

The project is currently in alpha release – use at your own risk.

Change log

Version 0.3.0-alpha (5 Jul 2026)

  • Automatically decode URLs
  • Updated Dapper
  • Updated public suffix list
  • Added detection of Brave browser

Version 0.2.0-alpha (12 Oct 2024)

  • Added UTM parameters stats to dashboard
  • Added 'not set' values in referrer stats

Version 0.1.0-alpha (25 Aug 2024)

  • Initial version

Licensing

Copyright 2026 Xavier Poinas

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Contributing

Contributions are welcome, whether they are bug reports, feature requests, or code contributions.

By submitting a pull request, you relinquish any rights or claims to the changes you submit to the project and transfer the copyright of those changes to the project owner.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 105 7/26/2026
1.0.0 103 7/22/2026
1.0.0-rc 97 7/8/2026
0.3.0-alpha 100 7/5/2026
0.2.0-alpha 182 10/12/2024
0.1.0-alpha 171 8/25/2024