●
● ● ●
● ● ●
● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
A Masterpiece Will Always Require Effort
A Masterpiece Will Always Require Effort.
We build developer tooling for teams shipping software inside NetSuite.
NetSuite is where a lot of businesses actually run, and it is one of the least pleasant places to be a developer. The platform has React-shaped problems and 1990s-shaped answers. We are closing that gap.
| Project | What it is | Status |
|---|---|---|
| 🛠️ warekit-cli | The CLI and MCP server. Scaffolds SuiteScript, SDF objects and deployments. | Open source, MIT |
| 📦 WareKit React NetSuite (Lite) | The starter kit. A React 19 SPA — TypeScript, Tailwind v4, Playwright — served to your users by a Suitelet. | Private beta |
| 💎 WareKit React NetSuite (Pro) | Licensing and entitlement, role mapping, typed data layer, bundle pipeline, admin center. | In development |
| ▲ WareKit Next NetSuite (Lite) | The hybrid kit. A Next.js app on Vercel that reaches NetSuite from its API routes, shipping the same SDF project for the SuiteScript backend. | Private beta |
| 🗄️ WareKit Next NetSuite (Pro) | Adds NetSuite-backed session storage — sessions in a custom record instead of Postgres, built to survive NetSuite's account-wide concurrency limit. | In development |
Inside a WareKit project, one command scaffolds a whole endpoint:
npx warekit new restlet customers --methods get,postIt writes the SuiteScript file, the SDF object named after its scriptid, the
deploy.xml <path> when the folder is new, and the runtime registration —
then tells you the governance budget you just signed up for. A RESTlet gets
5,000 usage units and a Suitelet 1,000, which is the whole reason the choice
matters.
The same generator is exposed over MCP, so an agent and a human produce identical output:
{ "mcpServers": { "warekit": { "command": "npx", "args": ["-y", "warekit-mcp"] } } }Embedded. A React app served by a Suitelet comes off the NetSuite application domain, which makes it same-origin with the session cookie:
- 🔐 No OAuth dance, no token-based auth, no API keys in the browser
- 🌐 No CORS proxy and no second thing to host
- 👤 The user is already who NetSuite says they are, with their roles and permissions
Endpoints resolve at runtime through url.resolveScript(), so one build runs in
sandbox, production and every customer account without a rebuild. The cost is
that you live inside NetSuite: its page chrome, its release cycle, its limits.
Hybrid. A Next.js app on Vercel that reaches NetSuite from its API routes — OAuth 2 against an integration record to sign users in, or token-based auth for server-to-server calls. Either way the credential stays on the server and the browser never sees one. You get server components, your own domain and your own deploy cadence.
The backend does not move. The hybrid kit ships the same SDF project as the
embedded one: your RESTlets, Suitelets and other SuiteScript still deploy to
the File Cabinet, and the same CLI scaffolds them. What changes is where the
frontend lives and how it proves who the user is — which means you now own an
auth flow, a token lifecycle, and a userinfo RESTlet answering from
N/runtime.
Neither is the right answer twice. Pick by where the frontend has to live; the NetSuite half of the work is the same either way.
👑 A Masterpiece Will Always Require Effort.