Lookout.Storage.Sqlite 1.0.2

dotnet add package Lookout.Storage.Sqlite --version 1.0.2
                    
NuGet\Install-Package Lookout.Storage.Sqlite -Version 1.0.2
                    
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.Storage.Sqlite" Version="1.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Lookout.Storage.Sqlite" Version="1.0.2" />
                    
Directory.Packages.props
<PackageReference Include="Lookout.Storage.Sqlite" />
                    
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.Storage.Sqlite --version 1.0.2
                    
#r "nuget: Lookout.Storage.Sqlite, 1.0.2"
                    
#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.Storage.Sqlite@1.0.2
                    
#: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.Storage.Sqlite&version=1.0.2
                    
Install as a Cake Addin
#tool nuget:?package=Lookout.Storage.Sqlite&version=1.0.2
                    
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>Minimal-config dev-time diagnostics dashboard for ASP.NET Core.</p>

NuGet 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 EF Core query capture (required in Clean Architecture / Infrastructure projects):

dotnet add package Lookout.EntityFrameworkCore

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 (EF Core 8+)
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.

Cache capture registration order: Call AddMemoryCache() and AddStackExchangeRedisCache() before AddLookout(). Lookout decorates these services at registration time and emits a startup warning if the order is wrong.


Documentation

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


Comparison

Lookout MiniProfiler.NET Aspire Dashboard
Minial-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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Lookout.Storage.Sqlite:

Package Downloads
Lookout.AspNetCore

Minial-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.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.2 133 5/17/2026
1.0.1 127 5/17/2026
1.0.0 145 5/13/2026
1.0.0-preview.8 61 5/12/2026
1.0.0-preview.7 56 5/12/2026
1.0.0-preview.6 58 5/12/2026
1.0.0-preview.5 55 5/6/2026
1.0.0-preview.4 56 5/6/2026
1.0.0-preview.3 59 5/5/2026
1.0.0-preview.2 52 5/5/2026
1.0.0-preview.1 60 5/1/2026