# Line Liff

> Builds and debugs LIFF (LINE Front-end Framework) web apps — `liff.init`, login, sendMessages, Share Target Picker, scanCodeV2, requestFriendship, permanent links, permission/scopes, pluggable SDK tree-shaking, LIFF plugins, LIFF Server API, LIFF CLI, and server-side ID token verification. Use when the user mentions LIFF, LIFF SDK, `@line/liff`, web apps inside LINE, Endpoint URL setup, LIFF browser vs external browser, LIFF-to-LIFF transitions, or any liff.* API.

- Skill: `kuhaku-lab/line-liff` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add kuhaku-lab/line-liff`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kuhaku-lab/line-liff/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: kuhaku-lab (https://skillmd.com/u/kuhaku-lab)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kuhaku-lab/line-liff

---


# LINE LIFF (Front-end Framework)

**Do not answer LIFF questions from memory — LINE updates APIs frequently and training data is unreliable. Always consult the references below.**

Reference for building, reviewing, and debugging LIFF web apps inside LINE.

## Workflow

### Build
1. Read [references/guidelines.md](references/guidelines.md) (registration, endpoint URL rules, environment compatibility)
2. Load the relevant reference for the feature being implemented
3. For architecture or design choices, consult [references/experts.md](references/experts.md) for directional guidance
4. Write code following specs and constraints from references

### Review / Debug
1. Read [references/guidelines.md](references/guidelines.md) (URL constraints, authentication flow, API availability)
2. Load relevant references for the code being reviewed
3. Cross-check code against specs (endpoint URL rules, scope requirements, environment limitations, init order)
4. For design pattern concerns, consult [references/experts.md](references/experts.md)
5. Report violations with reference to specific constraints

## Environment Variables

```
LIFF_ID=LIFF app ID (from LINE Developers Console)
LINE_LOGIN_CHANNEL_ID=LINE Login Channel ID (for server-side JWT verification)
LINE_LOGIN_CHANNEL_SECRET=Channel secret (server-side only)
CHANNEL_ACCESS_TOKEN=Channel access token (for LIFF Server API — manage LIFF apps programmatically)
```

## SDK

Install via CDN or npm. For tree-shaking (reduce ~34% bundle size), use pluggable SDK.

SDK installation, CDN/npm setup, pluggable SDK → **[references/api-reference.md § Pluggable SDK](references/api-reference.md)**

## Initialization

```javascript
liff.init({ liffId: 'YOUR_LIFF_ID', withLoginOnExternalBrowser: true })
  .then(() => { /* use LIFF APIs */ })
  .catch(err => console.error(err.code, err.message));
```

- Must be called before all LIFF APIs (except pre-init methods)
- `withLoginOnExternalBrowser: true` — auto-trigger login in external browser
- `liff.ready` — Promise that resolves when init completes

## Getting Started

1. Create a **LINE Login channel** in [LINE Developers Console](https://developers.line.biz/console/)
2. Add a **LIFF app** and set the **Endpoint URL** (HTTPS required)
3. Integrate SDK, call `liff.init()`
4. Or scaffold with `npx @line/create-liff-app` (React/Vue/Svelte/Next.js/Nuxt/vanilla)

## API Reference

Complete API reference (methods, parameters, scopes, availability matrix) → **[references/api-reference.md](references/api-reference.md)**

## View Sizes

| Type | Coverage |
|------|----------|
| Full | 100% screen |
| Tall | ~75% |
| Compact | ~50% |

## Key Constraints

- **Endpoint URL**: `liff.init()` only works at or below the registered Endpoint URL
- **URL handling**: modify URLs only after `liff.init()` resolves
- **Universal Links**: use `https://liff.line.me/{liffId}` as primary entry point
- **Token security**: send raw ID Token to server for verification, never expose decoded token → see [server-auth.md](references/server-auth.md)
- **Login behavior differs**: auto in LIFF browser, manual in external browser
- **Deprecated APIs**: `liff.scanCode()` → use `scanCodeV2()`; `liff.getLanguage()` → use `getAppLanguage()`; `liff.permanentLink.createUrl()` → use `createUrlBy()` (may be removed in v3)

## Reference Index

| File | Topic |
|------|-------|
| [references/api-reference.md](references/api-reference.md) | LIFF v2 API complete reference, pluggable SDK modules, error codes |
| [references/guidelines.md](references/guidelines.md) | Registration, endpoint URL rules, authentication flow, UI/UX, environment compatibility |
| [references/navigation.md](references/navigation.md) | LIFF URLs, liff.state, permanent links, LIFF-to-LIFF transitions, browser minimization |
| [references/plugins.md](references/plugins.md) | LIFF plugin development, hooks system, official plugins (Inspector, Mock) |
| [references/server-api.md](references/server-api.md) | LIFF Server API (v1) — programmatic LIFF app CRUD (create, update, list, delete) |
| [references/server-auth.md](references/server-auth.md) | Server-side ID Token (JWT) verification |
| [references/cli.md](references/cli.md) | LIFF CLI — local HTTPS dev server, app CRUD, Inspector debugging, ngrok |
| [references/experts.md](references/experts.md) | LIFF domain experts for architecture guidance |

## SDK & Tools

- **npm**: [@line/liff](https://www.npmjs.com/package/@line/liff)
- **Pluggable SDK**: `@line/liff/core` + individual modules
- **Official plugins**: [@line/liff-inspector](https://www.npmjs.com/package/@line/liff-inspector) | [@line/liff-mock](https://www.npmjs.com/package/@line/liff-mock)
- **LIFF CLI**: [CLI tool](https://developers.line.biz/en/docs/liff/cli-tool-introduction/) (create, serve, deploy, HTTPS dev server)
- **Create LIFF App**: `npx @line/create-liff-app` — scaffolding (React/Vue/Svelte/Next.js/Nuxt/vanilla, JS/TS)
- **LIFF Playground**: [liff-playground.netlify.app](https://liff-playground.netlify.app/) — online API testing
- **Starter app**: [line/line-liff-v2-starter](https://github.com/line/line-liff-v2-starter) (vanilla/Next.js/Nuxt)

