Metalama is a Roslyn-based meta-programming framework for code generation, architecture validation, and aspect-oriented programming in C#.
It lets you write cleaner, more maintainable .NET code by automating repetitive patterns at compile time using aspects, templates, and compile-time logic. It integrates tightly with the Roslyn compiler, providing full control over how your code is built.
- Write and maintain less code: Eliminate boilerplate by generating it dynamically during compilation, reducing code lines and bugs by up to 15%.
- Validate your codebase in real time: Enforce adherence to design rules and conventions without waiting for code reviews.
- Excel with large, complex, or legacy codebases: Metalama shines at scale and does not require architectural changes.
Metalama is ideal for:
- Large projects: Automate repetitive patterns across dozens of entities and hundreds of properties or methods.
- Large teams: Align developers on consistent patterns and practices.
- Long lifecycle projects: Maintain quality over years of development.
It's main use cases are:
- Design Patterns: Singleton, Memento, Factory, Builder, Decorator, Proxy, ...
- UI Patterns: INotifyPropertyChanged, Change Tracking, Memoization, Undo/Redo, Command, Dependency Properties, ...
- Object Services: Cloning, ToString, Comparison, ...
- Defensive Programming: Code Contracts (preconditions, post-conditions, invariants)
- DevOps: Logging & Tracing, Metrics, Caching, Exception Handling
Metalama is released under the MIT license.
Some optional extensions and IDE tooling are released under a proprietary license. 💎
- Code Generation
- Code Validation
- Architecture Validation 💎
- Immediate Editor Feedback
- Code Fix Toolkit 💎
- Ready-to-Use Aspect Libraries
- Visual Studio Tooling 💎
- Test Frameworks
- Debugging of Transformed Code
- Roslyn Extensibility SDK
- Code Query API
- 🌐 Metalama Website
- 📖 Documentation
- 📝 Annotated Examples
- 📜 Changelogs
- 📢 Release Notes
- ✨ Metalama Tools for Visual Studio Extension
-
Add the
Metalama.Framework
package to your project:dotnet add package Metalama.Framework
-
Optionally, install Metalama Tools for Visual Studio Extension. It's free for individuals, non-commercial uses, and companies with up to 3 users.
-
Explore the Metalama Marketplace for ready-made aspects or examples.
-
Follow the Getting Started guide to create your first aspect.
We welcome contributions! Here's how you can help:
- ⭐ Star the Metalama repository or review us on Visual Studio Marketplace.
- 📝 Write a blog post or record a video about Metalama.
- 📦 Share your aspects on the Metalama Marketplace.
- 🛠️ Contribute to Metalama.Community.
- 📚 Improve the documentation. Learn how.
- 🐛 Fix bugs or contribute code. Learn how.
For more details, see Contributing to Metalama.
- Report issues on GitHub. Follow these recommendations.
- Join GitHub discussions for questions and proposals.
- Enterprise support is available. Learn more about premium support. 💎
Below is a list of packages published by Metalama:
Package Name | Description |
---|---|
Metalama.Framework | This is the public API of the Metalama Framework. It incorporates a reference to Metalama.Compiler, effectively replacing the Roslyn compiler with our custom version. |
Metalama.Testing.UnitTesting | Provides base classes and utilities for unit testing compile-time code. |
Metalama.Testing.AspectTesting | A framework based on xUnit for testing code generation by aspects. |
Metalama.Framework.Redist | Similar to Metalama.Framework , but excludes the dependency on Metalama.Compiler . |
Metalama.Framework.Sdk | Facilitates the use of the Roslyn API from aspects. |
Metalama.Framework.Engine | This is the core implementation of Metalama.Framework . Direct referencing of this package is discouraged and unsupported. It's intended to be a dependency for Metalama.Testing.AspectTesting . |
Metalama.Framework.CompileTimeContracts | Defines the public API between compiled T# templates and Metalama.Framework.Engine . |
Metalama.Framework.Introspection | Provides an API to inspect the object model that represents the compilation process of Metalama.Framework , such as aspect and advice instances, as well as its results. |
Metalama.Framework.Workspaces | A supplementary API to Metalama.Framework.Introspection , designed to facilitate the loading of Visual Studio projects and solutions. This package is also useful to inspect projects that don't use Metalama. It is used by Metalama.LinqPad . |
Metalama.Tool | The metalama tool for the .NET CLI. |
Metalama.Extensions.DependencyInjection | A framework that allows aspects to consume dependencies from an arbitrary dependency injection framework. |
Metalama.Extensions.Metrics | Implements code metrics that can be consumed by aspects and fabrics. |
Metalama.Extensions.Multicast | Simulates the legacy PostSharp attribute multicasting to ease the migration from PostSharp to Metalama. |
Metalama.Extensions.Architecture | Allows you to validate the source code against architecture rules. |
Metalama.Patterns.Caching | Comprehensive caching framework for Metalama. |
Metalama.Patterns.Caching.Aspects | Aspects designed for Metalama caching, building upon Metalama.Patterns.Caching . |
Metalama.Patterns.Caching.Backend | Provides an abstraction over caching backends, including an in-memory caching implementation. |
Metalama.Patterns.Contracts | Code contract aspects like [NotNull] , [Url] for contract-based programming. |
Metalama.Patterns.Immutability | Represents the concept of Immutable Type so that it can be used by other packages like Metalama.Patterns.Observability. |
Metalama.Patterns.Memoization | Implements a memoization aspect, i.e. simple and super-fast caching. |
Metalama.Patterns.Observability | A Metalama aspect implementing INotifyPropertyChanged . |
Metalama.Patterns.Wpf | Aspects that implement WPF dependency properties and commands. |
Metalama.LinqPad | Provides integration with LINQPad for inspecting projects and solutions. |
Flashtrace | A structured tracing library used by Metalama.Patterns.Caching . |
Flashtrace.Formatters | Object formatters used in caching and logging. |
Repository | License | Description |
---|---|---|
Metalama | MIT | Our main repository containing the full open-source product. |
Metalama.Compiler | MIT | A Roslyn fork for source code transformations. |
PostSharp.Engineering | MIT | A custom multi-repo build and CI framework. |
Metalama.Community | MIT | Community-contributed aspects repository. |
Metalama.Documentation | MIT | Source for documentation hosted on Metalama Docs. |
Metalama.Samples | MIT | Illustrative samples available at Metalama Examples. |
Metalama.Premium 🔑 | Proprietary | Extensions available to customers with a commercial license. |