Memulai
nuforge adalah runtime reaktif yang cepat, aman, dan fine-grained untuk membangun page builder visual no-code. Anda mendeskripsikan halaman dalam DSL kecil; nuforge mem-parse-nya menjadi AST reaktif, me-render-nya dengan React, dan dapat mengekspornya menjadi komponen React yang rapi.
Instalasi
Ada dua pilihan. Satu instalasi — paket umbrella nuforge memberi Anda semua
lewat subpath:
npm install nuforge # atau: pnpm add nuforge / bun add nuforge / yarn add nuforge
import { Nu, Parser, t } from 'nuforge';
import { NuProvider, NuFrame } from 'nuforge/react';
import { createEditor } from 'nuforge/editor';
import { toReact, toHtml, toVue } from 'nuforge/codegen';
Atau tetap granular — pasang hanya paket @nuforge/* yang Anda butuhkan
(bundle terkecil, graph paling eksplisit):
npm install @nuforge/core @nuforge/parser @nuforge/types @nuforge/react
import { Nu } from '@nuforge/core';
import { NuFrame } from '@nuforge/react';
Add-on opsional (terpisah agar dependensi beratnya hanya ditarik saat diperlukan):
@nuforge/codegen— ekspor halaman ke React / HTML / Vue (juga dinuforge/codegen).@nuforge/editor— SDK untuk membangun editor halaman visual Anda sendiri (juga dinuforge/editor).@nuforge/react-code-editor— editor DSL CodeMirror (autocomplete + lint).@nuforge/collaboration— sinkronisasi real-time via Loro CRDT.@nuforge/mcp— server Model Context Protocol untuk asisten AI.
Persyaratan: React 18 atau 19. Paket bersifat ESM-first dan menyertakan build ESM + CJS sekaligus dengan deklarasi tipe. Di Next.js, tambahkan
nuforge(atau paket@nuforge/*) ketranspilePackages.
Mulai cepat
Sebuah halaman adalah runtime Nu yang dimuat dengan program ter-parse, lalu
di-render oleh <NuFrame>.
'use client';
import { Nu } from '@nuforge/core';
import { Parser } from '@nuforge/parser';
import { NuFrame, NuProvider } from '@nuforge/react';
import * as t from '@nuforge/types';
import { useState } from 'react';
const SOURCE = `component App() {
val count = 0;
} => (
<div>
<h1>{"Counter"}</h1>
<button onClick={() => count = count + 1}>{count}</button>
</div>
)`;
export function Page() {
const [{ nu, frame }] = useState(() => {
const nu = Nu.create();
nu.load(t.state({ program: Parser.parseProgram(SOURCE) }));
return { nu, frame: nu.createFrame({ component: { name: 'App' } }) };
});
return (
<NuProvider nu={nu}>
<NuFrame frame={frame} />
</NuProvider>
);
}
Menekan tombol memperbarui state reaktif dan hanya me-render ulang bagian yang
bergantung padanya. Lihat contoh langsung untuk @each, @if, dan
two-way binding.
Ekspor ke React
Ubah halaman apa pun menjadi komponen React mandiri — tanpa nuforge saat runtime:
import { toReact } from '@nuforge/codegen';
const tsx = toReact(nu.state.program);
// → import { useState } from 'react';
// export function App() { ... }
Itu saja yang Anda butuhkan untuk memulai.