nxdom-php v0.0.3 · PHP native extension · MIT

Tulis JavaScript, jalan di PHP

NxDom adalah PHP native extension global: dipasang sekali di server, semua aplikasi langsung punya router, database, dan auth. Aplikasi tidak membawa vendor/, tidak menyalin runtime, dan production tidak butuh Node.js.

Fitur

Runtime backend sebagai extension native — bukan library yang disalin ke setiap aplikasi.

Satu NxDom, Banyak Aplikasi

Extension dimuat di level PHP, bukan di dalam www/. Website A, B, dan C di server yang sama langsung memakai runtime yang sama — satu kali pasang, tanpa duplikasi.

Router di Extension

Path seperti /api/users ditangani NxDom lewat front controller generik + rewrite generik (sekali per server). Aplikasi tidak punya Router.php — routing ada di runtime.

Database Aman

Query builder + PDO/MySQL dengan prepared statement. SQL mentah dari client ditolak; parameter hanya boleh jadi nilai, bukan nama tabel/kolom — penjagaan eksplisit terhadap SQL injection.

Auth & Policy Terpusat

Register, login, session, role, dan API token dijalankan extension. nxdom.policy.json menegakkan fillable, whitelist kolom, dan batas limit — di server, bukan di client.

Manifest & Policy JSON

Aplikasi mendeklarasikan route dan izin lewat nxdom.config.json, nxdom.manifest.json, dan nxdom.policy.json — ada JSON Schema publik dan validator untuk ketiganya.

Build Dua Platform

config.w32 (MSVC/nmake) dan config.m4 (phpize/autotools) — extension dibangun dan diuji di Windows (PHP 8.1 ZTS) maupun Linux (PHP 8.3, aaPanel). CI merilis CLI + SDK otomatis saat tag.

Arsitektur

PHP tetap engine-nya, Apache/Nginx tetap web server-nya — NxDom menyediakan application API di atasnya.

Di Level PHP Engine

Ekstensi native C (Zend Engine API) dimuat lewat extension=nxdom. Hook RINIT/RSHUTDOWN dipakai untuk mengenali aplikasi lewat nxdom.config.json di document root.

Front Controller Generik

Native extension tidak bisa dipanggil web server tanpa file fisik, jadi ada satu nxdom/index.php generik + aturan rewrite yang di-Include identik di tiap vhost — tetap satu berkas untuk semua aplikasi.

Isolasi per Aplikasi

Konfigurasi, policy, dan data tetap terpisah tiap app. File .json konfigurasi diblokir dari akses statis; path traversal dan route halaman divalidasi ketat.

Bukan framework, bukan library: NxDom tidak hadir sebagai vendor/nxdom/ maupun nxdom/ di aplikasi Anda. Tidak ada Runtime.php, Router.php, atau Database.php yang perlu ditulis developer — semuanya ada di extension.

CLI & SDK

nxdom-php untuk membuat & mengelola aplikasi; @nxdom/client untuk memanggil API dari browser.

terminal
# CLI - nxdom-php.exe (Node SEA, tanpa Node terpasang) atau npm link
nxdom-php create myapp     # scaffold aplikasi baru
nxdom-php dev myapp        # server pengembangan
nxdom-php build myapp      # build untuk produksi
nxdom-php config           # kelola konfigurasi
nxdom-php install          # pasang extension ke PHP
nxdom-php install-host     # pasang di level host/server

# SDK browser - @nxdom/client
import nxdom, { NxdomApiError } from '@nxdom/client';

nxdom.db('users').where('active', true).get();
nxdom.db('users').find(1);
nxdom.db('users').create({ name: 'Ada' });
nxdom.auth.login({ email, password });
const me = await nxdom.auth.me();
Kontrak endpoint: SDK memanggil /api/{resource} untuk CRUD dan /api/auth/* untuk auth; endpoint model khusus lewat /api/outside dengan resep query yang dideklarasikan di policy — tidak ada eksekusi kode arbitrer dari client.

Cara Pasang

Unduh artefak siap pakai dari Release v0.0.3, atau build extension dari source.

Semua artefak tersedia di Releases v0.0.3. Versi PHP lain (atau LSPHP) perlu build dari nxdom/src/ — lihat install.md.

Build Extension dari Source

Windows · MSVC (VS16/v142)
# butuh toolset v142 + PHP 8.1.31 source (lihat install.md)
call vcvarsall.bat x64 -vcvars_ver=14.29
set PATH=C:\phpsdk\bin;%PATH%
C:\phpsdk\bin\phpsdk_buildtree.bat phpmaster

configure --disable-all --enable-cli --enable-nxdom=shared
nmake
# hasil: php_nxdom.dll
Linux · phpize
cd nxdom/src
phpize
./configure --enable-nxdom
make
# hasil: nxdom.so
sudo make install

# aktifkan di php.ini: extension=nxdom

Setelah extension terpasang, ikuti runbook Apache (nxdom-rewrite.conf + Include di tiap vhost) atau panduan nginx pada Apache.md. Aplikasi yang tidak punya nxdom.config.json sama sekali tidak terpengaruh oleh extension ini.