Backend version cards: Easy versus Advanced, Advanced selected with Advanced plan
Easy vs Advanced

Appifio Creator · Report BR02 · Technical comparison

Easy vs Aura Storage
a detailed comparison of the two backend models

Full side-by-side on philosophy, storage, security, JSON parsing, methods, FS/routes, helpers, codegen flow - and how to enable the right Prompt template so the AI generates for the Storage edition you actually run.

Critical - Prompt & skills

In Appifio CreatorPrompt & skillsAppifio prompt template → enable the document that matches your Backend edition. Then the AI Agent receives Prompt + skills automatically - you do not need to paste or attach Storage docs yourself.

Backend editionEnable this template (English title)
Easy (App Storage)Appifio Easy Storage - Complete AI Guide
Advanced / AuraAppifio Aura Storage (Advanced) - Complete AI Guide
Advanced + CMSAura Complete + Appifio Aura CMS + Storage - Complete AI Guide (AS19). CMS does not run on Easy.
(Optional) Shared frameAppifio Storage - Shared Prompt Framework (Easy + Aura) - still pair with only one Easy or Aura guide
Do not enable Easy + Aura Complete together. Stacking them mixes rules (JSON parse, appendData vs writeFile, auth…) → code for the wrong Storage edition vs your Backend tab.

Correct flow: (1) Backend tab → Easy or Advanced → Save → Save changes · (2) Prompt template: exactly one Easy or Aura guide (+ CMS guide if using CMS) · (3) Ask the AI to build.

Goals: Know when to pick Easy / Aura; never copy patterns across models; avoid parse / permission / list-wipe bugs; configure exactly one Prompt template.

Time: about 25-35 minutes

Audience: makers using Coder, AI codegen, people who already opened Backend (F01).

Read with: F01 · Easy API series EM01-EM09 · Aura series AM01-AM12 · BR01

Related: AM02 / AM03 (Aura list & flat) · EM02 / EM03 (Easy parse & one JSON ledger)

1. Overview & philosophy

 Easy (App Storage)Aura / Advanced
GoalSmall-medium apps, few records, light traffic (landing, biolink, form, small blog)Larger apps, more data, more users, clear roles + CMS
PhilosophyOne JSON ledger - each data type lives in one file; the browser loads all → edits → overwrites the whole fileSharding - lists split into shards; client fetches only what it needs; less bandwidth / overwrite races
Who handles lists?Mostly browser JS (find, paginate, add/remove on arrays)Server helps via readList / appendData / updateData
CMS / MCPUsually not a full CMSNeeds Advanced (+ matching account plan)
One-liner: Easy = “load all, edit, write all back”. Aura = “shard, fetch the slice, patch the right place”. Same appifio_client - two different API rulebooks.

2. Storage & sharding

Shared: Same Appifio data store; same hostile filename filters, blocked executable extensions, dangerous-content scans.

PointEasyAura
How it storesEach filename = one whole JSON blobflat = whole blob (config sheets); indexed = master index + per-row shards
Internal shapeServer does not classify Object/Array - validate & storeClear flat / indexed split
Long listsWhole ledger in browser RAMFetch only needed fields via readList; each row is a hidden shard
Add / edit / delete one rowEdit object/array then writeFile the whole ledgerappendData (server assigns id) · updateData · delete = content null

3. Security & permissions

3.1 Easy

  • Primary protection: page session key (+ platform quota).
  • No in-app admin accounts - do not build Aura-style login/admin.
  • Anyone with the page session key has near-full mutation power: data store, page files, routes (via appifio_client).

3.2 Aura (Advanced)

  • Four levels: Guest → user → admin → superadmin (includes a user role, not only Guest/Admin).
  • Successful login → Aura client keeps the admin session and sends it on later requests.
  • Auth is locked in login.json - normal readFile/writeFile to that file is blocked.

