# vfunc.js
**UI를 평범한 함수로. 빌드도, 가상 DOM도 없이 — 스크립트 파일 하나로.**
[English](README.md) · [웹사이트](https://vidkid-indy.github.io/vfunc/ko/) · [토론 게시판](https://github.com/vidkid-indy/vfunc/discussions)
> **상태: 1.0 릴리스 후보(`1.0.0-rc.5`).** 1.0 API는 완성되었고, 1.0.0 전의 변경은 릴리스 후보 피드백에서만 나옵니다.
vfunc.js는 인터랙티브한 페이지와 SPA를 만드는 작은 바닐라 자바스크립트 라이브러리입니다.
핵심 개념은 **"HTML은 그대로 쓰고, 제어가 필요한 곳만 vfunc 컴포넌트로 만든다"**입니다.
- **빌드 없음** — `
```
```js
// app.js
const counter = vf.vfunc({
state: { count: 0 },
render: (s) => vf.html``,
delegates: [{ selector: '[data-action="inc"]', eventType: 'click',
onEvent: (e) => { e.sender.count++; } }]
});
counter.mount('#counter');
```
npm(ES 모듈, 브라우저에서도 번들러 없이 씁니다):
```bash
npm install vfunc@next
```
```js
import vf from 'vfunc';
```
| 파일 | 용도 |
|---|---|
| `dist/vfunc.min.js` | 운영용, 전역 `vf` |
| `dist/vfunc.js` | 개발용, 경고 포함 |
| `dist/vfunc.esm.min.js`, `dist/vfunc.esm.js` | ES 모듈 |
| `dist/vfunc.legacy.min.js` | IE11과 Edge IE 모드(ES5, 같은 API) |
| `css/vfunc.tokens.css` | 선택 사항인 중립 디자인 토큰(`--vf-*`) |
| `ai/` | `llms.txt`, `llms-full.txt`, `AGENTS.md` 템플릿, 프롬프트, 디자인 템플릿 |
## 배우기
- [웹사이트](https://vidkid-indy.github.io/vfunc/ko/) — 시작하기, 가이드, API 레퍼런스, AI 프롬프트.
- [예제](https://vidkid-indy.github.io/vfunc/layer1/examples/) — 빌드 없이 실행하는 샘플 21종([소스](layer1/examples/)).
- [스타터](layer1/starter/) — 라우터, 스토어, 다국어, 테마, 버전 폴더 배포가 들어 있는 프로젝트 뼈대.
- [AI 킷](layer1/ai/) — `llms.txt`와 `AGENTS.template.md`를 AI 어시스턴트에게 주세요.
- [확장](EXTENDING.md) — vfunc를 고치지 않고 `vf.use`로 플러그인을 붙이는 방법.
## 지원 브라우저
| 빌드 | 브라우저 |
|---|---|
| `vfunc.min.js`, ESM | Chrome, Edge, Firefox, Safari 최신 버전(데스크톱·모바일). 변경할 때마다 Chromium, Firefox, WebKit에서 테스트합니다 |
| `vfunc.legacy.min.js` | Internet Explorer 11과 Edge IE 모드. 앱 코드도 ES5로 써야 합니다 |
## 레이어
| 레이어 | 내용 | 상태 |
|---|---|---|
| layer1 | 엔진 `vf.vfunc`와 헬퍼(`attach`, `html`, `router`, `store`, `i18n`, `fmt`) | 1.0 릴리스 후보 |
| layer2 | 클래스 없는 컴포넌트(`vs*`는 문자열, `vf*`는 인스턴스 반환), 그리드, 차트, 서드파티 어댑터 | 계획 |
| layer3 | 클래스 기반 프레임워크(`VClass`)와 도구 | 계획 |
## 기여와 보안
- [CONTRIBUTING.md](CONTRIBUTING.md) — 기여는 DCO(`Signed-off-by`) 방식으로 받습니다.
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
- [SECURITY.md](SECURITY.md) — 취약점은 공개 이슈가 아니라 비공개로 제보해 주세요.
## 라이선스
[Apache License 2.0](LICENSE). vfunc.js를 재배포할 때는 배포 파일의 헤더 주석과 [NOTICE](NOTICE) 파일을 유지해 주세요.