Animated Circular Progress Bar0
Font.Lokio
CLI

Lokio Syntax

Referensi lengkap sintaks Lokio: output, kondisi, loop, dan komentar di template


Fitur Lanjutan#


Multi-File Template#

Satu template bisa menghasilkan beberapa file sekaligus. Cocok untuk pola seperti:

  • Screen + ViewModel + Test
  • Controller + Service + DTO
  • Entity + Repository + Migration

Setup di configs.yaml#

templates:
  - name: screen
    description: Flutter screen dengan ViewModel
    files:
      - path: screen/view.lokio
        output: lib/features/<%= snakeCase(name) %>/view/<%= snakeCase(name) %>_screen.dart
      - path: screen/viewmodel.lokio
        output: lib/features/<%= snakeCase(name) %>/viewmodel/<%= snakeCase(name) %>_viewmodel.dart
      - path: screen/test.lokio
        output: test/features/<%= snakeCase(name) %>/<%= snakeCase(name) %>_test.dart
    parameters:
      - name: name
        type: string
        required: true
        prompt: "Nama screen:"

Generate#

lokio g screen Login

Output:

Generating 3 files...
✓ Generated: lib/features/login/view/login_screen.dart
✓ Generated: lib/features/login/viewmodel/login_viewmodel.dart
✓ Generated: test/features/login/login_test.dart
Code generation complete! (3 files)

Hooks (Post-Generation)#

Jalankan perintah otomatis setelah lokio gen berhasil. Definisikan di lokio/configs.yaml:

templates:
  - name: service
    description: NestJS service
    path: service.lokio
    output: src/services/<%= pascalCase(name) %>Service.ts
    parameters:
      - name: name
        type: string
        required: true
        prompt: "Nama service:"
    hooks:
      after_gen:
        - bun run format        # format kode setelah generate
        - bun run build:check   # pastikan tidak ada error TypeScript

Output saat generate:

✓ Generated: src/services/UserService.ts

Running post-generation hooks...
  ✓ bun run format
  ✓ bun run build:check
Code generation complete! (1 file)

Contoh Hook Lainnya#

hooks:
  after_gen:
    - go mod tidy                          # Go: update dependencies
    - flutter pub get                      # Flutter: install packages
    - npx prettier --write src/            # format dengan Prettier
    - php artisan optimize                 # Laravel: clear cache

Catatan: Hook dijalankan dari root folder project. Jika hook gagal, generate tetap dianggap berhasil — hanya menampilkan warning.


Sync & 3-Way Merge#

Masalah yang Diselesaikan#

Kamu sudah generate UserService.ts dari template. Lalu:

  1. Kamu menambahkan method getUserById() secara manual ke file tersebut
  2. Template service.lokio diupdate tim (misalnya constructor berubah)

Kalau kamu langsung overwrite, method yang kamu tambahkan hilang. Lokio menyelesaikan ini dengan 3-way merge.

Cara Kerja 3-Way Merge#

base    = versi file yang tersimpan di git (git show HEAD:<file>)
current = file sekarang (mungkin sudah kamu modifikasi)
theirs  = hasil re-render dari template yang sudah diupdate

Aturan:

  • Hanya kamu yang ubah → perubahan kamu dipertahankan
  • Hanya template yang ubah → perubahan template diterapkan
  • Keduanya ubah baris yang sama → conflict markers ditulis

Preview dengan lokio diff#

Sebelum apply, lihat dulu apa yang akan berubah:

lokio diff
  ✓ src/services/AuthService.ts — up to date
  ~ src/services/UserService.ts — +2 -1 (your edits preserved)
  ✗ src/services/OrderService.ts — conflict (resolve markers manually)

1 conflict detected.
2 files can be updated — run lokio sync to apply

Jalankan Sync#

lokio sync
Scanning 3 generated files...

  ✓ src/services/AuthService.ts — up to date
  ~ src/services/UserService.ts — +2 -1 (your edits preserved)
  ✗ src/services/OrderService.ts — conflict (resolve markers manually)

1 conflict detected — conflict markers will be written.
2 files can be updated.

? How do you want to proceed?
  › Apply all changes
    Review each file
    Cancel

Menyelesaikan Conflict#

File conflict akan berisi marker:

export class OrderService {
  // Method baru dari template
  async voidOrder(id: number) {
    return this.repo.void(id);
  }
}

Edit file tersebut, pilih/gabungkan bagian yang kamu inginkan, lalu hapus marker <<<<<<<, =======, >>>>>>>.

Syarat 3-Way Merge Berfungsi#

File harus sudah pernah di-commit ke git. Kalau belum, Lokio akan minta konfirmasi sebelum overwrite.


lokio check — Lint Struktural#

Validasi apakah file-file di repo sudah mengikuti aturan struktural yang didefinisikan di template.

Perbedaan dengan lokio sync: sync hanya peduli file yang ada di lokio.lock. check bisa mendeteksi file manapun di repo yang path-nya cocok dengan pola output template — termasuk file yang ditulis manual tanpa Lokio.

Cara Kerja#

Lokio membaca anotasi dari file .lokio dan membuat aturan lint otomatis.

Auto-Fingerprinting#

Setiap baris yang mengandung <%= %> otomatis dijadikan aturan required + danger:

// lokio/templates/service.lokio
 
import { Injectable } from '@nestjs/common';    // ← baris ini jadi aturan required
 
@Injectable()                                    // ← ini juga
export class <%= pascalCase(name) %>Service {}

