DirectSharp
Code written to be understood.
DirectSharp is a strongly typed, case-insensitive language for .NET application developers, teams maintaining business systems, and people building with AI. It translates to readable C# and uses ordinary .NET libraries—for APIs, background workers, desktop applications and data processing.
The goal is code that reads as closely as possible to its specification: what must be true, what runs together, what happens on failure and who owns a resource. Words and named block endings help you follow the implementation as a statement of intent.
Even when an agent writes the code, you should be able to read it.
AI can write more of that implementation. Good. We still need to inspect it occasionally, question a decision and understand a change. That matters to the experienced developer, the learner, the occasional programmer and the team inheriting an application years later.
Can you follow the rule?
An active customer can be approved when risk is low and credit covers the amount. Otherwise, the request needs manual review. This action belongs to an application service; Customer and the two lookup actions are application-defined.
public async action Review(customer as Customer, amount as Decimal)
returns String
require amount > 0
ensure result is not empty
if customer is not nothing and .IsActive then
// Start both lookups; wait for their owned work at the block's end.
concurrent all
returns risk as String, credit as Decimal
risk = run ReadRiskAsync(customer.Id)
credit = run ReadCreditAsync(customer.Id)
end concurrent
if risk = "low" and amount <= credit then
return "Approve {{customer.Name}}: {{amount:N2}}"
end if
end if
return "Manual review"
end action
The contracts state the entry rule and normal-exit guarantee once. The contextual .IsActive refers to customer; an absent customer never reaches the lookups. concurrent all owns and settles both operations, and lookup failures propagate rather than becoming a manual-review result.
Explore the complete transaction-review service →
See how DirectSharp reads
What makes an order eligible? Which operations run together? What happens if one fails? Those answers should be easy to find in the code. Names should stay recognizable too: a rose is a Rose is a ROSE—DirectSharp identifiers are case-insensitive, so changing capitalization does not change which variable or action a name refers to.
The language tour introduces the main features through short examples. The comparisons put equivalent tasks side by side with C#, Python and other languages, so you can judge the reading experience yourself.
Take the language tour → · Compare the code →
Who DirectSharp is for
| Who | Typical work | Why readability matters |
|---|---|---|
| Application developers | APIs, desktop applications, integrations and background workers | Keep strong types and ordinary .NET libraries while making application intent visible. |
| Teams maintaining business systems | Billing, approvals, customer administration and reporting | Keep rules understandable as requirements change and new colleagues inherit the code. |
| Data analysts and data engineers | Data preparation, analysis, reporting and recurring processing | Follow transformations and checks using the .NET data ecosystem. |
| AI application developers | Agents, model integrations and AI-assisted workflows | Use .NET AI libraries while keeping orchestration, concurrency and failure handling readable. |
| AI-assisted builders and vibe coders | Applications developed with coding agents | Inspect generated changes, question decisions and trace unexpected results. |
| Teachers and students | Learning programming and explaining algorithms | Discuss types, conditions and control flow through explicit words and named blocks. |
| Occasional developers | Automation, utilities and small applications | Return to the code months later and recognize what it does. |
Enterprises cannot assign their most experienced engineers to every internal application. The language should help the available team concentrate on the problem it is solving.
Why I am building it
I started with C and C++ using Borland tools, then moved through Visual C++ and MFC to C# and VB.NET. I use C# every day and value the power and breadth of .NET.
While building business applications in the 2000s, I sometimes copied a rule into an email, adjusted it for the reader, and asked a business colleague to confirm it. They could recognize the condition and tell me whether it matched the business. That experience stayed with me. I want code that makes those conversations easier.
After decades of working with symbol-heavy languages, I still dislike how much punctuation gets between me and the rule I am trying to express. Reading it aloud often means translating the symbols back into ordinary words. Writing it means reaching for Shift again and again.
A closing } tells me a block ended. A sequence of them makes me work backward to discover which blocks. end if, end action and end class tell me directly. I am happy to type more letters when they make the code easier to follow.
Now agents can do more of the typing. Good. Even a happy “vibe coder” will occasionally want to look inside, understand a decision or question a change. I want the source to give them a way in.
DirectSharp brings together ideas I have carried for years, now possible to develop with the help of LLMs. I wanted this simplicity when I typed every line myself. With AI writing more of the code, I want it even more.
I left my bank IT management job to work on DirectSharp and my other projects. We’ll see where this leads. For now, I want to make everyday application code easier to read, discuss and reason about.
Where it is headed
The priorities are a faithful compiler, a standard library built on ordinary .NET APIs, practical development tools and complete application examples.
DirectSharp’s current foundation is C# and .NET. Other compiler backends are a possible future direction, provided they preserve the language’s semantics and provide compatible runtime support.
See the roadmap → · Explore the library plan →
Follow DirectSharp
If this is the kind of code you want to read, star the repository. Use GitHub’s Watch menu to follow the language as it develops.