A multi-purpose CLI tooling ecosystem for .NET.
Chimpiler is an extensible CLI framework designed to provide pragmatic tooling for modern .NET applications and development workflows.
chimpiler clawcker — OpenClaw Instance ManagerClawcker makes it trivially easy to create, run, and access local OpenClaw instances using Docker. Get started with just three commands:
chimpiler clawcker new myagent
chimpiler clawcker start myagent
chimpiler clawcker talk myagent
Key Features:
chimpiler ef-migrate — EF Core Model → DACPAC GeneratorThe ef-migrate command generates one or more DACPAC files from EF Core DbContext models defined in a compiled .NET assembly. Each DbContext represents a distinct database, and the tool emits one DACPAC per DbContext without requiring:
Key Benefits:
chimpiler dacpac apply — DACPAC → PostgreSQL Schema DeploymentThe dacpac apply command reads SQL Server Database Project DACPACs through public DacFx APIs and
translates a deliberately limited, validated subset into PostgreSQL DDL.
export CHIMPILER_DACPAC_CONNECTION_STRING='Host=localhost;Database=app;Username=app;Password=...'
chimpiler dacpac apply ./Database.dacpac --dry-run
chimpiler dacpac apply ./Database.dacpac
Safety and deployment behavior:
--allow-destructive is suppliedThis is not SqlPackage for PostgreSQL. Chimpiler independently implements the PostgreSQL planner and executor and uses DacFx only to read the package model through public APIs.
Learn more about dacpac apply →
chimpiler kb — Local GraphRAG Knowledge BaseThe kb command builds and queries a completely local, zero-cloud, zero-Python knowledge base
stored in a single SQLite file. It is designed for local CLI and agent harness use: agents can
retrieve direct evidence, then maintain a focused, evidence-backed graph of entities and
relationships using the agent's own reasoning.
chimpiler kb init
chimpiler kb add ./docs
chimpiler kb graph-search "how do I generate a dacpac?"
Key Features:
IEmbeddingProvider for future cloud providersCopy this into a local/CLI agent harness before asking it to use a knowledge base:
Use Chimpiler's local KB as your knowledge-retrieval tool.
If `chimpiler` is not available, install it with:
dotnet tool install --global Chimpiler --add-source https://api.nuget.org/v3/index.json --ignore-failed-sources
Then run:
chimpiler kb prompt
Follow that output. Use `chimpiler kb search` for direct evidence. Delegate distinct source themes
to subagents when useful, returning only cited entity/relationship candidates to the orchestrator.
Register only verified entities and relationships, then use `chimpiler kb graph-search --depth 2`
to follow those focused evidence links. Depth is relationship hops; inspect each returned `trail:`
and cited source before treating a `(graph)` result as evidence.
Install Chimpiler globally using the .NET CLI:
dotnet tool install -g Chimpiler
To update to the latest version:
dotnet tool update -g Chimpiler
If a configured package mirror reports an older version or the installed CLI lacks kb, use
NuGet.org explicitly:
dotnet tool update -g Chimpiler --add-source https://api.nuget.org/v3/index.json --ignore-failed-sources
chimpiler kb --help
After installation, run chimpiler kb prompt for concise instructions that can be injected into a
local agent's context.
git clone https://github.com/joelmartinez/chimpiler.git
cd chimpiler
dotnet build
dotnet pack src/Chimpiler/Chimpiler.csproj -c Release
dotnet tool install -g --add-source ./src/Chimpiler/bin/Release Chimpiler
Generate DACPACs for all DbContexts in an assembly:
chimpiler ef-migrate --assembly path/to/YourApp.dll
Preview applying a DACPAC to PostgreSQL:
chimpiler dacpac apply path/to/Database.dacpac \
--provider postgresql \
--connection-string "$CHIMPILER_DACPAC_CONNECTION_STRING" \
--dry-run
Write a reviewable script without changing the target:
chimpiler dacpac apply path/to/Database.dacpac --script ./deployment.sql
This will discover all DbContext types in the assembly and generate a DACPAC for each in the ./output directory.
Generate a DACPAC for a specific DbContext:
chimpiler ef-migrate --assembly path/to/YourApp.dll --context YourNamespace.OrdersDbContext
chimpiler ef-migrate --assembly path/to/YourApp.dll --output ./dacpacs
chimpiler ef-migrate --assembly path/to/YourApp.dll --verbose
dacpac applyApply a supported DACPAC schema subset to PostgreSQL.
| Option | Required | Description | Default |
|---|---|---|---|
<dacpac> | ✅ | Path to the DACPAC | - |
--provider | ❌ | Target provider (postgresql; MySQL reserved for future support) | postgresql |
--connection-string | ✅* | Target connection string | CHIMPILER_DACPAC_CONNECTION_STRING |
--dry-run | ❌ | Print the plan and roll back | false |
--script <path> | ❌ | Write the plan and roll back | - |
--allow-destructive | ❌ | Permit reviewed destructive operations | false |
* Required through either the option or environment variable.
ef-migrateGenerate DACPACs from EF Core DbContext models.
Options:
| Option | Alias | Required | Description | Default |
|---|---|---|---|---|
--assembly | -a | ✅ | Path to compiled .NET assembly containing DbContext types | - |
--context | -c | ❌ | Fully qualified type name of a specific DbContext | All DbContexts |
--output | -o | ❌ | Output directory for generated DACPACs | ./output |
--framework | -f | ❌ | Target framework hint for multi-targeted assemblies | - |
--verbose | -v | ❌ | Enable detailed logging | false |
DACPAC files are named based on the DbContext type name with the following rules:
Context suffix if presentDbContext suffix if present.dacpacExamples:
| DbContext Type | DACPAC Filename |
|---|---|
TheDatabaseContext | TheDatabase.dacpac |
OrdersDbContext | Orders.dacpac |
ReportingContext | Reporting.dacpac |
InventoryContext | Inventory.dacpac |
DbContext| Feature | Chimpiler ef-migrate | EF Core Migrations |
|---|---|---|
| Approach | State-based (DACPAC) | Migration-based |
| Output | .dacpac files | C# migration files |
| Database Required | ❌ No | ❌ No |
| Deployment | SqlPackage / Azure DevOps | dotnet ef database update |
| Change Tracking | Handled by SqlPackage | Handled by EF Core |
| Reversibility | Via DACPAC snapshots | Via down migrations |
When to use Chimpiler:
When to use EF Migrations:
| Feature | Chimpiler ef-migrate | SSDT |
|---|---|---|
| Schema Source | EF Core models | Hand-written SQL |
| Tooling | CLI | Visual Studio |
| Automation | ✅ Full | ⚠️ Limited |
| Learning Curve | Low (if you know EF) | Medium-High |
| Advanced SQL Features | ⚠️ Limited | ✅ Full |
When to use Chimpiler:
When to use SSDT:
| Feature | Chimpiler ef-migrate | EF Core Power Tools |
|---|---|---|
| Execution | CLI / Automated | UI / Manual |
| Output | DACPACs | SQL scripts (via UI) |
| CI/CD Friendly | ✅ Yes | ❌ No |
| Visual Studio Required | ❌ No | ✅ Yes |
✅ Supported:
⚠️ Not Yet Supported:
The ef-migrate tool now supports SQL Server views, including indexed views. To use views, install the Chimpiler.EfMigrate package in your DbContext project:
dotnet add package Chimpiler.EfMigrate
Views are defined using a fluent API in your OnModelCreating method:
using Chimpiler.EfMigrate;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Simple view over a single table
modelBuilder.Entity<UserSummaryView>(entity =>
{
entity.ToView("UserSummaryView")
.HasViewDefinition<UserSummaryView, MyDbContext>(ctx =>
from u in ctx.Users
select new UserSummaryView
{
Id = u.Id,
FullName = u.FirstName + " " + u.LastName,
Email = u.Email
});
entity.HasKey(e => e.Id);
});
// Indexed view with SCHEMABINDING
modelBuilder.Entity<ActiveOrdersView>(entity =>
{
entity.ToView("ActiveOrdersView")
.HasViewDefinition<ActiveOrdersView, MyDbContext>(ctx =>
from o in ctx.Orders
where o.Status == "Active"
select new ActiveOrdersView
{
OrderId = o.Id,
CustomerName = o.CustomerName,
TotalAmount = o.TotalAmount
})
.WithSchemaBinding()
.HasClusteredIndex(v => v.OrderId);
entity.HasKey(e => e.OrderId);
});
// View with JOIN
modelBuilder.Entity<OrderDetailsView>(entity =>
{
entity.ToView("OrderDetailsView")
.HasViewDefinition<OrderDetailsView, MyDbContext>(ctx =>
from o in ctx.Orders
join c in ctx.Customers on o.CustomerId equals c.Id
select new OrderDetailsView
{
OrderId = o.Id,
CustomerName = c.Name,
CustomerEmail = c.Email,
TotalAmount = o.TotalAmount
});
entity.HasKey(e => e.OrderId);
});
}
ToQueryString() method.WithSchemaBinding() and .HasClusteredIndex() for SQL Server indexed viewsFor views that can't be expressed in LINQ (e.g., CTEs, window functions), use raw SQL:
entity.ToView("ComplexView")
.HasViewSql(@"
WITH SalesCTE AS (
SELECT ProductId, SUM(Quantity) as TotalSales
FROM OrderItems
GROUP BY ProductId
)
SELECT p.Id, p.Name, COALESCE(s.TotalSales, 0) as TotalSales
FROM Products p
LEFT JOIN SalesCTE s ON p.Id = s.ProductId
");
These limitations are documented and may be addressed in future releases.
dotnet build
dotnet test
All tests are located in tests/Chimpiler.Tests with test fixtures in tests/Chimpiler.TestFixtures.
dotnet run --project src/Chimpiler/Chimpiler.csproj -- ef-migrate --assembly <path> --output <path>
Contributions are welcome! Please feel free to submit issues or pull requests.
MIT License - See LICENSE for details.
Future subcommands and features may include:
Chimpiler is designed to grow into a comprehensive database tooling ecosystem. The ef-migrate command is just the beginning.
Built with ❤️ using .NET 10
A multi-purpose CLI tooling ecosystem for .NET.
Chimpiler is an extensible CLI framework designed to provide pragmatic tooling for modern .NET applications and development workflows.
chimpiler clawcker — OpenClaw Instance ManagerClawcker makes it trivially easy to create, run, and access local OpenClaw instances using Docker. Get started with just three commands:
chimpiler clawcker new myagent
chimpiler clawcker start myagent
chimpiler clawcker talk myagent
Key Features:
chimpiler ef-migrate — EF Core Model → DACPAC GeneratorThe ef-migrate command generates one or more DACPAC files from EF Core DbContext models defined in a compiled .NET assembly. Each DbContext represents a distinct database, and the tool emits one DACPAC per DbContext without requiring:
Key Benefits:
chimpiler dacpac apply — DACPAC → PostgreSQL Schema DeploymentThe dacpac apply command reads SQL Server Database Project DACPACs through public DacFx APIs and
translates a deliberately limited, validated subset into PostgreSQL DDL.
export CHIMPILER_DACPAC_CONNECTION_STRING='Host=localhost;Database=app;Username=app;Password=...'
chimpiler dacpac apply ./Database.dacpac --dry-run
chimpiler dacpac apply ./Database.dacpac
Safety and deployment behavior:
--allow-destructive is suppliedThis is not SqlPackage for PostgreSQL. Chimpiler independently implements the PostgreSQL planner and executor and uses DacFx only to read the package model through public APIs.
Learn more about dacpac apply →
chimpiler kb — Local GraphRAG Knowledge BaseThe kb command builds and queries a completely local, zero-cloud, zero-Python knowledge base
stored in a single SQLite file. It is designed for local CLI and agent harness use: agents can
retrieve direct evidence, then maintain a focused, evidence-backed graph of entities and
relationships using the agent's own reasoning.
chimpiler kb init
chimpiler kb add ./docs
chimpiler kb graph-search "how do I generate a dacpac?"
Key Features:
IEmbeddingProvider for future cloud providersCopy this into a local/CLI agent harness before asking it to use a knowledge base:
Use Chimpiler's local KB as your knowledge-retrieval tool.
If `chimpiler` is not available, install it with:
dotnet tool install --global Chimpiler --add-source https://api.nuget.org/v3/index.json --ignore-failed-sources
Then run:
chimpiler kb prompt
Follow that output. Use `chimpiler kb search` for direct evidence. Delegate distinct source themes
to subagents when useful, returning only cited entity/relationship candidates to the orchestrator.
Register only verified entities and relationships, then use `chimpiler kb graph-search --depth 2`
to follow those focused evidence links. Depth is relationship hops; inspect each returned `trail:`
and cited source before treating a `(graph)` result as evidence.
Install Chimpiler globally using the .NET CLI:
dotnet tool install -g Chimpiler
To update to the latest version:
dotnet tool update -g Chimpiler
If a configured package mirror reports an older version or the installed CLI lacks kb, use
NuGet.org explicitly:
dotnet tool update -g Chimpiler --add-source https://api.nuget.org/v3/index.json --ignore-failed-sources
chimpiler kb --help
After installation, run chimpiler kb prompt for concise instructions that can be injected into a
local agent's context.
git clone https://github.com/joelmartinez/chimpiler.git
cd chimpiler
dotnet build
dotnet pack src/Chimpiler/Chimpiler.csproj -c Release
dotnet tool install -g --add-source ./src/Chimpiler/bin/Release Chimpiler
Generate DACPACs for all DbContexts in an assembly:
chimpiler ef-migrate --assembly path/to/YourApp.dll
Preview applying a DACPAC to PostgreSQL:
chimpiler dacpac apply path/to/Database.dacpac \
--provider postgresql \
--connection-string "$CHIMPILER_DACPAC_CONNECTION_STRING" \
--dry-run
Write a reviewable script without changing the target:
chimpiler dacpac apply path/to/Database.dacpac --script ./deployment.sql
This will discover all DbContext types in the assembly and generate a DACPAC for each in the ./output directory.
Generate a DACPAC for a specific DbContext:
chimpiler ef-migrate --assembly path/to/YourApp.dll --context YourNamespace.OrdersDbContext
chimpiler ef-migrate --assembly path/to/YourApp.dll --output ./dacpacs
chimpiler ef-migrate --assembly path/to/YourApp.dll --verbose
dacpac applyApply a supported DACPAC schema subset to PostgreSQL.
| Option | Required | Description | Default |
|---|---|---|---|
<dacpac> | ✅ | Path to the DACPAC | - |
--provider | ❌ | Target provider (postgresql; MySQL reserved for future support) | postgresql |
--connection-string | ✅* | Target connection string | CHIMPILER_DACPAC_CONNECTION_STRING |
--dry-run | ❌ | Print the plan and roll back | false |
--script <path> | ❌ | Write the plan and roll back | - |
--allow-destructive | ❌ | Permit reviewed destructive operations | false |
* Required through either the option or environment variable.
ef-migrateGenerate DACPACs from EF Core DbContext models.
Options:
| Option | Alias | Required | Description | Default |
|---|---|---|---|---|
--assembly | -a | ✅ | Path to compiled .NET assembly containing DbContext types | - |
--context | -c | ❌ | Fully qualified type name of a specific DbContext | All DbContexts |
--output | -o | ❌ | Output directory for generated DACPACs | ./output |
--framework | -f | ❌ | Target framework hint for multi-targeted assemblies | - |
--verbose | -v | ❌ | Enable detailed logging | false |
DACPAC files are named based on the DbContext type name with the following rules:
Context suffix if presentDbContext suffix if present.dacpacExamples:
| DbContext Type | DACPAC Filename |
|---|---|
TheDatabaseContext | TheDatabase.dacpac |
OrdersDbContext | Orders.dacpac |
ReportingContext | Reporting.dacpac |
InventoryContext | Inventory.dacpac |
DbContext| Feature | Chimpiler ef-migrate | EF Core Migrations |
|---|---|---|
| Approach | State-based (DACPAC) | Migration-based |
| Output | .dacpac files | C# migration files |
| Database Required | ❌ No | ❌ No |
| Deployment | SqlPackage / Azure DevOps | dotnet ef database update |
| Change Tracking | Handled by SqlPackage | Handled by EF Core |
| Reversibility | Via DACPAC snapshots | Via down migrations |
When to use Chimpiler:
When to use EF Migrations:
| Feature | Chimpiler ef-migrate | SSDT |
|---|---|---|
| Schema Source | EF Core models | Hand-written SQL |
| Tooling | CLI | Visual Studio |
| Automation | ✅ Full | ⚠️ Limited |
| Learning Curve | Low (if you know EF) | Medium-High |
| Advanced SQL Features | ⚠️ Limited | ✅ Full |
When to use Chimpiler:
When to use SSDT:
| Feature | Chimpiler ef-migrate | EF Core Power Tools |
|---|---|---|
| Execution | CLI / Automated | UI / Manual |
| Output | DACPACs | SQL scripts (via UI) |
| CI/CD Friendly | ✅ Yes | ❌ No |
| Visual Studio Required | ❌ No | ✅ Yes |
✅ Supported:
⚠️ Not Yet Supported:
The ef-migrate tool now supports SQL Server views, including indexed views. To use views, install the Chimpiler.EfMigrate package in your DbContext project:
dotnet add package Chimpiler.EfMigrate
Views are defined using a fluent API in your OnModelCreating method:
using Chimpiler.EfMigrate;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Simple view over a single table
modelBuilder.Entity<UserSummaryView>(entity =>
{
entity.ToView("UserSummaryView")
.HasViewDefinition<UserSummaryView, MyDbContext>(ctx =>
from u in ctx.Users
select new UserSummaryView
{
Id = u.Id,
FullName = u.FirstName + " " + u.LastName,
Email = u.Email
});
entity.HasKey(e => e.Id);
});
// Indexed view with SCHEMABINDING
modelBuilder.Entity<ActiveOrdersView>(entity =>
{
entity.ToView("ActiveOrdersView")
.HasViewDefinition<ActiveOrdersView, MyDbContext>(ctx =>
from o in ctx.Orders
where o.Status == "Active"
select new ActiveOrdersView
{
OrderId = o.Id,
CustomerName = o.CustomerName,
TotalAmount = o.TotalAmount
})
.WithSchemaBinding()
.HasClusteredIndex(v => v.OrderId);
entity.HasKey(e => e.OrderId);
});
// View with JOIN
modelBuilder.Entity<OrderDetailsView>(entity =>
{
entity.ToView("OrderDetailsView")
.HasViewDefinition<OrderDetailsView, MyDbContext>(ctx =>
from o in ctx.Orders
join c in ctx.Customers on o.CustomerId equals c.Id
select new OrderDetailsView
{
OrderId = o.Id,
CustomerName = c.Name,
CustomerEmail = c.Email,
TotalAmount = o.TotalAmount
});
entity.HasKey(e => e.OrderId);
});
}
ToQueryString() method.WithSchemaBinding() and .HasClusteredIndex() for SQL Server indexed viewsFor views that can't be expressed in LINQ (e.g., CTEs, window functions), use raw SQL:
entity.ToView("ComplexView")
.HasViewSql(@"
WITH SalesCTE AS (
SELECT ProductId, SUM(Quantity) as TotalSales
FROM OrderItems
GROUP BY ProductId
)
SELECT p.Id, p.Name, COALESCE(s.TotalSales, 0) as TotalSales
FROM Products p
LEFT JOIN SalesCTE s ON p.Id = s.ProductId
");
These limitations are documented and may be addressed in future releases.
dotnet build
dotnet test
All tests are located in tests/Chimpiler.Tests with test fixtures in tests/Chimpiler.TestFixtures.
dotnet run --project src/Chimpiler/Chimpiler.csproj -- ef-migrate --assembly <path> --output <path>
Contributions are welcome! Please feel free to submit issues or pull requests.
MIT License - See LICENSE for details.
Future subcommands and features may include:
Chimpiler is designed to grow into a comprehensive database tooling ecosystem. The ef-migrate command is just the beginning.
Built with ❤️ using .NET 10