Sign in

Kirill Osenkov

@kirillosenkov.com
1.5K followers 272 following 798 posts

(Unofficial) VP of Developer Productivity at Microsoft. Developer tools, engineering systems, .NET, C#, Roslyn, Visual Studio, Editor, WPF, Avalonia, MSBuild.

PostsRepliesMedia
Kirill Osenkov @kirillosenkov.com · 05/10/2026
Added some fun new drawings to Live Geometry: livegeometry.com/gallery/magi... livegeometry.com/gallery/trea... livegeometry.com/gallery/fire... livegeometry.com/gallery/gold... livegeometry.com/gallery/kale... livegeometry.com/gallery/circ... To win kids' hearts and minds you gotta have emoji
picture of a fractal tree with colorful emoji as fruitpicture of a cartoon pirate island with treasure map routeemoji fireworks in the city night skycolorful emoji spiral
041
Kirill Osenkov @kirillosenkov.com · 02/10/2026
Avalonia @avaloniaui.net has been beyond amazing while working on Live Geometry. The same C# app works on Windows, Mac and in the browser:
Screenshot of the Live Geometry desktop app on macos
092
Kirill Osenkov @kirillosenkov.com · 02/10/2026
Aperiodic monotile: livegeometry.com/gallery/aper...
colorful hat tiles tiling the plane
051
Kirill Osenkov @kirillosenkov.com · 02/10/2026
My long-standing dream finally came true! A visualization of a dependency DAG drawing arrows without intersections. Each selected figure depends on a couple of figures before it in the topological sort order. This way you can see the closure of all dependencies for any figure.
Screenshot of the Live Geometry app. On the right, triangle ABC is shaded light blue and has yellow vertices. A thick blue circle passes through all three vertices. Gray midpoints D (on side BC) and E (on side AB) each have a perpendicular gray line with a small right-angle mark. The two lines cross at the circle's center, a cyan point labeled O.

On the left, a panel titled "Figures" lists everything in the construction in order, each with a small icon: Points A, B, C and D, Segment BC, PerpendicularLine13, Point E, Segment AB, PerpendicularLine15, Point O, Circle, Segment AC and Triangle ABC. Gray arrows in the margin connect each figure to the figures it was built from. "Circle" is selected, and blue arrows from it point to Point O and Point B, its center and a point on it.
090
Kirill Osenkov @kirillosenkov.com · 30/09/2026
strangely, @davidfowl.com and NuPack make an appearance in 2010:
On NuPack
The undo engine split out of Live Geometry the year before, GuiLabs.Undo, becomes one of the earliest packages on NuGet, in the weeks when it was still called NuPack. Kirill recalls that David Fowler urged him to upload it and wrote the .nuspec himself. The package is still on the feed today, with a 1.0.0 the current gallery dates to March 29, 2011, when nuget.org took over the original feed, and still describes itself as "a simple .NET Undo/Redo framework with mergeable actions and composite transactions", which is what runs Live Geometry's undo to this day.
010
Kirill Osenkov @kirillosenkov.com · 30/09/2026
I've been in the geometry business for 27 years. I just reconstructed the timeline of working on it since 1999: livegeometry.com/history
A History

Twenty-seven years of ruler and compass: from a Visual Basic program in Kharkiv to a WebAssembly app in the browser, by way of two false starts and one long silence.

