Reference


↓ API↓ Command-Line↓ Datatypes↓ Directories↓ Objects↓ FFDL↓ Metadata↓ Queries↓ URIs

API Docs

API • ↓ Command-Line↓ Datatypes↓ Directories↓ Objects↓ FFDL↓ Metadata↓ Queries↓ URIs

The FatFractal Platform supports a variety of clientside and serverside environments.

You can access the following API docs from this page. Clicking on the links below will open a new window.

Download Download Download Download


Command-Line Tools

↑ API • Command-Line • ↓ Datatypes↓ Directories↓ Objects↓ FFDL↓ Metadata↓ Queries↓ URIs

ffef

The ffef command is used for controlling your backend application. Use it to:
  • Scaffold a new application
  • Deploy an application, either locally or to the cloud
  • Retrieve the current backend definition of your application

The executable is located in the runtime/ffnsbin directory of your install.

The forms of the command are:

ffef newapp <application name> <domain>
ffef deploylocal
ffef deployFFabric
ffef getFFDL <local application URL>

Each form is described below.

newapp

ffef newapp <application name> <domain>

Scaffold a new application with the specified domain. Generally run from within a directory specifically for the application. Scaffolding creates the directory structure and configuration files for your application.

deploylocal

ffef deploylocal

Deploy the application in the current directory to the local engine.

deployFFFabric

ffef deployFFFabric

Deploy the application in the current directory to the FatFractal fabric, i.e. the cloud.

getFFDL

ffef getFFDL <local application URL>

Retrieve the FFDL application definition from the application at the specified URL. Note that this command only applies to local deployments. Should be run from the application’s directory.

When you run this command, the application’s current application.ffdl file is renamed to application.ffdl.<datetime>, and the application definition retrieved from the provided URL is saved as application.ffdl.

ff-service

The ff-service command is used to start and stop a local engine. The command should be run from the runtime directory of your install. The executable is located in the runtime/bin directory of your install.

The forms of the command are:

ff-service cl
ff-service start
ff-service stop

Each form is described below.

cl

Start the engine in the foreground.

start

Start the engine in the background.

stop

Stop the engine running in the background.

USAGE NOTE: If your engine is configured to use the default HTTP/HTTPS ports of 80/443, you may need to run the ff-service command as root (OS X/Linux/UNIX). To change the ports used by your engine, please re-run the installer.

Datatypes

↑ API↑ Command-Line • Datatypes • ↓ Directories↓ Objects↓ FFDL↓ Metadata↓ Queries↓ URIs

This table lists the backend datatypes supported by FatFractal. The unvalidated datatype may only be assigned using either the FatFractal Definition Language (FFDL) or JavaScript Serverside (JSSS).

Datatype Description
STRING Java definition http://www.linfo.org/string.html.
NUMERIC All numeric datatypes, including, for example, int, long, short, float and double.
DATE Date values down to millisecond precision. Stored as milliseconds since Jan 1 1970. (Negative implies a date before Jan 1 1970)
BOOLEAN A logical value, either “true” or “false”.
<type>[] Arrays. A single-dimension list of constituents; arrays are always defined as ‘of some datatype,’ including objecttypes (e.g. STRING[] or <objecttype name>[]).
BYTEARRAY An array of bytes, usually used as a container for files such as images, video or source-code.
MAP A list of key/value pairs, sometimes called a hashmap or dictionary.
GEOLOCATION A map (dictionary) which conforms to the W3C Coordinates specification. At a minimum, latitude and longitude must be supplied.
UNVALIDATED No validation is done on this member. Datatype is non-determinant to your app’s backend. You can assign a datatype of unvalidated[], as well.
OBJECTTYPE The name of an object which has previously been defined (e.g. Message, Task or Order). Embeds that object’s datastructure as a member.
REFERENCE [/<collection name>] A pointer to another object (i.e. indirect reference). Incorporated as part of the clientside object model. If the optional /<collection name> is provided, the reference may only point to objects in the specified collection. See Data Modeling.
GRABBAG [/<collection name>] A named set of references to other objects. Not incorporated as part of the clientside object model; clientside SDKs provide methods to add, remove, access, and modify grab bags. If the optional /<collection name> is provided, the grab bag may only contain objects from the specified collection. See Data Modeling.


Directory Layout

