npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

Iโ€™ve always been into building performant and accessible sites, but lately Iโ€™ve been taking it extremely seriously. So much so that Iโ€™ve been building a tool to help me optimize and monitor the sites that I build to make sure that Iโ€™m making an attempt to offer the best experience to those who visit them. If youโ€™re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, ๐Ÿ‘‹, Iโ€™m Ryan Hefnerย  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If youโ€™re interested in other things Iโ€™m working on, follow me on Twitter or check out the open source projects Iโ€™ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soonโ€“ish.

Open Software & Tools

This site wouldnโ€™t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you ๐Ÿ™

ยฉ 2026 โ€“ย Pkg Stats / Ryan Hefner

kendalscript

v1.0.0

Published

Bahasa pemrograman multilingual transpile ke JavaScript ๐Ÿ‡ฎ๐Ÿ‡ฉ | Multilingual programming language transpiled to JavaScript | Indonesia + English + Jawa Kendal-Semarang

Readme

๐Ÿ‡ฎ๐Ÿ‡ฉ KendalScript v1.0

Bahasa pemrograman multilingual yang ditranspile ke JavaScript. A multilingual programming language that transpiles to JavaScript.

Dari Kendal dengan cinta โค๏ธ โ€” Made in Kendal, Central Java


๐Ÿค” Apa itu KendalScript? / What is KendalScript?

KendalScript adalah bahasa pemrograman yang syntax-nya mirip JavaScript tapi bisa ditulis dalam 3 bahasa:

KendalScript is a programming language with JavaScript-like syntax but can be written in 3 languages:

| ๐Ÿ‡ฌ๐Ÿ‡ง English | ๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia | โ˜• Jawa Kendal-Semarang | |-------------|---------------|------------------------| | function | fungsi | fungsi | | if | jika / kalau | nek / yen | | return | kembalikan | bali / wangsul | | true | benar | bener | | false | salah | salah | | null | kosong | kosong | | while | selama | nganti | | for | untuk | kanggo | | try | coba | nyoba | | catch | tangkap | topo | | class | kelas | wujud | | new | baru | anyar | | break | berenti | mandeg | | continue | lanjut | lanjut | | throw | lempar | uncal | | async | ajejek | ajejek | | await | nunggu | nunggu |

Bebas campur! Bisa pakai English + Indonesia + Jawa dalam satu file. Mix freely! You can mix all 3 languages in one file.


๐Ÿ“ฆ Instalasi / Installation

Syarat / Requirements

  • Node.js versi 18 atau lebih tinggi / version 18 or higher
  • Node.js bisa diunduh di: https://nodejs.org

Cara Install

# 1. Clone repository ini
git clone <url-repo-kendalscript>
cd kendalscript

# 2. Install dependencies
npm install

# 3. Install global (opsional, biar bisa pakai 'kdl' dari mana saja)
npm link

Verifikasi Install / Verify Installation

node src/cli.js version
# Output: KendalScript v1.0.0

๐Ÿš€ Cara Pakai / How to Use

1. Buat file .kdl / Create a .kdl file

Buat file bernama hello.kdl dengan isi:

Create a file named hello.kdl with this content:

// hello.kdl - Program pertama KendalScript!
// First KendalScript program!

print("Halo, Dunia!")
print("Hello, World!")
print("Halo, Kendal!")

2. Jalankan / Run

node src/cli.js run hello.kdl

Output:

Halo, Dunia!
Hello, World!
Halo, Kendal!

3. Build ke JavaScript (opsional) / Build to JavaScript (optional)

node src/cli.js build hello.kdl
# Output: hello.kdl -> hello.js

๐Ÿ“‹ Perintah CLI / CLI Commands

| Perintah / Command | Fungsi / Function | |-------------------|-------------------| | kdl run <file.kdl> | Jalankan file / Run file | | kdl build <file.kdl> | Transpile ke .js / Transpile to .js | | kdl ast <file.kdl> | Lihat AST (untuk debug) / View AST (for debug) | | kdl tokens <file.kdl> | Lihat token (untuk debug) / View tokens (for debug) | | kdl repl | REPL interaktif / Interactive REPL | | kdl help | Tampilkan bantuan / Show help | | kdl version | Lihat versi / Show version |

