Repository navigation
Releases: iyanrsaleh/nxc
Release list
v0.3.5
v 0.3.4
v0.3.4 SDK 0.3.2: menu bar di dalam title bar (Window::menuBar / setTitleBar…
v 0.3.3
v0.3.3 SDK 0.3.2: menu bar di dalam title bar (Window::menuBar / setTitleBar…
v0.3.2
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)
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
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
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_librariesAturan pakai:
- Selalu
#include <nxc/X.h>— jangan pernah mengutak-atik path kesrc/. - Tipe yang hanya di-forward-declare di header publik (mis.
class TitleBar;
diWindow.h) adalah milik internal — hanya terlihat sebagai pointer di
bagian privat. Jangan pernah mendefinisikan, men-deref, atau mewarisi tipe
itu dari project developer. NXC_EXPORTwajib pada setiap kelas/fungsi publik baru (lihat checklist §6).- 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 jalanSDK 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)
- Header publik baru/diubah di
include/nxc/— include guard
NXC_QT6_PUBLIC_*,#include <nxc/Export.h>,namespace nxc,
NXC_EXPORTpada setiap simbol yang diekspor. - Tambahkan ke daftar
NXC_PUBLIC_HEADERSdiCMakeLists.txt(otoromatis
ikut ter-install keinc/nxc/). - Jangan bocorkan tipe internal — kalau terpaksa, forward-declare saja
(polaclass TitleBar;diWindow.h) dan simpan sebagai pointer privat. - Dokumentasikan di
docs/API.md+ satu baris di tabel strukturREADME.md. - Test di `tes...
NXC — SDK aplikasi desktop native C++ (Qt 6)
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 (dipakainxc.dll) dan, bila memakainxc::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.execreate-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
- Unduh
nxc-sdk-<versi>-qt<qt>-windows.tar.gzdari
Releases, ekstrak
(tar -xzf ... -C nxc-sdk). - 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 jalancmake -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.