↑ API↑ Command-Line↑ Datatypes • Directories • ↓ Objects↓ FFDL↓ Metadata↓ Queries↓ URIs

Scaffolded Application

When you scaffold an application, the following directory structure is created.

ff-config Directory containing configuration files for your application.
.appName
Invisible file containing your application’s name.
application.ffdl
Main configuration file for your application’s backend. See Application Configuration.
context.xml
Descriptor file declaring your application name and domain name.
fatfractal.xml
Descriptor file declaring other parameters for your application.
ff-scripts Directory containing custom code scripts. See Custom Code.
webapp Directory containing the web application interface to your application’s backend.
index.html
HTML file defining the web application interface to your application’s backend.


Installation

When you install FatFractal on your local machine, the following directory structure is created. Depending on your installation options, not all files may be present.

runtime Directory containing files necessary to scaffold and deploy an application and to run a local engine.
archive
bin
Directory containing local engine executables.
ff-service
Executable to run a local engine.
clone
conf
Directory containing configuration files.
.pem
Your credentials for deploying applications to the cloud. Do not distribute your credentials!
config.properties.c
Encrypted engine configuration file.
keystore.js
domain
Root directory for local deployments.
ffnsbin
Directory containing executables for application creation and deployment.
ffef
Executable for application creation and deployment. See the Command Line Reference.
template.*
Template files for application scaffolding.
lib
Library directory for local engine.
logs
Log directory for local engine.
fatfractal.log
Local engine log file.
module
Module directory for local engine.
queue
Queue directory for local engine. WAR files in this directory are periodically detected by a running local engine and deployed.
scripts
Directory containing FatFractal serverside SDKs to aid serverside development
store
sdk Directory containing the FatFractal clientside SDKs.


FF Special Objects

↑ API↑ Command-Line↑ Datatypes↑ Directories • Objects • ↓ FFDL↓ Metadata↓ Queries↓ URIs

The FatFractal Platform supplies a few other built-in objects for particular purposes. Certain members of these special objects, as well as their datatypes, are pre-defined by the FatFractal Platform; in most cases you can add fields and subclass these objects as well.

FFUser

The FFUser object is an object, like any other, except that it has pre-defined members which are useful for managing end-users of your application. For example, FFUser objects have authentication information associated with them. Those members are:

Member Type Description
userName String User name, used for login. Must be unique to your application.
firstName String First name of user.
lastName String Last name of user.
email String Email address of user.
active Boolean Whether the user has been activated. If a user account is not active, that user may not log in.
groups Grab bag FFUserGroup objects representing groups to which this user belongs.

You may use and add to the members of the FFUser object in the same way as you would to any other object in your application; however you may not remove the pre-defined members from the object definition.

The groups member is a grab bag containing all the FFUserGroup objects owned by the FFUser. The groups member starts empty, and is manipulated using methods in the client APIs.

The active member default depends on the value of ActivateUsersOnReg parameter in your application’s application.ffdl file. If ActivateUsersOnReg is true, newly created FFUser objects begin with active set to true.

System User

Every FatFractal application has a special user, with username and guid system. This user has read and write permission to everything in the application, similar to root on *nix systems. In a local deployment, you may login as system (using password system) for convenience in modifying objects in your datastore. Additionally, all serverside custom code is run as the system user.

Logged-In User

The client SDKs provide methods to retrieve the FFUser object of the currently logged-in user:

FatFractal *ff = [FatFractal main];
FFUser *loggedInUser = ff.loggedInUser;
FatFractal ff = FatFractal.getMain();
FFUser loggedInUser = ff.getLoggedInUser();
var ff = new FatFractal();
...
var loggedInUser = ff.FFUser(ff.loggedInUser());

User login and registration is always done via HTTPS for over-the-wire security. User passwords are stored as hashes using the PBKDF2 function, using SHA1-HMAC for its random number generator, and every hash is created using a unique random 128-bit salt per user.

See Managing Users and the API Reference.

FFUserGroup

The FFUserGroup is a system object for managing sets of FFUser objects. One of the primary functions of the FFUserGroup is to provide a simple way to add and remove OAPs to sets of FFUsers; see Permissions.

FFUserGroup has the following members:

Member Type Description
groupName String Name of the group.
users Grab bag FFUser objects representing members of the group.

See Managing Groups and the API Reference.

FFGeoLocation

