📖 Documentation 🔗 Chariot Platform 💻 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.
- Attack Surface Management: Continuously monitor all attack vectors including external, internal, cloud, web app, secrets, phishing, rogue IT, and supplier/vendor risk.
- Continuous Penetration Testing: Perform strategic, adversarial-focused assessments to identify critical issues.
- Continuous Red Teaming: Test your cybersecurity program’s resilience over time.
- Breach & Attack Simulation: Simulate known exploitations to identify gaps in prevention and detection plans.
- Node.js (v20.14.0)
- npm (10.7.0)
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:
- Fork the repository.
- Create a new branch (
git checkout -b feature-branch
). - Make your changes.
- Commit your changes (
git commit -m 'Add some feature'
). - Push to the branch (
git push origin feature-branch
). - Open a pull request.
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 thedefineAggregate
function to define your new chart. Provide:- A meaningful label for the chart.
- A function to extract the key for grouping data.
- The field name (
xField
) for the grouping key. - The field name (
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
andgetAggregates
generic functions to execute and retrieve your new aggregate's results, respectively.
- Types: Defined in
@/types
, these interfaces help ensure that data handling is type-safe and clear to all contributors. - Utilities: Common utilities like
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.