Skip to content

Releases: iyanrsaleh/nxc

v0.3.5

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 28 Sep 11:26
SDK 0.3.2: menu bar di dalam title bar (Window::menuBar / setTitleBar…

v 0.3.4

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 28 Sep 02:52
v0.3.4

SDK 0.3.2: menu bar di dalam title bar (Window::menuBar / setTitleBar…

v 0.3.3

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 27 Sep 03:44
v0.3.3

SDK 0.3.2: menu bar di dalam title bar (Window::menuBar / setTitleBar…

v0.3.2

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 26 Sep 17:07
SDK 0.3.0: routing halaman (Router + NavigationView)

Aplikasi NXC butuh cara standar untuk membuat banyak halaman dan link
antarhalaman tanpa menulis QStackedWidget sendiri. SDK 0.3.0 menambah
nxc::Router, nxc::Page, nxc::Link dan nxc::NavigationView; docs API diperbarui.

create-nxc-app 0.3.0: template kini berisi sidebar + halaman Home/Produk/
Produk :id/Pengaturan, argumen --route, pemasangan otomatis paket npm di
runtime/, dan menolak SDK < 0.3.0 karena template memakai Router.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

NXC — SDK aplikasi desktop native C++ (Qt 6)

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 26 Sep 14:23
SDK 0.3.0: routing halaman (Router + NavigationView)

Aplikasi NXC butuh cara standar untuk membuat banyak halaman dan link
antarhalaman tanpa menulis QStackedWidget sendiri. SDK 0.3.0 menambah
nxc::Router, nxc::Page, nxc::Link dan nxc::NavigationView; docs API diperbarui.

create-nxc-app 0.3.0: template kini berisi sidebar + halaman Home/Produk/
Produk :id/Pengaturan, argumen --route, pemasangan otomatis paket npm di
runtime/, dan menolak SDK < 0.3.0 karena template memakai Router.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

v0.3.0: create-nxc-app 0.2.0: build lewat npm + identitas app di package.json

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 26 Sep 13:22
Developer tidak perlu lagi menghafal perintah CMake dan path exe, dan
identitas aplikasi cukup diatur di satu tempat seperti electron-builder.

- Project baru punya npm run dev | build | release | dist | clean
  (scripts/nxc.mjs, Node murni tanpa dependency).
- package.json: version, productName, description, author, nxc.icon,
  nxc.shortcutName, nxc.artifactName, nxc.appId -> versi/ikon/nama exe,
  judul jendela, ikon title bar & tray (cmake/NxcApp.cmake membaca
  package.json; perubahan terdeteksi sendiri saat build).
- npm run dist membuat installer Inno Setup (per-user tanpa admin,
  shortcut Start Menu/Desktop, uninstaller); tanpa Inno Setup / --zip
  menghasilkan zip portable.
- Template tetap bisa dibangun dengan SDK 0.1.0; ikon title bar/tray
  aplikasi butuh SDK 0.2.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

NXC Qt6

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 26 Sep 12:10

NXC Qt6 — Panduan Developer: Mana Internal, Mana Developer

Dokumen khusus developer: satu halaman yang menjelaskan dengan tegas area
mana yang milik tim internal NXC
dan area mana yang merupakan kontrak resmi
untuk developer aplikasi (konsumen SDK)
— supaya tidak ada yang salah
#include atau bergantung pada kode internal yang bisa berubah sewaktu-waktu.

Dokumen terkait: README.md (gambaran umum + build), docs/API.md (referensi
per header), Foundation.md & Plan.md (spesifikasi & status internal).


1. Alur besar: dari source internal ke project developer

NXC source (repo ini)          nxc-sdk/ (hasil install)       project developer
─────────────────────          ────────────────────────       ─────────────────
src/, include/nxc/,   ──build──▶  build/  ──cmake --install──▶  nxc-sdk/
resources/, tests/     .bat                    │                inc/nxc/*.h
CMakeLists.txt                                 │                lib/nxc.lib
                                               │                bin/nxc.dll
                                               └──find_package──▶ cmake/nxcConfig.cmake
                                                                  resources/*.qss
                                                                  (examples/hello-nxc/)

Satu arah saja: developer tidak pernah membaca atau mengubah source
internal — cukup find_package(nxc) terhadap folder nxc-sdk/.


2. Dua peran

Aspek Tim internal NXC Developer aplikasi (konsumen SDK)
Mengubah source library (src/, CMakeLists.txt, build.bat) ✅ ya ❌ tidak
#include <nxc/...> (header publik) ✅ ✅ wajib
#include langsung ke src/*.h ✅ (di dalam library) ❌ dilarang
Build build.bat / CMake root CMake biasa + find_package(nxc)
Titik masuk main() tidak ada di library di project developer sendiri
Test tests/ (17 suite ctest) test aplikasi masing-masing
Dokumen utama Foundation.md, Plan.md Developer.md, docs/API.md

3. Peta folder: milik siapa

Folder / file Milik Boleh diutak-atik developer? Keterangan
include/nxc/*.h (17 header) kontrak publik 🟡 baca & pakai, ❌ ubah Satu-satunya API resmi. Ikut terpasang ke nxc-sdk/inc/nxc/
src/ (semua .cpp/.h di dalamnya) internal ❌ Implementasi: titlebar, window, platform, runtime, dll. Tidak ikut terpasang di SDK
resources/ (app.qrc, *.qss) internal ❌ Di-embed ke dalam nxc.dll; Theme::apply() membaca :/style_*.qss
assets/ (brend/, icons/) internal ❌ Ikon brand + glyph Fluent; ikut ter-embed lewat qrc
tests/, tools/, .github/ internal ❌ ctest, generator .ico, skrip shortcut, CI
build.bat, CMakeLists.txt, cmake/*.cmake.in internal ❌ Orkestrasi build & paket
nxc-sdk/ hasil build ❌ edit manual Dibuat oleh cmake --install — bisa tertimpa kapan saja; regenerate, jangan sunting
examples/hello-nxc/ contoh milik developer ✅ Project terpisah yang memakai SDK — template menyalin
README.md, docs/, Developer.md dokumentasi 🟡 baca Plan.md/Foundation.md = dokumen perencanaan internal

4. Kontrak API — 13 header yang boleh dipakai developer

Semuanya di namespace nxc, diekspor dengan NXC_EXPORT (<nxc/Export.h>),
dan otomatis terpasang ke nxc-sdk/inc/nxc/ (daftar statis:
NXC_PUBLIC_HEADERS di CMakeLists.txt).

Header Isi
<nxc/Application.h> bootstrap + window factory + tray + event loop — pengganti main() sendiri
<nxc/Window.h> window frameless (title bar, area resize — tanpa garis tepi) — turunkan untuk isi aplikasi
<nxc/ContextMenu.h> mesin context menu generik (item, submenu, shortcut, visibleWhen)
<nxc/Dialog.h> dialog standar: area isi + button box Ok/Cancel
<nxc/Events.h> EventBus tunggal + nama event dasar (nxc::Event::*)
<nxc/Keyboard.h> keyboard & input: KeyEvent, key mapping, modifier, input context
<nxc/Shortcut.h> shortcut terpusat: scope Application/Window/Context, chord, konflik, enable/disable
<nxc/TerminalProcess.h> process bridge terminal: shell OS (cmd/powershell/pwsh/sh), stdin/stdout/stderr, dir, env
<nxc/Terminal.h> widget terminal satu area (ketik langsung, PTY + emulator VT: warna, Tab, vim; Ctrl+C/Ctrl+V/Ctrl+L) di atas TerminalProcess
<nxc/Settings.h> preferensi tersimpan (QSettings INI): tema, closeToTray, dsb.
<nxc/Theme.h> hot-swap tema gelap/terang + ikon (appIcon, contextIcon, glyph Fluent)
<nxc/Tray.h> system tray icon + menu
<nxc/Runtime.h> kontrak bersama ketiga runtime (mulai/stop/kirim/pesan masuk)
<nxc/JavaScriptRuntime.h> runtime JS in-process (QJSEngine) — API JS sama seperti Node
<nxc/NodeRuntime.h> Node.js out-of-process (framing JSON per baris)
<nxc/PythonRuntime.h> Python out-of-process — protokol sama, peluncur beda (py -3/python)
<nxc/Export.h> makro NXC_EXPORT (dllimport/dllexport/NXC_STATIC)

Modul opsional (library terpisah — link hanya kalau dipakai, Foundation §7.6):

Header Target CMake Isi
<nxc/Database.h> nxc::Database (Qt6 Sql) koneksi SQLite/driver lain, koneksi per thread, query async, transaksi, migrasi NNN_nama.sql
<nxc/WebSocket.h> nxc::WebSocket (Qt6 WebSockets) client: reconnect + backoff, antrean saat terputus, ping keepalive, helper JSON
find_package(nxc CONFIG REQUIRED COMPONENTS Database WebSocket)
target_link_libraries(app PRIVATE nxc::nxc nxc::Database nxc::WebSocket)
nxc_deploy(app)   # SETELAH target_link_libraries

Aturan pakai:

  1. Selalu #include <nxc/X.h> — jangan pernah mengutak-atik path ke src/.
  2. Tipe yang hanya di-forward-declare di header publik (mis. class TitleBar;
    di Window.h) adalah milik internal — hanya terlihat sebagai pointer di
    bagian privat. Jangan pernah mendefinisikan, men-deref, atau mewarisi tipe
    itu dari project developer.
  3. NXC_EXPORT wajib pada setiap kelas/fungsi publik baru (lihat checklist §6).
  4. Event: subscribe nxc::EventBus::instance() dan pakai konstanta
    nxc::Event::* — string bebas ("modul.kejadian") juga boleh untuk event
    aplikasi sendiri.

5. Cara developer memakai SDK (ringkas)

:: 1) bangun library + install SDK Debug + Release (sekali, ulangi setelah tiap perubahan)
set SDK=1
build.bat

:: 1b) cara tercepat: buat project siap build (CMakeLists + CMakePresets + src/)
npm create nxc-app@latest MyApp
::     atau tanpa Node:
powershell -ExecutionPolicy Bypass -File tools\new-app.ps1 -Name MyApp -Path D:\proyek

:: 2) project Anda: find_package + link
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 ^
      -DCMAKE_PREFIX_PATH="<path\ke\nxc-sdk>;C:\Qt\6.8.3\msvc2022_64"
find_package(nxc CONFIG REQUIRED)          # juga menerima find_package(NXC)
target_link_libraries(app PRIVATE nxc::nxc Qt6::Widgets)
nxc_deploy(app)   # salin nxc(d).dll + windeployqt + Qt6Qml setelah build -> exe langsung jalan

SDK memuat nxc.dll/nxc.lib (Release) dan nxcd.dll/nxcd.lib
(Debug); find_package(nxc) memilih sendiri sesuai konfigurasi build Anda.

#include <nxc/Application.h>
#include <nxc/Window.h>

int main(int argc, char* argv[]) {
    nxc::Application app(argc, argv);
    app.setWindowFactory([] { return new MyWindow; });   // MyWindow : nxc::Window
    return app.exec();
}

Contoh lengkap & teruji: examples/hello-nxc/ (langkah detail di
examples/hello-nxc/README.md) — di situ terbukti tidak ada satu pun
#include ke src/. Ada juga sample yang lebih luas cakupannya — menguji
Dialog, ContextMenu+shortcut, Theme, Settings, EventBus, multi-window, dan
JavaScriptRuntime — di D:\Cnative\desktop\Developer (project sungguhan
di luar repo, build & jalankan terverifikasi).


6. Garis merah — yang tidak boleh dilakukan developer

❌ Jangan Alasan
#include "src/...." atau menambah include path ke repo NXC Header internal tidak ikut terpasang; struktur src/ bebas berubah tiap rilis
Memakai TitleBar, platform.h, MainWindow, bridge.h, dll. Tipe internal — tidak diekspor, tidak stabil, bisa di-rename/kapan saja
Mengedit file di nxc-sdk/ secara manual Hasil cmake --install — tertimpa pada install berikutnya; kalau isinya salah, perbaiki di CMakeLists.txt internal lalu install ulang
Mengubah nxc-sdk/resources/*.qss untuk mengganti tampilan nxc.dll membaca stylesheet dari yang ter-embed (:/style_*.qss), bukan dari folder itu. Kustomisasi UI = stylesheet aplikasi sendiri atau Theme::apply()
Menyimpan main() di dalam library Library tidak punya main() — entry point selalu di project developer
Bergantung pada layout/pengaturan QSettings internal Pakai nxc::Settings (API resmi); format penyimpanan bisa berubah
Menyebarkan nxc.dll tanpa dependensi runtime-nya Lihat §8 — minimal DLL Qt yang diperlukan + nxc.dll

7. Checklist: menambah API baru (untuk kontributor internal)

  1. Header publik baru/diubah di include/nxc/ — include guard
    NXC_QT6_PUBLIC_*, #include <nxc/Export.h>, namespace nxc,
    NXC_EXPORT pada setiap simbol yang diekspor.
  2. Tambahkan ke daftar NXC_PUBLIC_HEADERS di CMakeLists.txt (otoromatis
    ikut ter-install ke inc/nxc/).
  3. Jangan bocorkan tipe internal — kalau terpaksa, forward-declare saja
    (pola class TitleBar; di Window.h) dan simpan sebagai pointer privat.
  4. Dokumentasikan di docs/API.md + satu baris di tabel struktur README.md.
  5. Test di `tes...
Read more

NXC — SDK aplikasi desktop native C++ (Qt 6)

Choose a tag to compare

@iyanrsaleh iyanrsaleh released this 25 Sep 03:25

SDK untuk membangun aplikasi desktop native C++ di atas Qt 6 Widgets:
satu binary yang ringan, dengan fondasi aplikasi yang sudah jadi — window,
terminal, tema, shortcut, database, dan lainnya.

Yang disediakan SDK Header
Lifecycle aplikasi (bootstrap, window factory, tray, event loop) <nxc/Application.h>
Window frameless ala Windows 11 (title bar, resize, Mica, tanpa garis tepi) <nxc/Window.h>
Context menu, dialog standar <nxc/ContextMenu.h>, <nxc/Dialog.h>
Keyboard, shortcut terpusat (scope, chord, konflik) <nxc/Keyboard.h>, <nxc/Shortcut.h>
Terminal sungguhan (PTY + emulator VT: ketik langsung, warna, Tab-completion, saran PowerShell 7, vim) <nxc/Terminal.h>, <nxc/TerminalProcess.h>
Tema gelap/terang (hot-swap), preferensi tersimpan, tray <nxc/Theme.h>, <nxc/Settings.h>, <nxc/Tray.h>
Event bus <nxc/Events.h>
Runtime bridge opsional: JavaScript (in-process), Node.js, Python <nxc/Runtime.h> dkk.
Modul opsional Database (SQLite/driver lain, query async, migrasi) <nxc/Database.h>
Modul opsional WebSocket (reconnect, antrean offline, keepalive) <nxc/WebSocket.h>

Referensi lengkap: docs/API.md · panduan pemakaian SDK:
docs/Developer.md.

Prasyarat

  • Windows 10 1809+ / Windows 11, x64 (SDK saat ini: Windows saja)
  • Qt 6.8.x, kit MSVC 2022 64-bit — Qt Online Installer. Centang juga
    Qt Qml (dipakai nxc.dll) dan, bila memakai nxc::WebSocket, add-on
    Qt WebSockets. SDK dibangun dengan Qt 6.8.3 — pakai minor yang sama.
  • Visual Studio 2022 Build Tools — workload Desktop development with C++
  • CMake ≥ 3.21
  • Node.js ≥ 18 — hanya untuk create-nxc-app

Mulai cepat

npm create nxc-app@latest MyApp
cd MyApp
cmake --preset default
cmake --build --preset debug
build\Debug\MyApp.exe

create-nxc-app membuat project (CMakeLists, CMakePresets, src/), mencari
kit Qt otomatis, dan mengunduh SDK dari
Releases ke cache ~/.nxc/sdk.
Opsi: --sdk <folder|file|URL .tar.gz>, --qt <prefix kit Qt> — lihat
create-nxc-app/README.md.

Tanpa npm

  1. Unduh nxc-sdk-<versi>-qt<qt>-windows.tar.gz dari
    Releases, ekstrak
    (tar -xzf ... -C nxc-sdk).
  2. Di project CMake Anda:
find_package(nxc CONFIG REQUIRED)                  # atau: COMPONENTS Database WebSocket
target_link_libraries(app PRIVATE nxc::nxc Qt6::Widgets)
nxc_deploy(app)   # salin nxc.dll + DLL Qt setelah build -> exe langsung jalan
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 ^
      -DCMAKE_PREFIX_PATH="C:\path\nxc-sdk;C:\Qt\6.8.3\msvc2022_64"
cmake --build build --config Debug
#include <nxc/Application.h>
#include <nxc/Window.h>

int main(int argc, char* argv[]) {
    nxc::Application app(argc, argv);
    app.setApplicationName(QStringLiteral("Aplikasi Saya"));
    app.setWindowFactory([] { return new MyWindow; });   // MyWindow : nxc::Window
    return app.exec();
}

SDK memuat konfigurasi Debug (nxcd.dll) dan Release (nxc.dll);
CMake memilih sendiri.

Lisensi

NXC SDK bersifat proprietary — lihat LICENSE. Komponen pihak
ketiga (Qt 6 di bawah LGPLv3, Fluent System Icons di bawah MIT) — lihat
THIRD-PARTY-NOTICES.txt.