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 produced from this organization:
Package Name | License | Description |
---|---|---|
Metalama.Framework | MIT | This is Metalama's main and core package. It incorporates a reference to Metalama.Compiler , effectively replacing the Roslyn compiler with our custom version. |
Metalama.Framework.Redist | MIT | Contains the public API of the Metalama Framework, without Metalama.Compiler . Reference this package to produce your own packages when you don't want them to use the forked compiler. |
Metalama.Compiler | MIT | A fork of Roslyn that allows add-ins (such as Metalama.Framework ) to perform arbitrary code transformations. |
Metalama.Testing.UnitTesting | MIT | Provides base classes and utilities for unit testing compile-time code. |
Metalama.Testing.AspectTesting | MIT | A framework based on xUnit for testing code generation by aspects. |
Metalama.Framework.Redist | MIT | Similar to Metalama.Framework , but excludes the dependency on Metalama.Compiler . |
Metalama.Framework.Sdk | MIT | Facilitates the use of the Roslyn API from aspects. |
Metalama.Framework.Engine | MIT | 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 | MIT | Defines the public API between compiled T# templates and Metalama.Framework.Engine . |
Metalama.Framework.Introspection | MIT | 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 | MIT | 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 | MIT | The metalama tool for the .NET CLI. |
Metalama.Extensions.DependencyInjection | MIT | A framework that allows aspects to consume dependencies from an arbitrary dependency injection framework. |
Metalama.Extensions.Metrics | MIT | Implements code metrics that can be consumed by aspects and fabrics. |
Metalama.Extensions.Multicast | MIT | Simulates the legacy PostSharp attribute multicasting to ease the migration from PostSharp to Metalama. |
Metalama.Patterns.Caching | MIT | Comprehensive caching framework for Metalama. |
Metalama.Patterns.Caching.Aspects | MIT | Aspects designed for Metalama caching, building upon Metalama.Patterns.Caching . |
Metalama.Patterns.Caching.Backend | MIT | Provides an abstraction over caching backends, including an in-memory caching implementation. |
Metalama.Patterns.Contracts | MIT | Code contract aspects like [NotNull] , [Url] for contract-based programming. |
Metalama.Patterns.Immutability | MIT | Represents the concept of Immutable Type so that it can be used by other packages like Metalama.Patterns.Observability. |
Metalama.Patterns.Memoization | MIT | Implements a memoization aspect, i.e. simple and super-fast caching. |
Metalama.Patterns.Observability | MIT | A Metalama aspect implementing INotifyPropertyChanged . |
Metalama.Patterns.Wpf | MIT | Aspects that implement WPF dependency properties and commands. |
Metalama.LinqPad | MIT | Provides integration with LINQPad for inspecting projects and solutions. |
Flashtrace | MIT | A structured tracing library used by Metalama.Patterns.Caching . |
Flashtrace.Formatters | MIT | Object formatters used in caching and logging. |
Metalama.Licensing 💎 | Proprietary | This package verifies that the user or the project has a valid license for Metalama. |
Metalama.Extensions.CodeFixes 💎 | Proprietary | Enables aspects and fabrics to suggest custom code fixes. |
Metalama.Extensions.Validation 💎 | Proprietary | Provides a base API for aspects and fabrics to validate source code, including the validation of code references and dependencies. |
Metalama.Extensions.Architecture 💎 | Proprietary | Extends the Metalama.Extensions.Validation package with a high-level API to validate source code against architecture rules. |
Metalama.Patterns.Caching.Backends.Redis 💎 | Proprietary | Implements a Metalama.Patterns.Caching adapter for Redis, allowing for distributed caching and hybrid caching. |
Metalama.Patterns.Caching.Backends.Azure 💎 | Proprietary | Implements cache synchronization for Metalama.Patterns.Caching using Azure Message Bus, allowing to several several local caches in a multi-node deployment. |
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. |