The FFGeoLocation object encapsulates geolocation information across clients and facilitates geo-queries. This object is used in conjunction with the GEOLOCATION backend datatype.

FFGeoLocation has the following members:

Member Type Description
latitude Numeric Latitude in degrees. Required.
longitude Numeric Longitude in degrees. Required.
altitude Numeric Altitude in meters.
accuracy Numeric Accuracy of latitude and longitude (95% confidence interval.)
altitudeAccuracy Numeric Accuracy of altitude (95% confidence interval.)
heading Numeric Direction of movement in degrees. NaN if speed is zero.
speed Numeric Magnitude of horizontal component of velocity, in meters per second.

See the API Reference.

Subclassing

You may want to extend the functionality of FF Special Objects by subclassing them. Doing so involves three steps:

  1. Subclass the class you would like to extend.
  2. Add any new members you’ve added to the objecttype definition of the original objecttypein your application.ffdl file.
  3. Register your new class with the FatFractal library, so that it maps to your new class instead of the built-in one.


Example

Let’s say we want to subclass FFUserGroup so that it includes a new string member called notes. Here’s how we would do it:

  1. Define a new class, which we will call NotesUserGroup:
    @interface NotesUserGroup : FFUserGroup
    @property (strong, nonatomic) NSString *notes;
    @end
    
    public class NotesUserGroup extends FFUserGroup
    {
        private String m_notes;
    
        public String getNotes() { return m_notes; }
        public void setNotes(String notes) { m_notes = notes; }
    }
    
  2. Change the FFDL definition of FFUserGroup:
    CREATE OBJECTTYPE FFUserGroup (groupName STRING, users GRABBAG /FFUser, notes STRING)
    
  3. Register NotesUserGroup with the FatFractal library:
    [ff registerClass:[NotesUserGroup class] forClazz:@&quot;FFUserGroup&quot;];
    //
    // IMPORTANT: Right now, registerClass:forClazz: will only take effect for the
    // FatFractal object on which you invoke it. This means that if you have multiple
    // 'FatFractal' objects then you would need to invoke registerClass:forClazz:
    // on each one. In the next release this behaviour will be changed so that
    // registerClass:forClazz: will take effect across all instances.
    //
    
    FFObjectMapper.registerClassNameForClazz(NoteUserGroup.class.getName(), &quot;FFUserGroup&quot;);
    


FFDL

↑ API↑ Command-Line↑ Datatypes↑ Directories↑ Objects • FFDL • ↓ Metadata↓ Queries↓ URIs

FFDL has two principal uses on the FatFractal Platform:

  1. Used in an application’s application.ffdl file, FFDL is used to set defaults for the application on startup.
  2. When retrieving the backend state representation for a running application, FFDL is returned representing the current state of the application.


SET command

SET commands take the general form

SET <parameter> <value>

Options for <parameter> and associated options for <value> are given in the following tables.

Registration parameters
Parameter Value Effect
AllowAutoRegistration true
false
When true, a login attempt with an unknown username will automatically register that user.
ActivateUsersOnReg true
false
When true, a user is activated immediately upon registration. When false, a user must be activated separately before login can occur. This is useful, for example, if you want to validate user email addresses.


Learn Mode parameters
Parameter Value Effect
AllowNewCollections true
false
When true, collections will be dynamically created as the clientside requests them. When false, the clientside can only add objects to collections that have been explicitly defined already on the application’s backend using the CREATE COLLECTION command.
AllowNewObjectTypes true
false
When true, objecttypes will be dynamically created as the clientside requests them. When false, the clientside can only add objects that have been explicitly defined already on the application’s backend using the CREATE OBJECTTYPE command.
AllowNewMembers true
false
When true, any object sent from the clientside may contain any members, whether or not they have been explicitly defined. When false, the backend will reject object creates or updates which include members that are not already explicitly defined.


Push parameters
Parameter Value Effect
PushIsInactive true
false
When true, push is disabled. When false, push is enabled.
ApplePushUsingProduction true
false
When true, use a Production Push SSL Certificate for the Apple Push Notification Service (APNS). When false, use a Development Push SSL Certificate. For more information on APNS, see here.
ApplePushKeystorePassword <password> Provide the password used to encrypt your Apple Push SSL Certificate.
AndroidPushAuthToken <token> Provide your Android Cloud to Device Messaging (C2DM) token to enable push notifications to Android devices.

See Push Notifications.

