Skip to main content
net9.0

Core primitives for Sora: configuration helper, environment snapshot (SoraEnv), constants, and foundational abstractions.

Published
Aug 19, 2025
1y ago
Total Downloads
3.5K
3,518

Deprecated Package Version

Reason: Legacy

Install

dotnet add package Sora.Core --version 0.2.17
ProductVersions
.NET
net9.0

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 todos
  • POST /api/todos β€” Create new todo
  • GET /api/todos/{id} β€” Get specific todo
  • PUT /api/todos/{id} β€” Update todo
  • DELETE /api/todos/{id} β€” Delete todo
  • Automatic health checks at /health
  • OpenAPI documentation at /swagger

Getting Started

  1. Quick Start β€” 3-minute tutorial from zero to working API
  2. Documentation β€” Complete guides for all features
  3. 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

No structural changes between v0.2.16 and v0.2.17.

Adoption Assessment

Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.

NuGet marks this package as deprecated. Review the publisher's migration guidance before adopting it.Compatibility metadata lists 1 target framework; confirm the exact target used by your application.The published metadata declares 13 direct dependency entries across framework groups. Inspect the resolved dependency graph for your target framework.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.