A program begins in Kharkiv
Kirill Osenkov starts DG at the Kharkiv pedagogical university in Ukraine, under the supervision of Sergey A. Rakov. The language is Visual Basic 6.
130
Kirill Osenkov @kirillosenkov.com · 29/09/2026
and dark theme of course
screenshot of Live Geometry in dark theme, showing a Circle Touching Three Lines drawing, with figure list on the left, property grid for the point on the right, toolbar and ribbon at the top, all in dark theme
021
Kirill Osenkov @kirillosenkov.com · 29/09/2026
if you want to win modern kids' hearts and minds, you have to support emoji
screenshot of Live Geometry with a drawing that's a quadrilateral where points are in the shape of city and airport emoji, and the Edit Style dialog is open on the right with an emoji picker, where you can search for or paste an emoji
100
Kirill Osenkov @kirillosenkov.com · 24/09/2026
Announcing Live Geometry: livegeometry.com Try it out especially if you have geometry-aged kids. Built using @avaloniaui.net
Live Geometry logo, New Drawing button and 6 tiles with various drawings: Continuous deformations, Bubbles, Pythagorean Theorem, Circumscribed circle, Inscribed Circle, Morley's Miracle
52814
Kirill Osenkov @kirillosenkov.com · 04/09/2026
Stampeded! from the @ilspy.bsky.social team is a new intelligent code review tool with semantic navigation: www.youtube.com/watch?v=r16Y... github.com/icsharpcode/...
screenshot of a code review tool with changed files tree in the top left, repository tree in the bottom left and the diff/editor in the right pane (light theme). Showing the ILSpy codebase.
0123
Kirill Osenkov @kirillosenkov.com · 29/08/2026
more exhibits
color bars showing Visual C# 2005 in greenC# icon in green
040
Kirill Osenkov @kirillosenkov.com · 29/08/2026
GitHub recently changed the color for the C# language from green to the slate blue .NET uses #7355DD and I just can't get used to it. C# was always green, VB was always blue. I get what they were going for but I dunno.
four bars: Visual C# 2008 Express Edition (green), Visual Basic is blue, C++ is orange-ish and Visual Web Developer is purple-ish
2271
Kirill Osenkov @kirillosenkov.com · 28/08/2026
Lunar eclipse is visible now in Seattle area, look east
Moon above trees with lower half obscured by Earth shadow
190
Kirill Osenkov @kirillosenkov.com · 26/08/2026
ILSpy working in a browser: osenkov.com/ilspy Powered by @ilspy.bsky.social and @avaloniaui.net
Screenshot of a browser tab and ILSpy UI in it: tree with ICSharpCode.Decompiler assembly on the left, with namespaces and types, decompiled assembly attributes in a yellow text editor on the right
43911
Kirill Osenkov @kirillosenkov.com · 25/07/2026
his initials are the first two bytes of every PE file in the world
hex editor showing a PE File DOS Header. The first two bytes are M Z
060
Kirill Osenkov @kirillosenkov.com · 15/07/2026
MSBuild binlog viewer downloads have fallen off the cliff since ~March: msbuildlog.com/stats/ My interpretation is that AI is solving MSBuild issues, as well as less and less people using MSBuild. Also hopefully modern MSBuild and SDK is more pit of success.
bar chart where downloads are growing until ~ September 2025, then falling rapidly in March, then falling again to a third of peak
351
Kirill Osenkov @kirillosenkov.com · 12/07/2026
This made me dig up how I did drag and drop for C# statements in my old structured editor from 2006 - you could only drag them where the grammar allowed it github.com/KirillOsenko...
1302
Kirill Osenkov @kirillosenkov.com · 29/06/2026
First real-world scenario comparison of my new agent harness against VS Code and Copilot CLI. I still need to tune KV caching but I'm very pleased that it is done much sooner and in much fewer model calls. All start on the same commit, same model, same prompt.
Chart of model calls for three sessions: 

VS Code $2.34 6m 9s 24 calls
Copilot CLI $2.64 6m 12s 43 calls
Mystery Harness $2.88 2m 15s 7 calls
191
Kirill Osenkov @kirillosenkov.com · 14/04/2026
Anyone with synesthesia here? What color is the foreach statement? I'd be curious what color people would pick, I'm sure it's very individual.
scrollbar where nested member and statement blocks are displayed as nested color rectangles to represent structure of the current file.
130
Kirill Osenkov @kirillosenkov.com · 06/04/2026
I returned to my structured editor roots a little bit and prototyped a scrollbar that shows the statement structure in method bodies. Also a document outline tree where statement structure is visible for larger methods. This way you can visually distinguish methods by their "shape".
text editor showing a C# file where next to the vertical scrollbar there's a visual depiction of the methods and statements inside methods represented as nested colorful blocks. There's also a Document outline tool window showing the tree of types and members in the file, and method bodies are shown under methods using the same structural representation.
1256
Kirill Osenkov @kirillosenkov.com · 01/04/2026
A long time ago I wrote an analyzer to flag usages of async void
2211
Kirill Osenkov @kirillosenkov.com · 08/03/2026
I've always wanted to write my own TreeMap
screenshot of a classical TreeMap control showing nested directories in nested rectangles, names of large files are shown
3130
Kirill Osenkov @kirillosenkov.com · 21/02/2026
PerfView can record all managed exceptions in all processes system-wide thanks to the .NET ETW provider, with callstacks. I built a viewer for these .etl files:
Tree view with the processes on the left, timeline of exceptions in processes up top, data grid with the exception details in the center and current exception call stack at the bottom
3398
Kirill Osenkov @kirillosenkov.com · 16/12/2025
Did you know? You can run csc -langversion:? to see what language versions your C# compiler supports
C:\>csc -langversion:?
Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0
9.0
10.0
11.0
12.0
13.0
14.0 (default)
latestmajor
preview
latest
510710
Kirill Osenkov @kirillosenkov.com · 06/12/2025
Ordered my third keyboard from CloudNine: cloudnineergo.com/products/clo... It's split/ergonomic, has mechanical switches and the classical IBM layout (arrow keys + Ins/Del/Home/End/PgUp/PgDn) that is so hard to find. Thinking of ordering a few more in case they stop making it.
a split mechanical keyboard with classical IBM layout and individually lit RGB keys
5756
Kirill Osenkov @kirillosenkov.com · 02/12/2025
MSBuild tip: if you're working with binlogs, set the environment variable MSBuildLogPropertyTracking=15. It enables logging of where each property was initially assigned from during evaluation and lights up more features in the binlog viewer.
screenshot of MSBuild binlog viewer on the Properties and Items tab, the query shows `$property "OutputPath" "UseArtifactsOutput"`