Tips: Kalau sudah npm link, cukup pakai kdl langsung:

Tip: After npm link, just use kdl directly:

kdl run hello.kdl
kdl repl

๐Ÿ“š Panduan Lengkap / Complete Guide

๐Ÿ“ Variabel / Variables

// Pakai let, const, atau var (sama seperti JavaScript)
let nama = "Dika"          // bisa diubah / changeable
const KOTA = "Kendal"      // tidak bisa diubah / not changeable
var umur = 17              // bisa diubah / changeable

print(nama)    // Output: Dika
print(KOTA)    // Output: Kendal
print(umur)    // Output: 17

๐Ÿ”ง Fungsi / Functions

// Cara 1: fn (pendek / short)
fn tambah(a, b) {
    return a + b
}

// Cara 2: function (panjang / long, seperti JavaScript)
function sapa(nama) {
    return "Halo, " + nama + "!"
}

// Cara 3: fungsi (Indonesia)
fungsi kalikan(x, y) {
    return x * y
}

// Default parameter
function sapaLagi(nama = "Dunia") {
    return "Halo, " + nama + "!"
}

// Rest parameter (...angka)
function jumlahSemua(...angka) {
    let total = 0
    for (let n of angka) total = total + n
    return total
}

print(tambah(2, 3))            // Output: 5
print(sapa("Kendal"))          // Output: Halo, Kendal!
print(kalikan(4, 5))           // Output: 20
print(sapaLagi())               // Output: Halo, Dunia!
print(jumlahSemua(1, 2, 3))    // Output: 6

โžก๏ธ Arrow Functions

// Panah: => (sama seperti JavaScript)
let kuadrat = x => x * x
print(kuadrat(5))    // Output: 25

let kali = (a, b) => { return a * b }
print(kali(4, 3))    // Output: 12

// Arrow sebagai callback / Arrow as callback
let angka = [1, 2, 3, 4, 5]
let duaKali = angka.map(x => x * 2)
print(duaKali)       // Output: [ 2, 4, 6, 8, 10 ]

๐Ÿ”„ Percabangan / Conditionals

let nilai = 85

// if / else (English)
if (nilai >= 70) {
    print("Lulus!")
} else {
    print("Tidak lulus")
}

// jika (Indonesia)
if (nilai >= 90) {
    print("Nilai A")
} else if (nilai >= 80) {
    print("Nilai B")    // Output: Nilai B
} else {
    print("Nilai C")
}

// nek / yen (Jawa Kendal)
if (bener) {
    print("Benar!")
}

// Ternary operator
let hasil = nilai >= 70 ? "Lulus" : "Tidak Lulus"
print(hasil)    // Output: Lulus

๐Ÿ” Perulangan / Loops

// For klasik / Classic for
for (let i = 0; i < 5; i = i + 1) {
    print(i)
}

// For...of (iterasi array / iterate array)
let buah = ["Mangga", "Durian", "Rambutan"]
for (let b of buah) {
    print(b)
}

// For...in (iterasi object / iterate object)
let kota = { nama: "Kendal", prov: "Jawa Tengah" }
for (let key in kota) {
    print(key + ": " + kota[key])
}

// While
let x = 0
while (x < 5) {
    print(x)
    x = x + 1
}

// Do...While
let y = 0
do {
    print(y)
    y = y + 1
} while (y < 5)

// Break & Continue
for (let i = 0; i < 10; i = i + 1) {
    if (i == 3) continue    // skip 3
    if (i == 7) break       // stop di 7
    print(i)
}

๐Ÿ›๏ธ Class (OOP)

class Mahasiswa {
    constructor(nama, nilai) {
        this.nama = nama
        this.nilai = nilai
    }

    getNama() {
        return this.nama
    }

    lulus() {
        return this.nilai >= 70
    }

    // Getter
    get grade() {
        if (this.nilai >= 90) return "A"
        if (this.nilai >= 80) return "B"
        if (this.nilai >= 70) return "C"
        return "D"
    }
}

let mhs = new Mahasiswa("Dika", 85)
print(mhs.getNama())     // Output: Dika
print(mhs.lulus())       // Output: true
print(mhs.grade)         // Output: B