Other parameters
Parameter Value Effect
LogLevel TRACE
INFO
WARN
ERROR
Sets the message level of logs. Options are in descending order of detail.
ETaggingEnabled true
false
If true, the FatFractal backend will issue ETag responses, which allow certain HTTP request responses to be cached on the clientside. Currently, ETags are issued for requests to specific objects (i.e. /<collection>/<guid>) and to BLOB members of specific requests (e.g. /Celebrity/abcde/imageData).
SessionTimeoutInSeconds <timeout> Sets the amount of time after login that a session times out. Time is given in seconds. Default is 129600, i.e. 36 hours.
MaintainCreatedUpdatedBackReferences true
false
Defaults to false. When true, then back-references are maintained from /FFUser objects to all objects which were createdBy or updatedBy that user.
ReferentialIntegrityActionOnDelete NONE
PREVENT
SET_NULL
Controls what sort of action to take based on referential integrity checks if an object is being deleted. Currently this is an application-wide setting – let us know if you would like to control this per-collection.

Defaults to NONE.

If NONE, then the delete will proceed.

If PREVENT, then the delete will be prevented if there are any references to this object.

In next release we will support SET_NULL, where the delete will proceed but all references (from other objects or grab bags) to this object will be removed.


Security parameters
Parameter Value Effect
PasswordValidation true
false
Defaults to false. When true, then passwords are validated using the PasswordPattern regex (see below) and if validation fails then the PasswordMessage is sent back in the response to the client.
PasswordPattern A regular expression Default value is ((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,50}) – see PasswordMessage for description of what this is
PasswordMessage String The message which is returned in a response to the client if an invalid password is supplied when registering or changing passwords. Default value is Password must be between 8 and 50 characters long, must contain at least one digit, at least one lowercase letter and at least one uppercase letter
AllowAnonymousGets true
false
Defaults to true.
When false, users who are not logged in will receive 403 (forbidden) responses if they make requests to your app’s backend.
AllowInactiveGets true
false
Defaults to true.
When false, ‘inactive’ users (see active member in the FFUser type) will receive 403 (forbidden) responses if they make requests to your app’s backend, even if they have logged in.
AllowSystemUserToLogin true
false
Defaults to false in production; defaults to true if you are testing your app using a local FF engine.
SystemUserPassword String which conforms to your PasswordValidation settings. The system user is, effectively, the super-user of your application. When your backend is first created on the FF cloud, a random 25-character password is chosen for the system user. You may reset the password either by executing the resetPassword function in some server-side code, or by re-deploying your app and including this setting in your application.ffdl
AllowedGetPattern A regular expression Controls a whitelist which means that only HTTP requests which match these patterns are allowed. For example,

  • SET AllowedGetPattern /ff/resources/[-A-Za-z0-9_]+/[-A-Za-z0-9_@]+.*

would mean that only GETs which match that pattern are permitted. (In this case, only GETS to /collection/guid – i.e. no queries)

You may include multiple SET AllowedGetPattern xxx commands in your application.ffdl

See also DisallowedGetPattern which allows you to set a corresponding blacklist. If you set both a whitelist and a blacklist then first of all the whitelist is checked, then the blacklist. So you can limit client queries first by enforcing match to the whitelist, and refine by adding specific exceptions to the blacklist

DisallowedGetPattern A regular expression Controls a blacklist which means that any HTTP requests which match these patterns are forbidden. For example, adding the following to your application.ffdl

  • SET DisallowedGetPattern /ff/resources/SomeCollection/.*
  • SET DisallowedGetPattern /ff/resources/SomeOtherCollection/.*

would mean that all direct HTTP GETs to SomeCollection and SomeOtherCollection would be forbidden

You may include multiple SET DisallowedGetPattern xxx commands in your application.ffdl

See also AllowedGetPattern which allows you to set a corresponding whitelist. If you set both a whitelist and a blacklist then first of all the whitelist is checked, then the blacklist. So you can limit client queries first by enforcing match to the whitelist, and refine by adding specific exceptions to the blacklist

CORS See Cross-Origin-Resource-Sharing

Typical value: http://example.com:8080

An Access-Control-Allow-Origin header with the specified value is sent in HTTP responses.


CORS

The CORS parameter instructs your backend to include the Access-Control-Allow-Origin header in its responses, listing the provided origins as the value. This will allow XMLHttpRequests (XHRs) from a browser with one of the listed origins to proceed.

