Frequently asked questions
How many automation graphs does each app have?
Just one for the whole app - not a separate graph per screen. The distinction between screens is made with screenId on screen-enter/leave events, or simply because the elementId you picked only exists on one particular screen.
What's the difference between db.* and sdb.*?
db.* is local storage on the visitor's own device only (private, not shared). sdb.* is a server-side table - it can be shared by all visitors or private to each one, depending on the scope you chose.
Where are cache variables saved?
On the visitor's own device (localStorage). A returning visitor keeps their value, but another visitor doesn't see it. For shared data you need a server-side data table.
Can I write real JavaScript in the "Run code" action?
No. It's a small, focused path language for reading/writing elements, local storage, server tables and variables - not eval and not full JS.
Why does an action I set up "do nothing"?
The editor doesn't block saving an action with empty fields. First check whether its target field (element/table/screen) is actually filled in.
How do I send an immediate push notification vs. a scheduled one?
If "Send push notification" is wired to an interactive event (like a button click) - it's sent immediately. If it's wired to "Scheduled notification" - the server checks every app every minute and sends at the configured time/days, even while the app is closed.
How do I store a password without exposing it in the data table?
With the hash filter - store {{inpw|hash}} instead of the password itself, and on login compare the hash of what was typed to what was saved. Full detail and a complete example are in the "Functions and expressions" chapter.