A package is a file that carries a flow with everything it needs: the flows it calls (Run flow nodes, error flow) and its script nodes. Use it to back up a flow, move it to another account, or share it.
Export
- One flow: Studio list › row actions › Export package.
- Several: Studio header › ⋯ › Export flows, tick the flows (select all or clear), Download.
You get one JSON file (mooflair-flows.json for several):
{
"mooflair": "package",
"flow": [
{
"id": "6ae1933938a65c8f9374bfe0",
"name": "𝕏 Auto Reply",
"graph": { "nodes": [], "edges": [], "notes": [] },
"setting": { "caller": "none", "timeoutMs": 0, "timezone": "Asia/Jakarta", "error": { "flowId": null }, "agent": { "instruction": "" } }
},
{
"id": "6ae08f2f…",
"name": "Shopee Product Finder",
"graph": { "nodes": [], "edges": [], "notes": [] },
"setting": { "caller": "self", "timeoutMs": 900000, "timezone": "UTC", "error": { "flowId": null }, "agent": { "instruction": "" } }
}
],
"script": [
{ "type": "script/1a2b3c4d", "name": "Like post", "description": "", "icon": "heart", "effect": true, "code": "export default async (props) => { … }" }
]
}
flowholds the flows you picked first, then the flows they call (deep).- Option defaults travel, except account and AI key options (empty, the importer picks their own).
- Dataset picks travel as ids only: a credential or table field holds the id of your dataset entry, never its secrets; account and AI key fields hold an option reference (
{{ option.account.ai }}), which travels as it is. On import, ids the importing user doesn't own are emptied, so another account picks its own; importing into your own account keeps them. - The exported graph is the draft of each flow.
Import
Studio › New flow › Import file (every flow of the file), or Studio header › ⋯ › Import flows: pick the file, tick the flows to bring, Import (each flow you tick brings the flows it calls). mooflair:
- Brings in the script nodes: a type you already have is reused, otherwise a new script node is created (up to 50).
- Creates every flow with new ids and points the links between them (Run flow, error flow) at the new copies.
- Empties dataset picks you don't own and opens the main flow.
Fill the empty pickers before running.
A file that isn't a package shows "That file isn't a Mooflair package."
Move or copy
Studio list › row actions › Move or copy: pick another workspace you're in (not as a guest) and Copy or Move. It's a package export here and import there in one step (aStudioTransfer, through flowPackageExport / flowPackageImport in src/controllers/flow/package): the flow, the flows it calls and its script nodes arrive in the other workspace; accounts, AI keys and tables don't, so their fields are empty and the flow's options ask for new picks. Move also deletes the original here (flowTrash: to the Trash, its test browsers stop, its campaigns turn off). You need to see the flow here (to move: delete it) and create flows there, within that workspace's plan. Both audit logs record it (flow.copy.out / flow.copy.in, flow.move.out / flow.move.in).
FAQ
Are my passwords or API keys in the file?
No. Only the ids of your dataset entries are written; credentials and keys stay in Dataset.
Can I import the same package twice?
Yes. Each import creates new flows.