For example, the FatFractal Data Browser has a base URL of https://system.fatfractal.com. In order to send XHRs to your backend, your FFDL file should include:

SET CORS https://system.fatfractal.com

Note that you may provide multiple origins to the CORS parameter, separated by spaces.


CREATE command

COLLECTION

The syntax to create a collection is

CREATE COLLECTION /<collection name> [OBJECTTYPE <objecttype>[, <objecttype>, ...]]

If OBJECTTYPE is provided, then the collection may only contain objects of the listed objecttypes. Otherwise, the collection may contain objects of any objecttype.

OBJECTTYPE

The syntax to create a new objecttype is

CREATE OBJECTTYPE <objecttype name> (<member>[, <member>, ...])

Each <member> is given as follows:

<member name> [ ENCRYPTED ] <backend datatype>

ENCRYPTED applies only to the backend datatype STRING; if provided, the member is stored encrypted on your app’s backend. For the supported backend datatypes, see Backend Datatypes.

ALIAS

Aliases allow you to set up shorter names for referring to grab bags, as a convenience. The syntax to create an alias is

CREATE ALIAS ON OBJECTTYPE <objecttype name> GRABBAG <grab bag name> AS <alias>


EVENT HANDLER

The syntax to associate a CRUD event or trigger to an event handler is

CREATE [ CRUD ] HANDLER <handler name> [ PRE | POST | ASYNC ] ON /<collection name> [ Create | Update | Delete ] AS <script type>:<script text>
The keyword following the handler name specifies when the handler script should execute:
PRE indicates that the handler executes before the CRUD event takes place
POST indicates that the handler is executed after the CRUD event takes place
ASYNC indicates that the timing of handler execution is unspecified

See Custom Code.

EXTENSION

A server extension (or API extension) is another method for triggering serverside code, which, in this case executes on HTTP GET requests to a specified URI. The syntax to associate a server extension name to its code is

CREATE EXTENSION /<extension name> [ UNSECURED ] AS <script type>:<script text>

By default, a server extension can only be triggered by a user who is logged in. The optional UNSECURED keyword allows users that are not logged in to execute the extension.

See Custom Code.

PERMIT command

The PERMIT command is used to set default OAPs for individual users and/or groups with the specified permissions on collections. These defaults may be altered in code during runtime using FatFractal’s declarative security. The syntax for the PERMIT command is

PERMIT read:<group>[,<group>,...] write:<group>[,<group>,...] ON /<collection name>

See Permissions and Managing Users.

SCHEDULE command

The SCHEDULE command is used to schedule execution of serverside code. The syntax of the SCHEDULE command is

SCHEDULE <task name> <schedule> AS <script type>:<script text>

<schedule> is given in cron syntax:

<minute (0-59)> <hour (0-23)> <day of month (1-31)> <month (1-12)> <day of week (0-6)>

Each parameter may also be the character *, indicating all.
See Custom Code.

Metadata

↑ API↑ Command-Line↑ Datatypes↑ Directories↑ Objects↑ FFDL • Metadata • ↓ Queries↓ URIs

Whenever you create an object, the FatFractal Platform returns metadata about that object. The FatFractal Platform provides a built-in datatype, FFMetaData, to encapsulate this metadata. As for all built-in types, each of the FatFractal APIs provides an FFMetaData type appropriate for the API’s platform.

Metadata Item Info Type and Example Comments
createdAt Date
Date
In the format your client expects it to be in. Natively stored on you app’s backend as number. of milliseconds since January 1 1970.
createdBy String
lF0J_bnwLRgrkEI4vSjod7
GUID of the FFUser who created the object.
ffRL String
/Celebrity
ffUrl URL
/ff/resources/Celebrity/lF0J_bnwLRgrkEI4vSjod7
The location of the resource in question. Appends to the BaseURL.
ffUserCanEdit Boolean
true
Whether or not the currently logged-in user has write privileges for this object.
guid String
lF0J_bnwLRgrkEI4vSjod7
Unique to your app’s namespace. Identifies a specific object in a particular collection.
objVersion Numeric
19
The number of times an object has been updated.
updatedAt Date
Date
In the format your client expects it to be in. Natively stored on you app’s backend as number of milliseconds since January 1 1970.
updatedBy String
lF0J_bnwLRgrkEI4vSjod7
GUID of the FFUser who last modified the object.

