Changelog
Notable changes, newest first. NiteFx follows semantic versioning; while it is below 1.0, minor versions may change APIs outside the documented surface.
Unreleased (main)
Changed
- Nite is now NiteFx, short for Nite Framework, and the docs moved to nitefx.dev. Old links to
nite-net.github.ioredirect. Nothing in your project changes: the packages, theNitenamespace and thenitecommand keep their names.
Added
- Code signing policy and privacy policy. Release binaries will be signed through SignPath Foundation; see the Code signing policy. The Privacy policy lists the only network connections NiteFx makes. It collects no information.
0.8.1
Added
AGENTS.mdin new projects.nite initand thedotnet newtemplates write anAGENTS.mdfor AI coding agents: the commands, the project layout, and the Vite and npm habits that do not apply. (Working with an AI coding agent)- Docs for agents. The site publishes
llms.txt,llms-full.txtand a Markdown copy of every page.
0.8.0
Added
- Several single-page apps in one app.
MapNiteSpa(page, path: "/login")serves a page under its own path (and its client-side routes), next to a catch-all app; each is an endpoint with its own authorization. (More than one page) - Content Security Policy nonces.
NiteOptions.CspNoncegives NiteFx the request's nonce, which it puts on the import map, client config and module scripts it writes, and in development on the dev client, CSS imported from modules and the error overlay. A strict policy without'unsafe-inline'then works in both.NiteHead.ToHtml(nonce)does the same for hand-written layouts. (Content Security Policy) - Identity sample.
samples/Nite.Identity: ASP.NET Core Identity with EF Core and SQLite, two seeded users, a public login app and a protected main app that receives the user's claims through client config. It follows the backend-for-frontend pattern: server-side sessions behind an HttpOnly__Host-cookie, antiforgery tokens, a strict nonce-based CSP, rate-limited sign-in with lockout, and a refusal to run outside Development with the published demo passwords.
Changed
- Pages carrying client config are sent
Cache-Control: private, no-storeinstead ofprivate, no-cache, so the browser does not keep a signed-in user's page.
0.7.0
Added
- Client config.
NiteOptions.ClientConfig(orClientConfigAsync) hands values from the running server to client code as each page is served:import { config } from "nite:config". UnlikeNITE_PUBLIC_variables, which are inlined at compile time, they can differ per environment and per request, so one build runs everywhere.nite initand the templates addClient/nite-env.d.tsto type them. (Values from the running server) - Application Insights guide. Browser telemetry with the Application Insights SDK: per-environment connection strings through client config, loading the SDK lazily, and one transaction from page load through API calls. The Aspire sample does all of it. (Application Insights in the browser)
- Telemetry. OpenTelemetry traces and metrics through an
ActivitySourceand aMeternamedNite(NiteTelemetry.SourceName,NiteTelemetry.MeterName): dev server startup, per-request compiles, each stylesheet tool, hot updates, pre-bundling, package installs and production builds. No OpenTelemetry dependency. (Telemetry, health checks and Aspire) - Health check.
AddHealthChecks().AddNite()reports a dev server that is still starting or failed to, and a production app missing its build output. - Aspire guide and sample. Running a NiteFx app under Aspire: wiring, hot reload, passing service URLs to client code, and deploying.
samples/Nite.Aspirehas a NiteFx React app and an API service under one AppHost. - Requests under
/_niteare named after their route in traces (GET /_nite/src/{**path}) instead of a bareGET.
Changed
- The dev server starts its work once the host has started, so OpenTelemetry sees the startup trace.
0.6.0
Added
dotnet newtemplates. TheNite.Templatespackage addsnite-spaandnite-islandstodotnet newand to the new-project dialogs of Visual Studio and Rider. They are the same filesnite initwrites. (Getting started)
Changed
- Releases take their version from the tag. Pushing
v0.6.0publishes 0.6.0; there is no version to bump inDirectory.Build.propsfirst. CI builds are prereleases of the next patch after the newest tag. (Contributing)
0.5.0
Added
- Install script warnings. Packages the registry marks with
hasInstallScriptare reported when they are resolved, with specific messages for well-known ones (core-js,esbuild,node-sass, native addons such asbcrypt). (Install scripts) - Continuous integration and NuGet releases. A GitHub Actions workflow builds, tests and packs
NiteandNite.Clion every push, and publishes them to nuget.org with trusted publishing (no stored API key) when av*tag matchingVersioninDirectory.Build.propsis pushed. (Contributing)
0.4.0
Added
nite watch --no-auto-restart.
Changed
nite watchsetsDOTNET_WATCH_RESTART_ON_RUDE_EDIT=1, so edits that need a restart (such as a new endpoint inProgram.cs's top-level code) restart the app instead of being applied as a no-op that waits for Ctrl+R.- Production builds add Vite's default browser targets when
targetnames only a language version, so CSS nesting and other new syntax are lowered.
0.3.0
Added
- Stylesheets. Sass (the native Dart Sass compiler, over its embedded protocol), Less, Tailwind CSS 4 and the project's PostCSS config, in development and production, in the same order as Vite. CSS modules (
*.module.css,.module.scss,.module.less) withcomposesand named exports. Package stylesheets imported from code (import "@mantine/core/styles.css"), andurl()assets served in place during development. Hot updates follow everything a stylesheet depends on: imports, Sass partials, the PostCSS config, and new Tailwind classes in any project file, Razor views included. Mantine works out of the box. (Stylesheets) - esbuild plugins in .NET. The esbuild client implements esbuild's plugin protocol (
onResolve,onLoad), so builds can call back into C#. - Importing projects.
nite init --fromimports Vite and Create React App projects managed by npm, Yarn (classic and Berry), pnpm or Bun, keeping the versions their lockfiles pin, and reports what it could not bring along. Stylesheet tooling andadditionalDataare carried over. (Importing) - Per-user directories and settings. Configuration and caches follow the XDG Base Directory spec (
~/.config/nite,~/.cache/nite). Layered settings fromNITE_REGISTRY,nite.json, project and user.npmrc, and a user config edited withnite config. (Settings) - Private registries. Per-scope registries and
.npmrccredentials (_authToken,_auth,username/_password, with${VAR}expansion), sent only to their own host. Registry metadata is cached and revalidated with ETags. nite cache dir|clean|verifyandnite config list|get|set|unset|path.
Fixed
- Version ranges whose alternatives include a dist-tag (
>=3.0.0 || >=4.0.0 || insiders) no longer fail to install.
0.2.0
Added
- A new
niteCLI built on Spectre.Console:init(withspaandislandstemplates),install(add,i),remove(rm,delete,uninstall),list(ls),update(up, with--checkand--latest),build,watch,versionandupdate-self. nite watchrunsdotnet watchwith its browser refresh turned off, so single-page apps keep their state on C# changes;--browser-refreshkeeps it for Razor Pages.- The project logo and icon, used for the NuGet packages.
Changed
- Licensed under the Apache License 2.0.
0.1.0
The first version.
- A development server inside ASP.NET Core (
UseNite): TypeScript and JSX compiled on request by a long-lived esbuild service, bare imports through an import map to pre-bundled dependencies, and hot updates over a WebSocket. - React Fast Refresh without Babel, driven by a module graph.
- C# hot reload forwarded to the page as a
nite:server-updateevent. - Single-page apps with
index.htmlas an entry andMapNiteSpafor client-side routing. - React islands in Razor Pages and MVC:
<island>,<nite-head>and<nite-module>, withload,idle,visibleandmedialoading strategies. - An npm client in C#: semver resolution, hoisting,
nite.lock.json, integrity checks. - Production builds into
wwwroot/_nite(minified, code-split, content-hashed), run automatically bydotnet publish. - Environment variables from
.envfiles with a public prefix, and tsconfig path aliases.