Aura rate limits (match product code - do not mix units):

  • Failed logins: 5 / 10 minutes → IP block ~30 minutes
  • Mutation spam: 60 / 1 minute / IP / link → block ~1 hour (not 60/hour)
  • Backend function: 120 / 1 hour / IP / link
  • Bad page-session-key attempts also have a separate block threshold

4. JSON parsing - the easiest place to break

MethodEasyAura
readFilecontent = raw string → must JSON.parse (+ try/catch)content is already object/array → do not parse again
readListN/AAlready parsed - use the array directly
readFsFile (JSON)Often still a string → parse if needede.g. routes.json may still be a string
readFieldvalue already decoded; missing file → success: falseMissing → success: true, value: null
// Easy - correct
const r = await appifio_client.appifio_readFile('blog.json');
if (r.success && r.data.exists && r.data.content) {
  const data = JSON.parse(r.data.content); // try/catch recommended
}

// Aura - correct (do NOT JSON.parse content)
const a = await appifio_client.appifio_readFile('blog.json', itemId);
const item = a.data.content; // already an object

5. Same method names - different behavior

  • Upload: Easy needs only the page session key. Aura uploadImage / uploadFileadmin login required.
  • findByName: Easy defaults to the data store with “contains” matching. Aura matches filenames on the data store.
  • Route: Easy = client reads/writes routes.json (composite JS). Aura = route API + admin required to write.
  • hardDelete: Aura usually needs superadmin.
  • CMS / MCP: Easy usually lacks full CMS. Aura + matching plan → CMS panel (AS series).

5.1 Aura-only (list + auth)

  • appifio_readList - field-trimmed list
  • appifio_appendData - append row (visitor/public for forms)
  • appifio_updateData - update; delete item = content null (no deleteData)
  • Auth: login, logout, getSession, registerAdmin, changePassword, updateProfile, admin management…
  • Helpers: validateAdminSession, isLoggedIn - do not replace getSession when entering admin pages

5.2 Composite / index helpers lean Easy

createContentWithRoute, ensureHandlerFile exist on both families. deleteContentWithRoute, updateContentIndex, removeFromContentIndex - Easy; Aura uses indexed/shards and composes updateData/removeRoute yourself.

6. FS, routes & backend functions

Both read/write the physical FS (HTML, assets) and use routes.json to map URL → file.

TaskEasyAura
Read FS / list FSPage session keyGuests can read
Write/delete FS, add/remove routesAnyone with the key can usually do itAdmin required
executeBackendFunctionNode sandboxSame + tighter rate limits; Secrets separate from the client API (Panel config)
Aura - guest pages: read only (readFile/readList) + appendData for forms. Do not call writeFile / updateData / addRoute on the public frontend. Delete one list row = updateData(file, id, null) - there is no deleteData.

7. Typical development flows

Easy

  1. readFile('data.json')
  2. JSON.parse(...)
  3. Edit in JS
  4. writeFile(..., JSON.stringify(data))
  5. addRoute(slug, 'detail.html')

Aura

  1. login → token kept automatically
  2. Guest form: appendData
  3. Admin list: appendData / updateData
  4. Pages: writeFsFile + addRoute
  5. List UI: readList(..., fields)
  6. Detail: readFile(file, id) → shard

8. Golden rules for codegen / asking AI

Appifio prompt templates listing Easy Storage, Aura Storage, Shared Framework, and Aura CMS guides
One Prompt template

Easy - template: Appifio Easy Storage - Complete AI Guide

  • Always parse after readFile; do not invent Aura-style login/admin.
  • You still need the page session key - whoever has it ≈ full mutation.
  • readField missing file → success: false. findByName is data-store only.

Aura - template: Appifio Aura Storage (Advanced) - Complete AI Guide

  • Do not hash admin passwords yourself; do not invent admin users.json - use built-in Auth.
  • Lists: never writeFile the whole ledger → use appendData / readList / updateData.
  • Flat config/settings: still readFile/writeFile. Wrap admin pages with getSession().

9. Method matrix (full)

