Thanks for your interest in contributing to Basalt! This document covers the process for submitting changes.
- Fork the repository
- Clone your fork and create a branch:
git clone https://github.com/<your-username>/basalt.git cd basalt/cli go build ./... go test ./...
- Make your changes on a feature branch:
git checkout -b my-feature
All Go source lives under cli/, all web UI source under web/. See AGENTS.md for architecture, build commands, and conventions.
# Go backend
cd cli
go build ./... # build
go test ./... # test
go vet ./... # lint
# Web frontend
cd web
pnpm install # install deps
pnpm dev # dev server
pnpm build # production build
pnpm typecheck # type checkEach module lives in its own package under cli/internal/modules/<name>/ and implements the modules.Module interface:
Name() string-- short identifierDescription() string-- one-line summaryCanHandle(nodeType string) bool-- which node types this module acceptsExtract(ctx, node, client) (nodes, edges, error)-- the actual workVerify(ctx, client) (HealthStatus, string)-- health check
Follow the pattern of existing modules (e.g., twitch, github). Register your module in cli/cmd/scan.go.
Every module must include a *_test.go file with at least:
TestCanHandle-- verifies accepted node typesTestExtractFound-- happy path with a mock HTTP serverTestExtractNotFound-- 404 handlingTestVerify-- health check
The frontend is a React 19 + TypeScript SPA in web/. Key conventions:
- Icons come from
lucide-react. Import individual icons, not the barrel export. - All styling is plain CSS in
web/src/index.cssusing CSS custom properties. No Tailwind, no CSS-in-JS. - Components live in
web/src/components/, pages inweb/src/pages/. - Run
pnpm buildafter changes to update the assets embedded in the Go binary.
- Ensure all tests pass:
cd cli && go test ./... - Keep commits focused -- one logical change per commit
- Write clear commit messages describing why, not just what
- Open a pull request against
main
- Keep PRs small and focused on a single concern
- Include tests for new functionality
- Update documentation if behavior changes
- Link related issues in the PR description
Open an issue at github.com/KyleDerZweite/basalt/issues with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Basalt version (
basalt --version)
Be respectful and constructive. This project exists to help people understand their own digital footprint. Any use against others without explicit consent is outside the scope of this project and will not be supported.
By contributing, you agree that your contributions will be licensed under the GNU Affero General Public License v3.0.