Artinya: semua file yang cocok dengan output pattern template ini harus mengandung import { Injectable } dan @Injectable().

Anotasi Manual#

Lebih eksplisit dan fleksibel:

<%# @lokio required danger "Harus ada @Injectable()" @Injectable %>
<%# @lokio forbidden warning "Jangan pakai console.log" console\.log %>
<%# @lokio required warning "Harus export class" export class %>
 
@Injectable()
export class <%= pascalCase(name) %>Service {}

Format anotasi:

<%# @lokio <required|forbidden> <danger|warning> "pesan" [regex-pattern] %>
BagianNilaiKeterangan
requiredFile harus mengandung pattern ini
forbiddenFile tidak boleh mengandung pattern ini
dangerDilaporkan sebagai error
warningDilaporkan sebagai warning
"pesan"teksPesan yang ditampilkan ke user
[pattern]regexOpsional; kalau tidak ada, baris berikutnya dijadikan pattern

Konfigurasi di lokio/configs.yaml#

check:
  danger_mode: block   # "block" = exit code 1 (cocok pre-commit hook)
                       # "warn"  = hanya tampilkan, tidak exit 1
  # templates:         # opsional — omit untuk check semua template
  #   - service
  #   - controller

Gunakan Sebagai Pre-commit Hook#

# .git/hooks/pre-commit
#!/bin/sh
lokio check

Atau dengan Husky / Lefthook:

# .lefthook.yml
pre-commit:
  commands:
    lokio-check:
      run: lokio check

lokio ai — Validasi Standar dengan AI#

Gunakan AI untuk memvalidasi standar tim yang tidak bisa ditangkap oleh regex — seperti keberadaan test file, dokumentasi, atau pola arsitektur.

Setup#

1. Konfigurasi di lokio/configs.yaml (aman di-commit):

ai:
  provider: gemini        # openai | anthropic | gemini | ollama | openrouter
  model: gemini-2.0-flash
 
standards:
  - id: unit-test
    description: "Setiap service harus punya file unit test"
    severity: danger
  - id: no-console-log
    description: "Tidak ada console.log di kode produksi"
    severity: warning
  - id: has-readme
    description: "Setiap package/module harus punya README"
    severity: warning

2. API key di lokio.local.yaml (gitignored — jangan commit):

# lokio.local.yaml
ai:
  api_key: YOUR_API_KEY_HERE

Atau environment variable:

export LOKIO_AI_API_KEY=your-key

Jalankan#

lokio ai

Jika belum setup, wizard interaktif akan memandu konfigurasi dan membuat lokio.local.yaml secara otomatis.

Provider yang Didukung#

ProviderModel rekomendasiCatatan
geminigemini-2.0-flashFree tier, recommended untuk mulai
openaigpt-4o-miniTerjangkau
anthropicclaude-haiku-4-5-20251001
openroutermeta-llama/llama-3.3-70b-instruct:freeModel gratis tersedia
ollamallama3.2Lokal / VPS, tidak butuh API key

Konfigurasi Ollama:

ai:
  provider: ollama
  model: llama3.2
  endpoint: http://your-vps:11434   # default: http://localhost:11434

Severity#

  • danger — jika fail, command exit dengan code 1 (cocok untuk CI/CD gate)
  • warning — hanya ditampilkan, tidak memblokir

lokio doctor — Diagnosa Setup#

Periksa seluruh setup Lokio dalam satu perintah:

lokio doctor

Berguna untuk:

  • Onboarding developer baru di tim
  • Debug ketika ada command yang tidak berjalan
  • Memastikan API key dan konfigurasi AI sudah benar sebelum menjalankan lokio ai

lokio.lock — Tracking File Generate#

File lokio.lock otomatis dibuat dan diupdate setiap kali lokio gen berhasil.

# lokio.lock
generations:
  - template: service
    parameters:
      name: UserService
    files:
      - output: src/services/UserService.ts
        template_path: service.lokio
    generated_at: "2026-03-09T10:00:00.000Z"

Aturan:

  • Commit ke git — supaya seluruh tim bisa pakai lokio sync dan lokio diff
  • ❌ Jangan edit manual kecuali tahu apa yang kamu lakukan

Kenapa aman di-commit?

  • File kecil — hanya menyimpan nama template, parameter, dan path output
  • Tidak menyimpan konten file (untuk merge base, Lokio pakai git show HEAD)
  • Konflik di lokio.lock mudah diselesaikan (format YAML sederhana)

Deduplication otomatis: Jika file yang sama di-generate ulang dari template berbeda, Lokio otomatis memindahkan kepemilikan file ke template yang terbaru — tidak ada duplikasi di lock file.


AI Key Security#

FileKomit?Isi
lokio.yaml✅ YaMetadata project, enterprise config
lokio/configs.yaml✅ YaTemplate, check config, AI provider & model
lokio.local.yamlTidakAPI key (auto-gitignored saat lokio init)
lokio.lock✅ YaTracking file generate

lokio.local.yaml otomatis ditambahkan ke .gitignore saat lokio init. Jika file ini tidak ada, Lokio juga menerima API key dari environment variable LOKIO_AI_API_KEY.


Enterprise Hub#

Untuk tim yang ingin berbagi template antar project:

# Aktivasi saat init
lokio init --enterprise ENT-xxxxxx
 
# Atau gunakan flag langsung
lokio init -e ENT-xxxxxx
 
# Tarik template dari hub
lokio pull

Setelah lokio init --enterprise, jalankan lokio pull untuk mengisi template dari Hub ke lokio/configs.yaml dan lokio/templates/.