For information on how to retrieve the metadata for an object using a specific API, see the API Reference.

Query Language

↑ API↑ Command-Line↑ Datatypes↑ Directories↑ Objects↑ FFDL↑ Metadata • Queries • ↓ URIs

The following table lists the query operators available on the FatFractal Platform. See Queries and Data Modeling.

Class Operator Description Examples
Comparison eq Equal to guid eq ‘abc123′
ne Not equal to userName ne ‘steve’
lt Less than age lt 8
lte Less than or equal to age lte 7
gt Greater than age gt 20
gte Greater than or equal to age gte 21
between Between rating between 7 and 10
Matching matches String matches regular expression userName matches ‘[a-z].*’
Boolean and AND title eq ‘Breaking Bad’ and season eq 5
or OR guid eq ‘abc123′ or userName eq ‘Steve’
not Negation (NOT) not (userName matches ‘[a-z].*’)
Numeric + Addition (length + width) gt 5
- Subtraction (income – expenses) gt 10000
/ Division distance/time lt 55
* Multiplication (length * width) between 5 and 10
% Modulo division n % 2 eq 0
Bitwise & Bitwise AND (flags & mask) ne 0
| Bitwise OR ((flags | 4) & mask) ne 0
^ Bitwise NOT ^flags ne 0
Random random(guid) Return a guid from a random object guid eq random(guid)
Geolocation distance Return the distance between two GEOLOCATION objects in kilometers distance(location, [45.1, -122.2]) lte 10


NOTES:
  • Operations are always performed left to right
  • Parentheses will group operations as you would expect
  • Single quotes are used to define a literal string, rather than double-quotes


URI Structure

↑ API↑ Command-Line↑ Datatypes↑ Directories↑ Objects↑ FFDL↑ Metadata↑ Queries • URIs

URLs on the FatFractal Platform are extensions of your application’s base URL:

<scheme>://<domain name>.fatfractal.com/<application name>

Or, if you are working locally:

<scheme>://localhost/<application name>

There are two groupings of allowed URLs:

<scheme>://<domain name>.fatfractal.com/<application name>/ff/resources/collection/guid

<scheme>://<domain name>.fatfractal.com/<application name>/ff/ext/extName

For information on how resources are organized on the FatFractal Platform, see Resource Hierarchy. For information on finding objects using queries and traversals, see Queries and Data Modeling, respectively.

BaseURL: <scheme>://<domain name>.fatfractal.com/<application name>
Platform Naming Convention Scope Usage Form Valid URI
domain name Third-level domain This subdomain allows you to refer to a set of applications as a logical group. Domains are created in the FatFractal Console alphanum Required
(or localhost if not deploying to cloud)
fatfractal Second-level domain Part of URL that points to the FatFractal platform single value Required
com Top-level domain Part of URL that points to the FatFractal platform single value Required
application name Specific app name A backend is created for each app, by application name. The BaseURL defines all resources “owned” by an app. Applications are created in the FatFractal Console. unique to a domain
alphanum
Required
OBJECTS: <BaseURL>/ff/resources/<collection>/<guid>
PLATFORM NAMING CONVENTION SCOPE USAGE FORM VALID URI
resources Targets an area of your app’s backend Defines the namespace, available to your app’s backend, which refers to objects and values value is ‘resources’ Required value to refer to objects and values
collection Points to a set of objects A set of objects that is “grouped” into a shared namespace on your app’s backend. Name is unique to the application’s namespace
(alphanum)
required
guid Refers to an object The term guid is always used to refer to a pointer to an object on the FatFractal Platform; may be assigned directly, if not, it is generated for you. Name is unique to the application’s namespace
(alphanum)
required
ff Targets the FatFractal Platform This tag is required. value is ‘ff’ required
SERVER EXTENSIONS: <BaseURL>/ff/ext/<extension name>
PLATFORM NAMING CONVENTION SCOPE USAGE FORM VALID URI
ext Targets an area of your app’s backend Defines the namespace, available to your app’s backend, which refers to serverside API extensions your app has access to. Value is ‘ext’ optional
extension name The name of a server extension The server extension here must have been created and refer to a specific file and function in that file.
See Custom Code for more information.
Unique
(alphanum)
required
ff Targets the FatFractal Platform This tag is required. value is ‘ff’ required