FluxBilling
Feature · Visual plugin builder

Every integration is a flow graph.

No SDK, no module to publish. Drag twelve node types onto a canvas, wire them together, and the runtime walks the graph on every invocation. Payment gateways, hypervisors, registrars, notifications — all of them, the same way.

12 node types5 plugin categories6 starter templates9 flow scaffolds.xzplugin import / export
Authoring

The graph is the plugin.

What you draw on the canvas is what gets persisted to visual_plugin_flows.canvas as JSONB. No build artefact, no compilation, no SDK module. The same shape ships in the .xzplugin export and the same shape replays on import.

stripe / create-checkout-session
flow
Start
flow
Transform
data
amount → cents
HTTP Request
data
POST /checkout/sessions
Condition
flow
status_code === 200
End
flow
5 nodes · 4 edges
visual_plugin_flows.canvas
stripe-visual.xzplugin (extracted)
json
{
"format": "fluxbilling-visual-plugin",
"version": "2.0",
"plugin": {
"name": "Stripe",
"slug": "stripe",
"type": "payment-gateway",
"capabilities": {
"supportsRefund": true,
"supportsRecurring": true,
"webhookRequired": true
}
},
"connections": [{
"slug": "stripe-api",
"baseUrl": "https://api.stripe.com/v1",
"authType": "bearer_token"
}],
"flows": [{
"slug": "create-checkout-session",
"flowType": "action",
"canvas": { "nodes": [/* 5 */], "edges": [/* 4 */] }
}]
}
Canvas

Twelve node types. Enough for any REST integration.

The library is intentionally small. HTTP, transform, branch, loop — the primitives every integration actually uses. Each node emits structured output to the run trace, so debugging is reading a list, not stepping through a debugger.

12 nodes · JSONB graph · sourced from visual-plugins/nodes/
Start
flow
Entry point
End
flow
Exit point
Condition
flow
If / else branching
Switch
flow
Multi-way branch on a value
Loop
flow
Iterate over an array
HTTP Request
data
Call an external API
Transform
data
Map and reshape data
Status Map
data
Provider status → internal
Set Variable
data
Store in flow context
Delay
util
Pause for N ms
Log
util
Trace output
Format Message
notify
Telegram / Slack / Discord
Surfaces

Five plugin categories. One runtime.

Every plugin declares one of five plugin.type values. The category routes the graph into the right host: payments through GatewayRegistry, infrastructure through VisualPluginAdapter, notifications through NotificationRetryProcessor.

type → what it does → shipped examples
5 categories
payment-gateway
Checkout sessions, captures, refunds, webhooks. Registers with GatewayRegistry.
Stripe, PayPal, Mollie, CoinGate, GoCardless
infrastructure-provider
Provision, suspend, terminate, power, snapshots. Bridges via VisualPluginAdapter.
Virtualizor, Pterodactyl, SolusVM 2, cPanel/WHM
notification-integration
Outbound messages with FormatMessage templates, retry via NotificationRetryProcessor.
Telegram, Discord, Slack
automation
Background workflows triggered by platform events.
Custom business rules, cross-system sync
custom
Anything else — a flow graph wired to your own webhooks and endpoints.
Internal tools, reporting jobs
Starters

You almost never start from a blank canvas.

Six service-type starters scaffold the connection, capabilities, and a working flow set. Nine flow scaffolds add common shapes — lifecycle, power, data fetch, CRUD, payment — on top.

Service-type starters
6 templates
VPS / Cloud Provider
Power, lifecycle, snapshots, backups
Game Server Provider
Console, restart, kill, logs
Web Hosting Panel
Account create, suspend, password reset
Domain Registrar
Register, transfer, renew, DNS
License Provider
Issue, revoke, validate
Blank Plugin
Empty graph, build from scratch
Flow scaffolds
9 across 5 groups
Service Lifecycle
Provision, suspend, terminate
Power Actions
Start, stop, restart, kill
Data Operations
Status, stats, lists
CRUD Operations
Create, read, update, delete
Payment
Checkout, capture, refund, webhook
Distribution

Ship a plugin as a single .xzplugin file.

Export bundles the manifest, connections, flows, webhooks, forms, styles, and config schema into a gzipped JSON file. Import on any tenant. The marketplace publishes the same bundle — admins install with one click and configure the connection per tenant.

marketplace
FluxBilling plugin marketplace — install plugins, configure per-tenant connections
Engineering

Plugin code is third-party code. Treated like it.

Every plugin runs in the tenant’s own pod under the same auth model and rate limits as a regular API client. No god-mode internals, no privileged escape hatches, no shared secrets across tenants.

Per-tenant isolation
Plugin set lives inside the tenant pod. Sensitive settings encrypted with the per-tenant SETTINGS_ENCRYPTION_KEY. No cross-tenant path.
Trace-first execution
FlowExecutor records per-node input, output, latency, and errors to the run trace. Debugging is reading a list, not stepping through a debugger.
Marketplace export-lock
Plugins installed from the marketplace cannot be re-exported. PluginPackager refuses on a marketplace_listing_id check — anti-piracy without DRM theatre.
Get started

Try it on your own data. Refund inside 14 days if it’s not the fit.

Pick a tier and provision a tenant in under two minutes — isolated K3s namespace, your own database, the full product. If FluxBilling isn’t the right fit inside 14 days, open a ticket and we’ll refund the subscription. No sales call, no qualification gate.

14-day refund
Standard policy
  1. 01.
    Pick a tier
    Lite from €4.95/mo. Upgrade later, no migration.
    < 1 min
  2. 02.
    Provision the tenant
    Isolated K3s namespace + your own PostgreSQL database. Full product, your data.
    < 2 min
  3. 03.
    Refund inside 14 days
    Not the fit? Open a ticket within 14 days and we refund the subscription. No questions, no qualification gate.
    d0 — d14
14-day refund · cancel any time
Start →