MethodEasyAura
createFileCreate (errors if exists)With flat/indexed classification
readFileReturns string → need JSON.parseAlready parsed; optional id for one shard
writeFileOverwrite (page session key)Overwrite (admin required)
deleteFile / restoreFileSoft delete / restoreAdmin required
hardDeleteFilePermanent deleteUsually superadmin
fileExists / getFileInfo / listFiles / searchFilesYesYes
renameFile / copyFileYesAdmin required
findByNameData store only, “contains”Exact name on data store
readFieldMissing → success: falseMissing → success: true, value: null
writeFieldPage session keyAdmin required
uploadImage / uploadFilePage session keyAdmin required
readFsFile / listFsFiles / getFsFileInfoYesGuests can read
writeFsFile / deleteFsFilePage session keyAdmin required
addRoute / removeRoute / getRoutesComposite JS ↔ routes.jsonAPI + admin to write
executeBackendFunctionNode sandbox + Secrets (Backend tab)Yes + tighter rate limits
Composite / index - Easy-leaning
createContentWithRoute / ensureHandlerFile✅ (similar family + auth/shards)
deleteContentWithRoute / updateContentIndex / removeFromContentIndex✅ (EM04)❌ - use indexed + compose yourself
List / sharding - Aura only
appendData / readList / updateData✅ (delete row = updateData(..., null))
deleteDatadoes not exist
Auth / CMS - Aura only
login / logout / getSession / registerAdmin✅ (AM06) - wrap admin pages with getSession
CMS security / MCP / theme helpers✅ CMS panel (AS series)

Per-method detail + examples: Easy → EM01-EM09 · Aura → AM01-AM12. Do not mix the two series.

10. Helpers - same on Easy and Aura?

These JS helpers share the same logic family on Easy and Aura / Advanced appifio_client:

HelperNotes
formatDateTimeUTC / …Z; presets date|time|datetime|full|iso|us|eu; respects window.__AURA_CMS_DISPLAY_FORMATS__ if present
generateSlugSame Vietnamese-friendly slug style
formatFileSize, sanitize / extension / isImage / unique nameAligned
deepClone, debounce, getRouteSlug, getQueryParamsAligned
showError / showSuccessHooks window.showError / showSuccess if the page defines them
Do not confuse: Shared helpers do not mean DB/FS APIs are shared (parse readFile, missing-file readField, upload auth, route PHP vs composite…).

11. Quick checklist (print and keep)

  1. Backend tab: Easy or Advanced → Save → Save changes.
  2. Prompt & skillsAppifio prompt template: enable one matching guide (English titles at the top).
  3. Do not enable Easy + Aura together; do not attach both doc sets into one chat.
  4. Easy readFile/readFsFile JSON → must JSON.parse (try/catch).
  5. Aura readFile/readList → do not re-parse content.
  6. Easy readField missing file → success: false; Aura → value: null.
  7. Easy findByName = data store only.
  8. Aura delete list item = updateData(..., null) - never call deleteData.
  9. Aura mutation rate = 60/minute (not /hour).
  10. Aura upload = admin; Easy = page session key only.
  11. Aura roles include user.
  12. Go deeper: Easy → EM01-EM09 · Aura → AM01-AM12 · CMS UI → AS · before client handoff: EM09 or AS17.

12. One-paragraph summary

Easy keeps a whole “ledger” in one JSON file that the browser loads, edits, and overwrites; protection is the page session key with no in-app admin. Aura shards lists, has Guest/user/admin/superadmin, rate limits, and dedicated list/auth methods. Date/slug helpers are nearly the same; differences live in JSON parsing, readField, upload, routes, and how you mutate lists. For correct AI output: Backend and one Prompt template must both be Easy or both Aura - never both guides at once.

Suggested next step

F01 → pick Backend → enable matching Prompt template → EM01 (Easy) or AM01 (Aura)

Easy: Appifio Easy Storage - Complete AI Guide · Aura: Appifio Aura Storage (Advanced) - Complete AI Guide

What the AI Agent can do: BR03

Appifio Creator · Full comparison report · BR02