https://github.com/stephenott/cammand
Alternative UI to Camunda BPM Webapps (Tasklist, Cockpit, and Admin) + More!
https://github.com/stephenott/cammand
camunda
Last synced: 12 days ago
JSON representation
Alternative UI to Camunda BPM Webapps (Tasklist, Cockpit, and Admin) + More!
- Host: GitHub
- URL: https://github.com/stephenott/cammand
- Owner: StephenOTT
- License: mit
- Created: 2021-05-22T13:37:41.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-06-21T00:03:40.000Z (10 months ago)
- Last Synced: 2025-03-27T17:51:57.175Z (30 days ago)
- Topics: camunda
- Language: C#
- Homepage:
- Size: 13.4 MB
- Stars: 80
- Watchers: 12
- Forks: 31
- Open Issues: 48
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Cammand
Alternative UI to Camunda BPM Webapps (Tasklist, Cockpit, and Admin) + More!
Default app is a "Kitchen Sick" app that covers runtime and history apis.
Contributions and collaboration is always welcomed.
## Features:
1. Extendable
2. Customizable
3. Enterprise Friendly
4. White-label Friendly
5. Theme-able
6. Runtime and History API access!
7. Swap APIs for your custom endpoints
8. What more do you need?# Quick Start for Demos and Development Testing
See [Docker](./docker) folder
## Screenshots
### Process Definitions







### BPMN Data Overlays

### BPMN Element Selection
Analyze your BPMN Element configurations (WIP):





### Deployments and Forms


### Process Instances





### Start a Process and Tasklist

### Jobs
## Quick Start
1. open terminal at `./src/MainApp`
1. run `dotnet run`
1. got to `localhost:5001`Requires HTTPS on the Camunda API endpoint.
## Quick SpringBoot Configs for Camunda:
Development use only.
```kotlin
@Configuration
class CamundaConfig {@Bean
fun processCorsFilter(): FilterRegistrationBean<*> {
val source = UrlBasedCorsConfigurationSource()
val config = CorsConfiguration()
config.allowCredentials = true
config.addAllowedOrigin("https://localhost:5001")
config.addAllowedHeader("*")
config.addAllowedMethod("*")
source.registerCorsConfiguration("/**", config)val bean = FilterRegistrationBean(CorsFilter(source))
bean.order = 0
return bean
}
}@Configuration
class CamundaSecurityFilter {
@Bean
fun processEngineAuthenticationFilter(): FilterRegistrationBean<*> {
val registration = FilterRegistrationBean()
registration.setName("camunda-auth")
registration.filter = getProcessEngineAuthenticationFilter()
registration.addInitParameter(
"authentication-provider",
"org.camunda.bpm.engine.rest.security.auth.impl.HttpBasicAuthenticationProvider"
)
registration.addUrlPatterns("/engine-rest/*")
return registration
}@Bean
fun getProcessEngineAuthenticationFilter(): Filter {
return ProcessEngineAuthenticationFilter()
}
}
```application.yml
```yml
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: MYPASSWORD
server.ssl.key-store-type: PKCS12
server.ssl.key-alias: tomcat
```# Code Examples
## Generate Overlays for BPMN Model:
```c#
async Task SetupDocumentationOverlays()
{
var overlays = _bpmnViewer.BpmnElements.FindAll(el => el.BusinessObject.HasDocumentation())
.Select(i => new OverlayConfig(i.InternalId, element =>
{
return new OverlayConfig(
elementId: i.InternalId,
overlayRenderFragment: _ => @,
positionTop: -25,
positionLeft: (element.Width / 2) - 5,
tags: new[] {"documentation"}
);
}));_overlayConfigs.AddRange(overlays);
}
```