1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+
4+ < head >
5+ < meta charset ="UTF-8 " />
6+ < meta name ="viewport " content ="width=device-width, initial-scale=1 " />
7+ < title > Kestrun – Hybrid PowerShell & .NET Web Framework</ title >
8+
9+ <!-- 🔹 Primary Meta Tags -->
10+ < meta name ="title " content ="Kestrun – Hybrid PowerShell & .NET Web Framework ">
11+ < meta name ="description "
12+ content ="Kestrun is a modern hybrid web framework powered by ASP.NET Core, PowerShell, and C#. Build secure, extensible, multi-language web apps with ease. ">
13+ < meta name ="keywords "
14+ content ="Kestrun, PowerShell web framework, .NET web framework, ASP.NET Core, Kestrel, hybrid framework, Razor Pages, C# scripting, multi-language routes, open source web server ">
15+ < meta name ="author " content ="Kestrun Project ">
16+ < meta name ="robots " content ="index, follow ">
17+ < meta name ="language " content ="English ">
18+
19+ <!-- Open Graph -->
20+ < meta property ="og:type " content ="website ">
21+ < meta property ="og:url " content ="https://www.kestrun.dev/ ">
22+ < meta property ="og:site_name " content ="Kestrun ">
23+ < meta property ="og:title " content ="Kestrun – Hybrid PowerShell & .NET Web Framework ">
24+ < meta property ="og:description "
25+ content ="A modern hybrid web framework for PowerShell & .NET. Build extensible, secure, and cross-platform apps with ease. ">
26+ < meta property ="og:image " content ="https://www.kestrun.dev/assets/kestrun_abstract_transparent.png ">
27+
28+ <!-- Twitter -->
29+ < meta name ="twitter:card " content ="summary_large_image ">
30+ < meta name ="twitter:url " content ="https://www.kestrun.dev/ ">
31+ < meta name ="twitter:title " content ="Kestrun – Hybrid PowerShell & .NET Web Framework ">
32+ < meta name ="twitter:description " content ="A modern hybrid web framework for PowerShell & .NET. ">
33+ < meta name ="twitter:image " content ="https://www.kestrun.dev/assets/kestrun_abstract_transparent.png ">
34+
35+ <!-- Favicon -->
36+ < link rel ="icon " href ="/assets/favicon.ico " type ="image/x-icon " />
37+
38+ <!-- Theme color (nice on Android/iOS) -->
39+ < meta name ="theme-color " content ="#1f6feb ">
40+
41+ <!-- Preload the wordmark for faster LCP -->
42+ < link rel ="preload " as ="image " href ="/assets/kestrun-wordmark-light.svg "
43+ imagesrcset ="/assets/kestrun-wordmark-light.svg ">
44+
45+ < style >
46+ body {
47+ margin : 0 ;
48+ font-family : system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
49+ background : white;
50+ color : # 5c5962 ;
51+ line-height : 1.6 ;
52+ }
53+
54+ header {
55+ text-align : center;
56+ background : linear-gradient (135deg , # 1f6feb, # 238636 );
57+ color : white;
58+ position : relative;
59+ padding : 3rem 1rem ;
60+ /* add comfortable space */
61+ }
62+
63+ header img .logo {
64+ position : absolute;
65+ top : 1rem ;
66+ /* <-- add this */
67+ right : 1rem ;
68+ max-width : 80px ;
69+ height : auto;
70+ pointer-events : none;
71+ /* purely decorative */
72+ }
73+
74+ header img .wordmark {
75+ max-width : 640px ;
76+ height : auto;
77+ margin-bottom : 1rem ;
78+ display : block;
79+ margin-left : auto;
80+ margin-right : auto;
81+ }
82+
83+ header p {
84+ font-size : 1.25rem ;
85+ opacity : 0.9 ;
86+ }
87+
88+ main {
89+ max-width : 800px ;
90+ margin : 2rem auto;
91+ padding : 0 1rem ;
92+ }
93+
94+
95+
96+ /* Buttons */
97+ a .button {
98+ display : inline-flex;
99+ align-items : center;
100+ gap : .45em ;
101+ box-sizing : border-box;
102+ padding : 0.45em 1.0em ;
103+ margin : .25em .35em 0 0 ;
104+ font : 500 1 rem/1.4 system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
105+ color : # 1f6feb ;
106+ text-decoration : none;
107+ background : # f7f7f9 ;
108+ border-radius : 8px ;
109+ border : 1px solid rgba (0 , 0 , 0 , .06 );
110+ box-shadow : 0 1px 2px rgba (0 , 0 , 0 , .06 ), 0 3px 8px rgba (0 , 0 , 0 , .04 );
111+ }
112+
113+ /* ✅ Correct selector (.svg-icon is a CLASS) */
114+ .button .svg-icon {
115+ display : inline-block;
116+ width : 1.1em ;
117+ height : 1.1em ;
118+ flex : 0 0 auto;
119+ background : currentColor;
120+ /* paint */
121+ -webkit-mask-image : var (--icon );
122+ /* use the vector as a mask */
123+ mask-image : var (--icon );
124+ -webkit-mask-repeat : no-repeat;
125+ mask-repeat : no-repeat;
126+ -webkit-mask-position : center;
127+ mask-position : center;
128+ -webkit-mask-size : contain;
129+ mask-size : contain;
130+ }
131+
132+ /* --- Icons as URL-encoded SVGs (no inline <svg> clutter) --- */
133+
134+ /* Book / Docs */
135+ .icon-docs {
136+ --icon : url ("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M6 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12.5a1.5 1.5 0 0 0 0-3H7a1.5 1.5 0 1 1 0-3h11.5A1.5 1.5 0 0 0 20 13V6a3 3 0 0 0-3-3H6z'/%3E%3C/svg%3E" );
137+ }
138+
139+ /* GitHub Octocat (Simple Icons path) */
140+ .icon-github {
141+ --icon : url ("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.387.6.113.82-.262.82-.582 0-.288-.012-1.242-.018-2.25-3.338.726-4.042-1.61-4.042-1.61-.546-1.388-1.333-1.757-1.333-1.757-1.09-.744.082-.73.082-.73 1.205.087 1.84 1.237 1.84 1.237 1.07 1.833 2.807 1.303 3.492.997.107-.775.42-1.303.763-1.603-2.665-.303-5.466-1.332-5.466-5.931 0-1.312.469-2.383 1.237-3.223-.124-.303-.537-1.523.117-3.176 0 0 1.008-.322 3.3 1.23a11.52 11.52 0 0 1 3-.404c1.02.005 2.046.138 3 .404 2.29-1.552 3.297-1.23 3.297-1.23.656 1.653.243 2.873.12 3.176.771.84 1.236 1.911 1.236 3.223 0 4.61-2.806 5.624-5.476 5.921.431.372.824 1.102.824 2.222 0 1.606-.015 2.899-.015 3.293 0 .322.216.7.825.58C20.565 21.797 24 17.298 24 12c0-6.627-5.373-12-12-12z'/%3E%3C/svg%3E" );
142+ }
143+
144+ /* Blog (pencil) */
145+ .icon-blog {
146+ --icon : url ("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a1 1 0 0 0 0-1.41l-2.34-2.34a1 1 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z'/%3E%3C/svg%3E" );
147+ }
148+
149+ /* Coverage (check) */
150+ .icon-coverage {
151+ --icon : url ("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M9 16.17 4.83 12 3.41 13.41 9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E" );
152+ }
153+
154+
155+ footer {
156+ margin-top : 4rem ;
157+ padding : 1rem ;
158+ text-align : center;
159+ font-size : 0.875rem ;
160+ color : # 8b949e ;
161+ border-top : 1px solid # 30363d ;
162+ }
163+
164+ footer a {
165+ color : inherit;
166+ }
167+ </ style >
168+ </ head >
169+
170+ < body >
171+ < header >
172+ <!-- Logo (top-right) -->
173+ < img src ="/assets/kestrun_abstract_transparent.png " alt ="Kestrun logo " class ="logo " />
174+
175+ <!-- Wordmark (centered) -->
176+ < img src ="/assets/kestrun-wordmark-light.svg " alt ="Kestrun " class ="wordmark " />
177+
178+
179+ < p > PowerShell brains. Kestrel speed</ p >
180+ </ header >
181+ < main >
182+ < h2 > What is Kestrun?</ h2 >
183+ < p >
184+ Kestrun is a hybrid web framework built on < strong > ASP.NET Core (Kestrel)</ strong > ,
185+ extending it with < strong > PowerShell</ strong > , < strong > C#</ strong > , and multi-language scripting support.
186+ It brings the flexibility of scripting and the performance of .NET into one ecosystem.
187+ </ p >
188+
189+ < h2 > Features</ h2 >
190+ < ul >
191+ < li > ⚡ Multi-language routes (PowerShell, C#, F#, VB.NET, JS, Python, …)</ li >
192+ < li > 🔒 Built-in authentication & certificate management</ li >
193+ < li > 📄 Razor pages backed by PowerShell scripts</ li >
194+ < li > 📊 Logging, scheduling, caching, compression</ li >
195+ < li > 🛠 Designed for extensibility & cross-platform use</ li >
196+ </ ul >
197+
198+ < div class ="buttons ">
199+ < a href ="https://docs.kestrun.dev " class ="button ">
200+ < span class ="svg-icon icon-docs "> </ span > Read the Docs
201+ </ a >
202+ < a href ="https://github.com/Kestrun/Kestrun " class ="button "> < span class ="svg-icon icon-github "> </ span >
203+ GitHub Repo
204+ </ a >
205+ < a href ="https://blog.kestrun.dev " class ="button ">
206+ < span class ="svg-icon icon-blog "> </ span > Blog
207+ </ a >
208+ < a href ="https://coverage.kestrun.dev " class ="button ">
209+ < span class ="svg-icon icon-coverage "> </ span > Test Coverage
210+ </ a >
211+ </ div >
212+ </ main >
213+ < footer >
214+ © 2025-2026 Kestrun Project · MIT Licensed · < a href ="https://github.com/Kestrun/Kestrun "> GitHub</ a >
215+ </ footer >
216+ </ body >
217+
218+ </ html >
0 commit comments