results show a tree where each assignment to OutputPath is highlighted, with the actual value being displayed where an assignment was made
2298
Kirill Osenkov @kirillosenkov.com · 18/11/2025
This doesn't add as much clarity as I hoped it would:
a graph that is such a complete mess that it's totally unreadable
4180
Kirill Osenkov @kirillosenkov.com · 07/11/2025
New in MSBuild Structured Log Viewer: property trail showing reads and writes during evaluation, in order: github.com/KirillOsenko... If you've ever had ordering issues where someone reads your property before you wrote to it, this is the tool for you.
Screenshot showing a search box on top with $property and three property names such as DebugType, and lower the search results in the form of a tree, showing reads and writes of those MSBuild properties.
3919
Kirill Osenkov @kirillosenkov.com · 11/10/2025
Fun fun fun
car dashboard screen saying in red Stop vehicle and check power supply
160
Kirill Osenkov @kirillosenkov.com · 29/09/2025
I even see which repository it was (it has been deleted or made private), but there's no way to clear or delete it:
screenshot of GitHub UI showing one repo in the Repositories list, called paradigm-notify/paradigm
110
Kirill Osenkov @kirillosenkov.com · 26/09/2025
I just wrote a Roslyn refactoring! I have to say the Roslyn API is beautiful and I loved the experience. gist.github.com/KirillOsenko...
VS editor with a lightbulb on params keyword, offering a Convert call sites to use arrays refactoring with a preview diff that shows square brackets added around an argument to a method
1110
Kirill Osenkov @kirillosenkov.com · 18/09/2025
Phantom notifications bother me way more than they should
screenshot of GitHub showing me that I have notifications, but I have no notifications
180
Kirill Osenkov @kirillosenkov.com · 05/09/2025
I just learned that Directory.GetFiles with pattern 1.txt.* matches 1.txt, and it's the OS behavior:
dir 1.txt.* matches 1.txt
7172
Kirill Osenkov @kirillosenkov.com · 25/08/2025
OK I really don't like what's going on here:
comparison results of AB and ab, BA and Ba for CurrentCulture in various casings. It's either 1 or -1.

"Ab", "ab"
1
"aB", "ab"
1
"ab", "Ab"
-1
"ab", "aB"
-1
"AB", "ab"
1
"Ab", "aB"
1
"Ba", "ba"
1
"bA", "ba"
1
"ba", "Ba"
-1
"ba", "bA"
-1
"BA", "ba"
1
"Ba", "bA"
1
120
Kirill Osenkov @kirillosenkov.com · 25/08/2025
Hmm, I have to confess, this is unexpected for me. Lowercase letters come before uppercase? Intuitively it feels that uppercase should come first?
six different ways to sort a string array with InvariantCultureIgnoreCase, CurrentCultureIgnoreCase, OrdinalIgnoreCase, etc. Lowercase letters appear before uppercase letters except for Ordinal
160
Kirill Osenkov @kirillosenkov.com · 21/08/2025
Just saw an Ioniq 5 N on the road for the first time, looks great
dark gray car from the back, in a sunlit road
240
Kirill Osenkov @kirillosenkov.com · 09/08/2025
sign:

