:book: Documentation :link: Chariot Platform :computer: Praetorian CLI
Chariot is an expert-driven, all-in-one offensive security platform that helps organizations shift from a reactive "assume breach" mentality to a prevention-first strategy. By actively seeking out vulnerabilities and addressing potential weaknesses before attackers can exploit them, Chariot ensures a robust security posture through continuous offensive security testing.
⚠️ This repository mirrors the SaaS offering at preview.chariot.praetorian.com, enabling you to customize your full user experience.
mkcert
(for creating local HTTPS certificates)Clone the repository:
git clone https://github.com/praetorian-inc/chariot-ui.git
cd chariot-ui
Install dependencies:
npm install
Set up HTTPS certificates using mkcert
:
mkdir certs && cd certs
npx mkcert create-ca
npx mkcert create-cert
cd ..
Start the development server:
npm start
This will start the app on https://localhost:3000.
To create a production build:
npm run build
This will generate optimized static files in the build
directory.
We welcome contributions from the community. To contribute:
git checkout -b feature-branch
).git commit -m 'Add some feature'
).git push origin feature-branch
).Please read our Code of Conduct before contributing.
To add new charts to the Chariot platform, contributors will need to define a new aggregate within the AggregateCollection
. This process involves configuring a new defineAggregate
instance, which shapes how data is processed and visualized within the chart.
Define the Data Type:
Ensure that the data type (e.g., Asset
, Risk
, Seed
) is accurately defined in @/types
. This TypeScript interface should clearly describe the structure of the data, which is essential for accurately accessing and aggregating the data fields.
Create a New Aggregate:
In the relevant aggregate file (e.g., src/utils/aggregates/asset.ts
, src/utils/aggregates/seed.ts
), utilize the defineAggregate
function to define your new chart. Provide:
xField
) for the grouping key.yField
) for the aggregated value.Example:
defineAggregate<Risk>(
'Count of Risks by Status',
risk => risk.status,
'status',
'count'
);
Add to AggregateCollection
:
Include your new aggregate definition in the respective collection, making it available across the application.
Utilize the Aggregate:
Employ the runAggregate
and getAggregates
generic functions to execute and retrieve your new aggregate's results, respectively.
@/types
, these interfaces help ensure that data handling is type-safe and clear to all contributors.getDateFromISO
should be used for data manipulation to maintain consistency and reduce redundancy.If you have any questions or need support, please open an issue or reach out via support@praetorian.com.
This project is licensed under the MIT License - see the LICENSE file for details.