// Pewarisan / Inheritance
class Robot extends Mahasiswa {
    constructor(nama, nilai, tipe) {
        super(nama, nilai)
        this.tipe = tipe
    }

    info() {
        return this.nama + " (" + this.tipe + ")"
    }
}

let robot = new Robot("KendalBot", 100, "AI")
print(robot.info())      // Output: KendalBot (AI)

// Static method
class MathUtil {
    static max(a, b) {
        return a > b ? a : b
    }
}
print(MathUtil.max(5, 3))    // Output: 5

๐Ÿ›ก๏ธ Error Handling (Try/Catch)

try {
    print("Coba sesuatu...")
    throw "Ada error!"
} catch (err) {
    print("Error: " + err)
} finally {
    print("Selesai!")
}

// Coba (Indonesia), nyoba (Jawa)
coba {
    print("OK")
} catch (e) {
    print("Error: " + e)
} finally {
    print("Done")
}

๐Ÿ“ฆ Destructuring

// Array destructuring
let [a, b, c] = [10, 20, 30]
print(a)    // Output: 10
print(b)    // Output: 20
print(c)    // Output: 30

// Object shorthand (nama properti = nama variabel)
let nama = "Budi"
let umur = 18
let orang = { nama, umur }
print(orang)    // Output: { nama: 'Budi', umur: 18 }

โœจ Spread & Rest Operators

// Spread array
let arr1 = [1, 2, 3]
let arr2 = [...arr1, 4, 5]
print(arr2)    // Output: [ 1, 2, 3, 4, 5 ]

// Spread object
let obj1 = { a: 1, b: 2 }
let obj2 = { ...obj1, c: 3 }
print(obj2)    // Output: { a: 1, b: 2, c: 3 }

// Rest parameter
function jumlah(...angka) {
    let total = 0
    for (let n of angka) total = total + n
    return total
}
print(jumlah(1, 2, 3, 4))    // Output: 10

๐Ÿ”— Optional Chaining & Nullish Coalescing

let user = { profile: { name: "Dika" } }

// Optional chaining (?.)
print(user.profile?.name)     // Output: Dika
print(user.address?.city)     // Output: undefined (tidak error!)

// Nullish coalescing (??)
print(null ?? "default")      // Output: default
print(42 ?? "default")        // Output: 42

๐Ÿ“ Template Literals

let nama = "Kendal"
let umur = 17

// Pakai backtick ` dan ${...}
print(`Halo, ${nama}!`)
print(`Umur saya ${umur} tahun`)
print(`5 + 3 = ${5 + 3}`)

๐Ÿ”ข Tipe Data / Data Types

// Number
let angka = 42
let desimal = 3.14

// String
let teks = "Halo"
let teks2 = 'Juga bisa'

// Boolean
let benar = true
let salah = false

// Null
let kosong = null

// Undefined
let tak_ndefine = undefined

// Array
let buah = ["Apel", "Mangga", "Durian"]

// Object
let orang = { nama: "Dika", umur: 17 }

// typeof
print(typeof 42)          // Output: number
print(typeof "halo")      // Output: string
print(typeof true)        // Output: boolean
print(typeof null)        // Output: object (ini bug JavaScript, bukan bug kita)
print(typeof undefined)   // Output: undefined

๐Ÿ–จ๏ธ Print / Cetak

// 4 cara yang sama / 4 equivalent ways:
print("Halo!")        // English
cetak("Halo!")        // Indonesia
tulis("Halo!")        // Indonesia (lain)
weneh("Halo!")        // Jawa Kendal

// Print banyak nilai / Print multiple values
print("Nama:", "Dika", "Umur:", 17)
// Output: Nama: Dika Umur: 17

โณ Async / Await

// task = async function (khas KendalScript)
task ambilData() {
    await tunggu(1000)    // tunggu = await
    return "Data sudah siap!"
}

// async function (JavaScript style)
async function proses() {
    let hasil = await ambilData()
    print(hasil)
}

proses()

๐Ÿค– Subagent (Jalankan File Lain)

// Subagent: jalankan file .kdl lain dalam proses terpisah
// Subagent: run another .kdl file in a separate process

let hasil = subagent("worker.kdl")
print("Hasil dari worker:", hasil)

