Deprecated Package Version
Reason: Legacy
Install
| Product | Versions |
|---|---|
| .NET |
README
Sora Framework
Stop fighting your framework. Start building.
Sora is a modern .NET framework that gets out of your way and lets you focus on what mattersβyour application logic. No complex configuration, no hidden magic, just clean, predictable code that works the way you expect.
The Problem We Solve
Most frameworks force you to choose: either simple but limited, or powerful but complex. Sora gives you bothβstart with a three-file API, scale to enterprise patterns when you need them.
// This is a complete, working API with persistence
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSora();
var app = builder.Build();
app.UseSora();
app.Run();
Why Developers Choose Sora
π Zero to API in minutes β Real CRUD endpoints with just EntityController<T>
π§ Escape hatches everywhere β Drop to raw SQL, custom controllers, or provider-specific features
π¦ Modular architecture β Add JSON, SQLite, MongoDB, or messaging as your needs grow
β
Production ready β Health checks, OpenAPI docs, and observability built-in
π― Predictable β Convention over configuration, but configuration always wins
Core Philosophy
- Start simple, grow smart β Begin with basics, add complexity only when needed
- Familiarity first β Uses patterns you already know (Controllers, DI, EF-style entities)
- Developer experience β Clear error messages, helpful defaults, minimal friction
- Flexibility β Multiple data providers, pluggable components, custom implementations welcome
Real-World Example
// Define your model
public class Todo : Entity<Todo>
{
public string Title { get; set; } = string.Empty;
public bool IsDone { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
}
// Get a full REST API
[Route("api/[controller]")]
public class TodosController : EntityController<Todo> { }
// Use it naturally
var todo = await new Todo { Title = "Learn Sora" }.Save();
var todos = await Todo.Where(t => !t.IsDone);
That's it. You now have:
GET /api/todosβ List all todosPOST /api/todosβ Create new todoGET /api/todos/{id}β Get specific todoPUT /api/todos/{id}β Update todoDELETE /api/todos/{id}β Delete todo- Automatic health checks at
/health - OpenAPI documentation at
/swagger
Getting Started
- Quick Start β 3-minute tutorial from zero to working API
- Documentation β Complete guides for all features
- Examples β Real applications in the
samples/directory
Built For
- Rapid prototyping β Get ideas into code fast
- Microservices β Lightweight, focused services
- CRUD APIs β Perfect for data-driven applications
- Enterprise applications β Scales to complex patterns (CQRS, Event Sourcing)
Community & Support
- GitHub Issues β Bug reports and feature requests
- Discussions β Questions and community help
- Contributing β See our guidelines
Built with β€οΈ for .NET developers who want to focus on solving problems, not fighting frameworks.
License: Apache 2.0 | Requirements: .NET 9 SDK
Changes from Previous Version
Adoption Assessment
Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.
Related Guides & Workflows
Learn how to evaluate, integrate, or audit this package in your .NET project.