askill
repo-structure-navigate

repo-structure-navigateSafety 100Repository

Navigate the Formisch monorepo structure. Use when finding code locations, understanding architecture, locating source files, or implementing features across packages and frameworks.

603 stars
12.1k downloads
Updated 2/11/2026

Package Files

Loading files...
SKILL.md

Repository Navigation

Quick reference for understanding and navigating the Formisch repository structure.

Overview

Formisch is a schema-based, headless form library with a framework-agnostic core supporting multiple frameworks (Preact, Qwik, React, Solid, Svelte, Vue). Framework-specific reactivity is injected at build time for native performance.

Architecture:

  • Monorepo with pnpm workspaces
  • Framework-agnostic core + framework-specific wrappers
  • TypeScript throughout with Valibot schemas

Directory Structure

formisch/
├── packages/         # Core packages
│   ├── core/         # Framework-agnostic form logic
│   └── methods/      # Form manipulation methods
├── frameworks/       # Framework-specific wrappers (preact, qwik, react, solid, svelte, vue)
├── playgrounds/      # Testing environments per framework
├── scripts/          # Automation scripts
├── website/          # Documentation site
├── skills/           # Agent skills (this folder)
└── prompts/          # Legacy AI agent guides (deprecated)

Core Packages

/packages/core/@formisch/core

Framework-agnostic form logic. Builds to framework-specific outputs via tsdown.config.ts.

Key directories:

  • src/array/ - Array field utilities
  • src/field/ - Field management
  • src/form/ - Form state management
  • src/framework/ - Framework reactivity integration (injected at build time)
  • src/types/ - TypeScript types

/packages/methods/@formisch/methods

Form manipulation utilities. Each method in its own directory (src/{method-name}/).

Available methods: focus, getAllErrors, getErrors, getInput, handleSubmit, insert, move, remove, replace, reset, setErrors, setInput, submit, swap, validate

Framework Packages

/frameworks/{framework}/@formisch/{framework}

Thin wrappers that:

  1. Export framework-specific core build
  2. Provide framework-native components/primitives
  3. Re-export methods

Structure:

frameworks/{framework}/
├── src/
│   ├── components/    # Form, Field components
│   ├── primitives/    # createForm/useForm, useField, useFieldArray
│   ├── types/         # Framework-specific types
│   └── index.tsx      # Main export

Playgrounds

/playgrounds/{framework}/

Minimal apps for testing. Use workspace dependencies (workspace:*). Run with pnpm dev.

Website

/website/

Documentation site built with Qwik. Update when APIs change.

Quick Reference

Finding Code

Looking for...Location
Form state logic/packages/core/src/form/
Field management/packages/core/src/field/
Array utilities/packages/core/src/array/
Methods (submit, reset, etc.)/packages/methods/src/{method-name}/
Framework components/frameworks/{framework}/src/components/
Framework primitives/frameworks/{framework}/src/primitives/
Type definitions/packages/core/src/types/
Usage examples/playgrounds/{framework}/src/
Documentation/website/src/routes/

Commands

pnpm install  # Install dependencies
pnpm build    # Build a package
pnpm test     # Run tests
pnpm lint     # Lint and type check

Common Workflows

Adding a Core Feature

  1. Implement in /packages/core/src/
  2. Add framework-specific code in /packages/core/src/framework/
  3. Update exports in index files
  4. Test in playgrounds
  5. Update docs in /website/

Adding a Method

  1. Create /packages/methods/src/{method-name}/
  2. Export from /packages/methods/src/index.ts
  3. Test in playground and document on website

Adding Framework Support

  1. Create /packages/core/src/framework/{framework}.ts
  2. Configure build in tsdown.config.ts
  3. Create /frameworks/{framework}/ package
  4. Create playground in /playgrounds/{framework}/

Important Rules

Code Style

  • TypeScript throughout
  • Use Prettier and ESLint
  • Add JSDoc for public APIs
  • camelCase for functions/variables, PascalCase for components/types

Imports

  • Relative imports within packages
  • Package imports across packages
  • Prefer named exports

Testing

  • Tests next to implementation (.test.ts)
  • Use Vitest
  • Run: pnpm test

Architecture

Framework-agnostic core - Written once, compiled to framework-specific versions via tsdown.config.ts. Framework reactivity is injected at build time from /packages/core/src/framework/{framework}.ts. This ensures:

  • Native performance per framework
  • Consistent behavior across frameworks
  • Minimal bundle size

Best Practices

  • Code differs between frameworks - always check the target framework
  • Check playgrounds for real-world usage examples
  • TypeScript types are the source of truth
  • Follow existing patterns in the codebase
  • Test incrementally (build → test → playground)
  • Update website docs when changing APIs
  • Use workspace:* dependencies in playgrounds

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

68/100Analyzed 2/19/2026

High-quality, comprehensive documentation for navigating the Formisch monorepo with excellent actionability and clarity. Contains detailed directory mappings, quick reference tables, and step-by-step workflows for common tasks. Strong bonus from having clear 'when to use' section, structured steps, skills folder location, and high-density technical content. Main limitation is very low reusability as it's entirely specific to this Formisch project with exact paths and architecture details. Tags are somewhat mismatched (ci-cd, linting, testing vs repo navigation). Overall score reflects a well-crafted but highly specialized repo-specific skill."

100
85
25
80
90

Metadata

Licenseunknown
Version-
Updated2/11/2026
Publisheropen-circle

Tags

ci-cdlintingtesting