All skills
open-circle avatar

/repo-structure-navigate

@1a60fd8
by Open Circleopen-circle/formisch1.2k stars
36

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

  • 1 file
  • 5.6 KB
  • Updated 2 months ago
  • GitHub

Use this Skill: https://skilld.dev/gh/open-circle/formisch/repo-structure-navigate

This session only. Nothing lands on disk.

SKILL.md

β‰ˆ52 tokens always: the name and description. β‰ˆ1.4k when used: this file.

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 (Angular, Preact, Qwik, React, React Native, 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 (angular, preact, qwik, react, react-native, 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, getDeepErrorEntries, getDeepErrors, getDirtyInput, getDirtyPaths, getErrors, getInput, handleSubmit, insert, move, pickDirty, 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

Source: SKILL.md on GitHub

No third-party reports yet.

Signed by skilld at 1a60fd8. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 5 days ago.

Activeupdated 2 months ago
metadata
{
  "author": "formisch",
  "version": "1.0"
}

README badge

README badge for open-circle/formisch/repo-structure-navigate