Skip to content
Esc
↑↓navigate↵open⌘Jpreview
On this page

Contributing

Set up the Vadivam monorepo, add or update icons through the Figma and SVG workflow, and validate package or documentation changes.

Vadivam is a Bun monorepo. Source SVGs in the root icons/ and icons-solid/ directories are canonical; package distributions and website assets are generated and must not be edited by hand.

Requirements

  • Bun at the version pinned in the root package.json (packageManager).
  • Node.js 24 for the full test suite. The Angular integration app needs Node 22.22.3 or newer.
  • Playwright’s Chromium for the framework integration apps, installed once with bunx playwright install --with-deps chromium.

Set up the repository

Clone the repository

git clone https://github.com/praveenjuge/vadivam.git
cd vadivam

Install dependencies

bun install

This also installs a pre-commit hook that optimizes and checks icons before each commit.

Start the docs site

bun run dev  # docs at http://localhost:4321

Stop the dev server before running the full test suite, which builds and checks the docs on the same port.

Keep pull requests focused and describe visible changes and package API changes.

Add or update an icon

Add or replace only the source SVGs: the outline in icons/ and its solid twin in icons-solid/, both named after the icon’s current Lucide name. Draw them to the design guide, then follow How icons are built to normalize, validate, and build them. A new icon first needs its Lucide tags and categories, since metadata/lucide.json lists only icons that have a drawing, and a font codepoint:

bun run icons:metadata -- /path/to/lucide-checkout  # new icons: tags and categories
bun run icons:font-codepoints                       # new icons: font codepoints
bun run icons:draft-solid                           # draft any missing solid icons from their outlines
bun run icons:optimize                             # clean paths and smooth corners in place
bun run icons:check                                # validate without writing
bun run icons:build                                # regenerate packages and site assets

The Lucide checkout must be on the release tag pinned as lucideVersion in metadata/lucide.json. Commit the updated metadata/lucide.json and scripts/font-codepoints.json with the SVG.

Do not hand-edit generated output to fix an icon; correct the canonical SVG and regenerate.

Validate changes

Run the full project checks before submitting:

bun run test

It regenerates the packages, runs every unit test, builds and checks the docs site, and builds every framework integration app, checking the plain HTML, Vue, Svelte, Solid, Angular, Astro, Preact, Qwik, and Lit apps in Chromium. Focused commands are available while iterating:

Command Checks
bun run icons:check Icon rules and names
bun run test:vadivam Core SVG package
bun run test:vadivam-react React package
bun run test:vadivam-react-native React Native package
bun run test:vadivam-mcp MCP server
bun run test:shadcn shadcn/ui registry, including a real shadcn add
bun run test:integration Framework integration app builds, their Chromium checks, and the Expo app
bun run test:native Flutter and Compose packages: analyze, widget and unit tests, a pub.dev dry run, and an Android library build

bun run test doesn’t need native toolchains. bun run test:native needs the Flutter SDK, a JDK (17 or newer), Gradle 9, and the Android SDK; CI runs it on every pull request.

Documentation changes

Documentation source lives in apps/docs/docs. Use Markdown where possible, and MDX only when a page needs built-in components. Include title and description YAML frontmatter, keep examples executable, and use links rooted at /docs for documentation pages.

For package behavior, verify the package README, package.json export map, and generated public declarations before documenting it. Do not infer an API from another framework package: providers, dynamic exports, fallback types, and peer ranges differ.

Report bugs or propose changes through GitHub issues.

Last updated on

Was this page helpful?