no cash? exit this way
040
Kirill Osenkov @kirillosenkov.com · 02/08/2025
I was always annoyed by the StringBuilder API Append/AppendLine and that it returns a StringBuilder, so not convertible to an Action<string>. I have recently started using StringWriter instead (it's a very thin wrapper around StringBuilder), but now it's a proper TextWriter, and I'm very happy.
Drake meme:

disapproval: StringBuilder

approval: StringWriter
0100
Kirill Osenkov @kirillosenkov.com · 30/07/2025
added MSBuild target graph visualizer too:
Screenshot of MSBuild binlog viewer. At the center is the new Targets tab which displays a graph of rectangles, each rectangle has the target name. Selected target has outgoing dependencies on other targets above it, and targets below it have incoming references to the selected target. On the right the graph is displayed as text in Dot format. On the left the search for the current target displays all DependsOnTargets, BeforeTargets and AfterTargets for the current target.
030
Kirill Osenkov @kirillosenkov.com · 29/07/2025
yes, your problem is Kahua.generators.dll not sure what that is, clearly some third-party thing
call stack screenshot with Kahua.Generators.dll calling into Roslyn
200
Kirill Osenkov @kirillosenkov.com · 17/07/2025
Happy "Unicode calendar emoji shows the actual current date" day to all those who celebrate: quickinfo.io?calendar
Unicode character U+1F4C5 is a calendar showing July 17
0102
Kirill Osenkov @kirillosenkov.com · 21/06/2025
New in MSBuild Structured Log Viewer: Project Reference Graph New tab that shows the project graph layered by project "height". Each project only references projects above it. Clicking a project highlights all directly referenced projects above, and all projects below it that reference this one.
many rows of multiple rectangles per row, each rectangle is the project name, some rectangles are bigger and bluer (they are referenced more). One rectangle is selected and green, it has outgoing arrows above it that point to other rectangles, with purple border. Those are the referenced projects. Arrows also go down, to rectangles with green borders. Those are projects that reference the selected one.
1338
Kirill Osenkov @kirillosenkov.com · 31/05/2025
Ran into the situation again where updating VS broke incremental builds, because a different compiler version is now being stamped into the embedded PDB, invalidating all caches and resulting in different PE file bytes from identical sources. Glad I invested in the fancy PE parser and differ!
Screenshot of a fancy diff tool with a tree on the left which shows the PE file structure all the way down into the embedded PDB stream, showing different compiler version and runtime version between left and right. Some bytes in the hex editor on the right.
2214
Kirill Osenkov @kirillosenkov.com · 27/05/2025
I wrote a simple tokenizer and translator from Mandarin to English, that translates per-word, as opposed to whole sentences. Turns out both the tokenizer and the dictionary are freely available and open-source, so I just added them to quickinfo.io: quickinfo.io?%E6%88%91%E7...
screenshot of quickinfo.io showing a sentence in Chinese consisting of six characters, and each word has the Pinyin pronunciation and the English translations under it
180
Kirill Osenkov @kirillosenkov.com · 21/05/2025
screenshot of an 8x8 game square where each square is a different color and a power of two, no three same numbers are in a row, high score is 9948
120
Kirill Osenkov @kirillosenkov.com · 20/05/2025
I don't tweet enough about how amazing the Ultra profiler is: github.com/xoofx/ultra
Screenshot of a .NET application (MSBuild) profile open in Firefox profiler flame graph. You can see managed frames, native frames, GC, allocations and even time in Kernel.
1498
Kirill Osenkov @kirillosenkov.com · 12/05/2025
New feature in MSBuild Structured Log Viewer: Target Graph! It parses the preprocessed XML and constructs the target graph where edges are BeforeTargets, DependsOnTargets and AfterTargets.
Screenshot of binlog viewer search query $target CoreCompile project, the result tree includes folders: Graph, DependsOnTargets, Targets that run before CoreCompile, targets that run after CoreCompile and targets that depend on CoreCompile
0256
Kirill Osenkov @kirillosenkov.com · 25/04/2025
MSBuild target graph. Hope it helps!
unreadable fuzzy blob of black text on white background with lines so entangled as to be completely useless
3252
Kirill Osenkov @kirillosenkov.com · 01/03/2025
Protest against Trump and Musk in downtown Bellevue 🇺🇦
people on the street protesting with Ukrainian flags
2331
Kirill Osenkov @kirillosenkov.com · 03/02/2025
there's also this: github.com/KirillOsenko...
screenshot of MSBuild structured log viewer showing a tree of NuGet package dependencies with yellow highlighted search terms
020