https://github.com/cratis/arc
Opinionated application model providing glue that makes application development more productive.
https://github.com/cratis/arc
bridge cqrs csharp javascript typescript
Last synced: 2 days ago
JSON representation
Opinionated application model providing glue that makes application development more productive.
- Host: GitHub
- URL: https://github.com/cratis/arc
- Owner: Cratis
- License: mit
- Created: 2024-05-11T10:07:50.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2026-07-22T19:36:32.000Z (3 days ago)
- Last Synced: 2026-07-23T04:48:12.360Z (2 days ago)
- Topics: bridge, cqrs, csharp, javascript, typescript
- Language: C#
- Homepage: https://cratis.io
- Size: 15.4 MB
- Stars: 11
- Watchers: 0
- Forks: 5
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Cratis Arc
## Packages / Deployables
[](http://nuget.org/packages/Cratis.Arc)
[](https://www.npmjs.com/package/@cratis/arc)
## Builds
[](https://github.com/cratis/arc/actions/workflows/dotnet-build.yml)
[](https://github.com/cratis/arc/actions/workflows/javascript-build.yml)
[](https://github.com/Cratis/Documentation/actions/workflows/pages.yml)
## Description
Cratis Arc represents an opinionated approach to building consistent applications based on the concepts behind CQRS.
It offers extensions for different frameworks and is built on top of ASP.NET Core. One of the traits of Arc has is the
bridging between the backend and the frontend. Arc provides a tool, called **ProxyGenerator** that generates TypeScript
code for recognized artifacts matching the criteria of what is considered a **commmand** or a **query**.
## Support
Cratis is an open community, and we are glad to help users, teams evaluating the stack, and contributors.
| Channel | Details |
|---|---|
| Discord | Join the community on [Discord](https://discord.gg/kt4AMpV8WV) for questions and discussions |
| GitHub Issues | [Report bugs or request features](https://github.com/Cratis/Arc/issues) |
| Documentation | Read the docs at [cratis.io](https://cratis.io) |
## Contributing
If you want to jump into building this repository and possibly contributing, please refer to [contributing](./Documentation/contributing/index.md).
### Prerequisites
The following are prerequisites to work with this repository.
* [.NET SDK 10.0.301+](https://dotnet.microsoft.com/en-us/). Arc's analyzers and source generators are built
against Roslyn 5.6.0, which ships with .NET SDK 10.0.301 and newer. On an older SDK band the compiler
refuses to load them (CS9057), silently disabling proxy generation and the ARC*/ARCCHR* analyzers.
Consuming the `Cratis.Arc` packages carries the same floor. Raising this floor is a minor version bump.
* [Node 16+](https://nodejs.org/en)
* [Yarn](https://yarnpkg.com)
### Central Package Management
This repository leverages [Central Package Management](https://learn.microsoft.com/en-us/nuget/consume-packages/Central-Package-Management), which
means that all package versions are managed from a file at the root level called [Directory.Packages.props](./Directory.Packages.props).
In addition there are also [Directory.Build.props](https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-by-directory?view=vs-2022#directorybuildprops-and-directorybuildtargets) files for
setting up common settings that are applied cross cuttingly.
### Root package.json
The `package.json` found at the root level defines all the workspaces. It is assumed
All developer dependencies are defined in the top level `package.json`. The reason for this is to be able to provide global scripts
for every package to use for easier maintenance.
The `package.json` found at the top level contains scripts that can then be used in a child project for this to work properly.
In a package, all you need to do is to define the scripts to use the global scripts in the `package.json´ of that project:
```json
{
"scripts": {
"prepublish": "yarn g:build",
"clean": "yarn g:clean",
"build": "yarn g:build",
"lint": "yarn g:lint",
"lint:ci": "yarn g:lint:ci",
"test": "yarn g:test",
"ci": "yarn g:ci",
"up": "yarn g:up"
}
}
```