Lookout.Core 1.0.0-preview.5

This is a prerelease version of Lookout.Core.
dotnet add package Lookout.Core --version 1.0.0-preview.5
                    
NuGet\Install-Package Lookout.Core -Version 1.0.0-preview.5
                    
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="Lookout.Core" Version="1.0.0-preview.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Lookout.Core" Version="1.0.0-preview.5" />
                    
Directory.Packages.props
<PackageReference Include="Lookout.Core" />
                    
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 Lookout.Core --version 1.0.0-preview.5
                    
#r "nuget: Lookout.Core, 1.0.0-preview.5"
                    
#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 Lookout.Core@1.0.0-preview.5
                    
#: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=Lookout.Core&version=1.0.0-preview.5&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Lookout.Core&version=1.0.0-preview.5&prerelease
                    
Install as a Cake Tool

<div align="center"> <img src="assets/lookout-icon.png" alt="Lookout" width="72" />

<h1>Lookout for ASP.NET Core</h1>

<p>Zero-config dev-time diagnostics dashboard for ASP.NET Core.</p>

NuGet NuGet CI License: Apache 2.0 .NET

<p> Captures HTTP requests, EF Core queries with N+1 detection, outbound HTTP, cache hits/misses,<br/> exceptions, logs, Hangfire jobs, and <code>Lookout.Dump()</code> — all correlated per-request in a browser dashboard. </p>

<img src="assets/lookout-demo.gif" alt="Lookout dashboard demo — N+1 detection in action" width="900" /> </div>


Install

dotnet add package Lookout.AspNetCore

For Hangfire job capture:

dotnet add package Lookout.Hangfire

Quickstart

Three lines in Program.cs:

builder.Services.AddLookout();

app.UseLookout();
app.MapLookout(); // mounts the dashboard as a route on your app at /lookout

The dashboard is a route inside your existing app — same host, same port, no separate process. Run your app, then open https://localhost:{port}/lookout (where {port} is your app's port). Your first request appears the moment you hit any endpoint — no database setup, no configuration file.

Dev-only by default. Lookout throws LookoutEnvironmentException at startup if IsDevelopment() is false, unless you explicitly set AllowInProduction = true or AllowInEnvironments = ["Staging"]. There is no silent production exposure.


What it captures

Capture point What you get
HTTP Requests Method, path, status, duration, headers, user identity, body (opt-in)
EF Core Queries SQL text, parameters, duration, rows affected, stack trace to your code
N+1 Detection Flags 3+ identical-normalised queries per request with a grouped banner
Raw ADO.NET / Dapper Via SqlClientDiagnosticListener (SQL Server); de-duped against EF
Outbound HTTP All HttpClient calls via auto-registered DelegatingHandler
Memory Cache IMemoryCache get (hit/miss), set, remove — hit ratio per key
Distributed Cache IDistributedCache get/set/refresh/remove, provider tagged
Exceptions Handled and unhandled — type, message, inner exceptions, stack
Logs All ILogger output, scoped to the active request; level-filterable
Hangfire Jobs Enqueue → execution cross-linked; child EF/HTTP/cache/log captures inside jobs
Lookout.Dump() Inline object inspection from anywhere — caller file + line attached

All entries are correlated by request ID and searchable full-text (SQLite FTS5).


Screenshots

<table> <tr> <td><img src="assets/screenshots/dashboard-requests.png" alt="Request list with N+1 and signal badges" /></td> <td><img src="assets/screenshots/dashboard-n1.png" alt="Request detail with N+1 banner and EF queries" /></td> </tr> <tr> <td align="center"><em>Request list — signal badges surface db, http, cache, log, job counts</em></td> <td align="center"><em>N+1 banner — 12 identical queries grouped, stack trace to your code</em></td> </tr> </table>


Dashboard features

  • Section-per-capture navigation — dedicated list page per capture type: Requests, Queries, Exceptions, Logs, Cache, Jobs, Dump, HTTP Clients
  • Full-text searchCmd+K / Ctrl+K across all entries and tags
  • Keyboard navigationj/k to move, Enter to open, Esc to go back
  • Mini-Gantt timeline — per-request coloured bars for each capture type
  • Dark mode — system / light / dark cycle, persisted across sessions
  • Source links — stack frames open directly in VS Code or Rider
  • Tag-based filtering — click any tag chip to filter across all sections
  • "Copy as cURL" — on every request detail

Security

Lookout is built to stay safe in shared dev environments:

  • Dev-only by default — throws at startup in Production unless explicitly opted in via AllowInProduction = true
  • Loopback-only by default — warns at startup if bound to a non-loopback address; set AllowNonLoopback = true to suppress
  • CSRF protection — all mutating endpoints require a double-submit cookie (__lookout-csrf) + X-Lookout-Csrf-Token header
  • Retention bounded — 24-hour time window (configurable) + 50,000 entry cap; background pruning keeps storage in check

See the Security model docs page for the full picture.


Configuration

All options are set via AddLookout(options => { ... }). Everything has a sane default — you only touch what you need.

builder.Services.AddLookout(options =>
{
    options.RetentionWindow        = TimeSpan.FromHours(24); // default
    options.MaxEntries             = 50_000;                 // default
    options.CaptureRequestBody     = true;                   // default
    options.CaptureResponseBody    = true;                   // default
    options.Ef.N1DetectionMinOccurrences = 3;               // default

    // Allow in non-Production environments
    options.AllowInEnvironments    = ["Staging"];
});

Full reference at a-ghanem1.github.io/Lookout/docs/configuration.


Documentation

Full docs at a-ghanem1.github.io/Lookout:


Comparison

Lookout MiniProfiler.NET Aspire Dashboard
Zero-config install ❌ requires AppHost
N+1 detection
Exception + log capture partial
Cache capture
Hangfire job capture
Standalone browser dashboard in-page widget
Production observability ❌ dev-only
Last major release 2026 2022 active

Lookout is complementary to both, not a replacement. MiniProfiler's in-page widget is great for timing SQL in production pages; Aspire Dashboard is a full production observability platform. Lookout is the tool you run during development when you want to understand exactly what a single request did.


Contributing

Issues and pull requests are welcome. The v2 wishlist issue tracks planned additions — a good place to find a first contribution.

Planned community PR targets post-v1: Quartz.NET, MassTransit, Wolverine, gRPC capture, IEmailSender / MailKit.


License

Apache 2.0 — see LICENSE.

Security

Found a vulnerability? Please report it privately — see SECURITY.md. Do not open a public issue.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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 is compatible.  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 is compatible.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Lookout.Core:

Package Downloads
Lookout.Dashboard

Embedded browser dashboard for Lookout's dev-time diagnostics dashboard for ASP.NET Core. Provides the React UI served at /lookout.

Lookout.Storage.Sqlite

SQLite storage backend for Lookout's dev-time diagnostics dashboard for ASP.NET Core.

Lookout.AspNetCore

Zero-config dev-time diagnostics dashboard for ASP.NET Core. Captures HTTP requests, EF Core queries with N+1 detection, outbound HTTP, cache hits/misses, exceptions, logs, and Lookout.Dump() output — all correlated per-request in a browser dashboard.

Lookout.EntityFrameworkCore

Entity Framework Core integration for Lookout's dev-time diagnostics dashboard. Adds EF Core query capture with N+1 detection and per-query stack traces.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0-preview.5 36 5/6/2026
1.0.0-preview.4 28 5/6/2026
1.0.0-preview.3 44 5/5/2026
1.0.0-preview.2 46 5/5/2026
1.0.0-preview.1 56 5/1/2026