jac-impl-files

Splits Jac declarations from method bodies using impl blocks and paired .impl.jac annex files.

Updated Jul 26, 2026
One-click install
npx skills add https://github.com/nihalnihalani/jachacks-sf-2026 --skill jac-impl-files-nihalnihalani
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: jac-impl-files
Source: https://github.com/nihalnihalani/jachacks-sf-2026/tree/main/plugins/jac-codex/skills/jac-impl-files
Command: npx skills add https://github.com/nihalnihalani/jachacks-sf-2026 --skill jac-impl-files-nihalnihalani

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Large Jac source files become hard to navigate when declarations and implementation bodies are mixed together. This Skill explains how to separate a clean public-API surface from implementation details using impl blocks, .impl.jac annex files, and directory layouts that the Jac compiler auto-pairs by basename. ## Core Features & Use Cases - Impl file layouts: Choose between side-by-side pairing, a shared impl/ directory, or a mod.impl/ directory for splitting one large type by feature. - Declaration-to-impl mapping: Match every declaration form (functions, methods, walker abilities, enums, property accessors, abstract methods) to its correct impl syntax. - Client component handler annexes: Keep frontend components readable by declaring async handler stubs in the component and implementing them in the paired .impl.jac file, with bare access to reactive has state. - Use Case: A Jac module grows past 100 lines with a class containing 20 methods. Use this Skill to split the implementations into a mod.impl/ directory organized by feature while keeping the declaration file as a clean API surface. ## Quick Start Split my oversized Jac module into a declaration file and paired impl annex files using the appropriate layout.

Frequently Asked Questions about jac-impl-files

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I split a Jac file into declaration and implementation files?▼

Keep declarations in mod.jac and move impl blocks into mod.impl.jac, impl/mod.impl.jac, or a mod.impl/ directory. The Jac compiler auto-pairs files by basename, so no import statement is needed between them.

How do I implement client component handlers in a separate Jac file?▼

Declare async handler stubs inside the def:pub component, then implement them as impl app.handler blocks in the paired .impl.jac annex. Inside the impl, reactive has fields are read and written bare without self., and assignments trigger re-renders.

Does Jac require imports between a module and its impl file?▼

No, Jac auto-pairs a .jac file with its .impl.jac annex by basename, so importing between them is wrong. The impl file also sees the head file's imports, so they should not be re-imported.

Why does my Jac impl block fail to match its declaration?▼

The impl signature must match the declaration exactly, including parameter names, types, and return type. A bare impl fn only matches a bare def fn, and a mismatched signature causes pairing to fail.

Is the abst keyword enforced for abstract methods in Jac?▼

No, abst only signals intent. A subclass missing the impl still passes jac check and instantiates, with the unimplemented method silently returning None, so treat abst as documentation rather than enforcement.