# Scala Kindlings Derivation

> Scala auto-derivation with Kindlings for Circe and PureConfig. Use when replacing circe-generic/circe-generic-extras or PureConfig generic derivation with Kindlings while keeping normal Circe JSON APIs and PureConfig loading/writing APIs.

- Skill: `alexandru/scala-kindlings-derivation` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add alexandru/scala-kindlings-derivation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/alexandru/scala-kindlings-derivation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: alexandru (https://skillmd.com/u/alexandru)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/alexandru/scala-kindlings-derivation

---


# Scala Kindlings Derivation

## Quick start

- Use Kindlings to derive type class instances; keep using library APIs for actual work.
  - Circe: derive `Encoder`, `Decoder`, or `Codec.AsObject`; keep using `asJson`, `decode`, parsers, printers.
  - PureConfig: derive `ConfigReader`, `ConfigWriter`, or `ConfigConvert`; keep using `ConfigSource.load` and PureConfig writers.
- Prefer companion-object instances for root types used at call sites; nested product types are derived as needed.
- Configure derivation with Kindlings config values/hints, not with Circe/PureConfig generic imports.
- Do not import `io.circe.generic.auto._`, `io.circe.generic.semiauto._`, `pureconfig.generic.auto._`, or `pureconfig.generic.semiauto._` when using Kindlings.

## APIs to reach for

- Circe JSON:
  - Use `KindlingsEncoder.derived[A]`, `KindlingsDecoder.derived[A]`, or `KindlingsCodecAsObject.derived[A]`.
  - For one-off operations, use `KindlingsEncoder.encode(value)` or `KindlingsDecoder.decode[A](json)`.
  - Cross-platform.
  - Default field names are unchanged.
  - ADTs are wrapped unless a discriminator is configured.
- PureConfig HOCON:
  - Use `KindlingsConfigReader.derived[A]`, `KindlingsConfigWriter.derived[A]`, or `KindlingsConfigConvert.derived[A]`.
  - JVM-only.
  - Defaults match PureConfig: kebab-case keys, `type` discriminator, defaults enabled, unknown keys allowed.

## References

- Load `references/circe-derivation.md` for Circe derivation, annotations, discriminators, and migration notes.
- Load `references/pureconfig-derivation.md` for PureConfig derivation, default conventions, discriminator configuration, and supported `PureConfig` knobs.
- Load `references/best-practices.md` for organization, call-site hygiene, and validation guidance.