๐Ÿ“ฆ Modul / Modules

// Import
import fs from "fs"
import { readFile } from "fs"
import * as path from "path"

// Export
export function hello() { return "Hi!" }
export default class MyBot { }

// Use (khas KendalScript)
use http

๐Ÿ”ข Operator Lengkap / Full Operators

Aritmatika:    +  -  *  /  %  **
Perbandingan:  ==  !=  ===  !==  <  >  <=  >=
Logika:        &&  ||  !
Bitwise:       &  |  ^  ~  <<  >>  >>>
Assignment:    =  +=  -=  *=  /=  %=
Lain-lain:     ?  :  ??  ?.  ...  typeof  instanceof  delete
Increment:     ++  --

๐ŸŒ 3 Bahasa dalam 1 File / 3 Languages in 1 File

// Contoh: campuran 3 bahasa
// Example: mix of 3 languages

fn main() {
    // English
    let name = "Dika"
    if (name.length > 0) {
        print("Hello, " + name)
    }

    // Indonesia
    jikalau (benar) {
        print("Ini benar!")
    }

    // Jawa Kendal-Semarang
    yen (bener) {
        print("Iki bener!")
    }

    // Semua bekerja! / All works!
}

๐Ÿ“ Contoh Program / Example Programs

Lihat folder examples/ untuk contoh program:

See the examples/ folder for example programs:

| File | Deskripsi / Description | |------|------------------------| | hello.kdl | Program pertama / First program | | calculator.kdl | Kalkulator sederhana / Simple calculator | | fibonacci.kdl | Bilangan Fibonacci / Fibonacci numbers | | async.kdl | Async/Await example | | telegram-bot.kdl | Bot Telegram (butuh telegraf + BOT_TOKEN) | | web-server.kdl | Web server (butuh express) | | test-all-features.kdl | Test semua fitur / Test all features | | test-v10.kdl | Test lengkap v1.0 / Full v1.0 test | | test-subagent.kdl | Test subagent | | my-bot.kdl | Contoh bot / Bot example |


โ“ FAQ

Q: Apakah harus pakai titik koma (;)?

A: Tidak harus! Titik koma opsional seperti Python. Tapi kalau mau pakai juga boleh.

Q: Bedanya fn sama function?

A: Sama saja! fn lebih pendek, function lebih formal seperti JavaScript. Pilih mana yang suka.

Q: Bedanya task sama async function?

A: Sama saja! task lebih pendek dan khas KendalScript. async function standar JavaScript.

Q: Bisa pakai library npm?

A: Bisa! Karena hasilnya JavaScript, semua library npm bisa dipakai.

Q: Kenapa namanya "KendalScript"?

A: Karena dibuat di Kabupaten Kendal, Jawa Tengah, Indonesia ๐Ÿ‡ฎ๐Ÿ‡ฉ

Q: Untuk siapa bahasa ini?

A: Untuk semua orang! Terutama pelajar SMP-SMK yang mau belajar coding dengan bahasa ibu.

Q: Apakah 100% compatible dengan JavaScript?

A: Ya! Semua fitur JavaScript bisa dipakai. KendalScript hanya menambah keyword multilingual di atasnya.


๐Ÿ› ๏ธ Pengembangan / Development

# Jalankan test / Run tests
node src/cli.js run examples/test-all-features.kdl

# Jalankan test lengkap v1.0 / Run full v1.0 test
node src/cli.js run examples/test-v10.kdl

# Lihat AST (untuk debug) / View AST (for debug)
node src/cli.js ast examples/hello.kdl

# Lihat token (untuk debug) / View tokens (for debug)
node src/cli.js tokens examples/hello.kdl

# REPL interaktif / Interactive REPL
node src/cli.js repl

๐Ÿ“„ Lisensi / License

MIT License - Gratis dipakai untuk apa saja.


๐Ÿ’ฌ Kontak / Contact

Dibuat dengan โค๏ธ di Kendal, Jawa Tengah, Indonesia

Made with โค๏ธ in Kendal, Central Java, Indonesia

๐Ÿ‡ฎ๐Ÿ‡ฉ KendalScript v1.0
   Dari Kendal dengan cinta!
   From Kendal with love!
   Saka Kendal kanthi tresna!