.X
if it has a direct child named .X
or the app referenced by its type implements the .X
interface./
).//example.com/filename
In object oriented programming, an accept rule would be called an interface. It is a set of methods a file has to implement to be accepted in a bucket.
Apps may define buckets for their instances, each bucket having its own accept rules, which are a set of methods a file has to implement to be accepted in the given bucket.
Buckets are defined in files named .Buckets
.
In the context of Boomla, agent means the user agent, typically a browser, identified by an agent cookie. If the agent cookie is not transmitted in subsequent calls, the requests are considered to be coming from different agents.
An app instance is a file that's type points to an app. Similar to a class instance in object oriented programming.
0
belongs to the original application call, level 1
to the next level, etc.Files contain buckets which may contain other files. You can ignore buckets and access the all the children files of the parent directly, or you can access all the children within a single bucket.
Buckets are defined by apps. Each instance of the app automatically contains all defined buckets. You may also place a file into a bucket without defining it first. In this case the bucket will be used but not defined - it will be an undefined bucket.
Apps may define what methods a file needs to implement in order to be placed into a bucket. Such rules can be circumvented for now.
A bucket placeholder is used to define a bucket within a component.
boomla.net
under which anyone can create websites for free.example.boomla.net
Components are the no-code equivalents of apps. It is used to create reusable elements or element structures, typically via drag-and-drop. A component wraps one or more app or component instances and optionally declares some input files to be defined at component instances.
For example, a page component may define a page layout to have a certain menu and footer, but the contents should not be the same on all pages (instances of that page component), rather defined individually.
Components are mostly implemented in kernel space but they require certain functionality to be defined in user space. These are defined in the component app.
The file type of components points to this component app.
A component instance is similar to an app instance but for components.
Component instances encapsulate the inner structure of the referenced components and present them as single objects. Only the input parameters of the component (input files) can be defined at the component instance level.
.Inline
interface.Each website (branch) contains a Static Filesystem and a Dynamic Filesystem. The Dynamic filesystem is used to store unsupervised data, for example collaborative data and logs. Data on the Dynamic Filesystem is typically created in the production environment.
It contains linear, sequential changes.
A dynamic link attaches a dynamic volume that is stored on the Dynamic Filesystem. The dynamic link is a transparent, location-based link.
It is typically used to store data created by visitors.
Example: dynamic
sjs-4
JavaScript engine.path /gallery/smile.jpg
package example.com 01ed8bb7a8ad5500c8885da1575f77068d0777606d
volume
scope
dynamic
0
, which indicates success, other status codes are used as in the HTTP specification. For example, 4xx
and 5xx
status codes represent errors.This is a file title! :)
.
or ..
are resolved relative to the /sys/packages
file. For example, the type gallery.boomla.net/gallery
would resolve to /sys/packages/gallery.boomla.net/gallery
.this-is-a-filename
A fileNodeId is a unique identifier for a file within a volume. When a file is moved within the same volume, its fileNodeId won't change.
A filesystem is a tree of one or more volumes.
The filesystem interface version defines the filesystem schema and any additional behavior on how the Boomla OS shall treat the filesystem / website in context.
Each filesystem scope defines its own filesystem interface version.
The filesystem scope specifies the root file to be used for path resolution. Filesystem scopes are implicitly created by some of the file link types. Filesystem scopes always start at volume roots. A filesystem scope may be local or global.
Filesystem scopes are used within packages to resolve file links and file types correctly.
To follow a link is to get the linked file - if it exists.
The frontend toolchain is a JavaScript application injected into every Boomla website providing common editing functionality.
It has the following variants: Owner Toolchain, Visitor Toolchain, Anonymous Toolchain.
In the context of Boomla, a hash is a unique identifier of an object.
Example: 01ed8bb7a8ad5500c8885da1575f77068d0777606d
A hash-based link mounts another volume by its hash. The mounted volume is part of the filesystem and the link can not break.
Modifying a volume mounted via a hash-based link causes hash change propagation in the linking volume.
File links are either hash-based or location-based.
The hash of a file is calculated from its properties, attributes, body and children. If a file changes, it will cause the hash of its parent file to be recalculated and so on upwards in the tree. This is called hash change propagation.
The IDE is an Integrated Development Environment which can be installed on any Boomla website as a package. It provides a filesystem navigation tool and an editor for code, file properties and file attributes.
..
) of a package root file does not exist when respecting the filesystem scope. It does exist when the filesystem scope is ignored..Inline
.example.com
creates the file /sys/packages/example.com
and mounts a clone of its filesystem to this file via a package link.Link type | Address type | Transparent | Filesystem scope | Mounts volume |
package |
hash-based | yes | yes | yes, read-only |
scope |
hash-based | yes | yes | yes, read/write |
volume |
hash-based | yes | no | yes, read/write |
dynamic |
location-based | yes | no | yes, read/write |
path |
location-based | no | no | no |
/
)./foo/bar
A location-based link is a reference to another file by its path or other means. The link may be broken as the referenced file may or may not exist.
File links are either hash-based or location-based.
.Request
method is executed on the requested file. System defined methods start with an uppercase letter after the dot, user defined methods start with a lowercase letter after the dot.param
could become n57B81.param
where n57B81
is the namespace.Packages may use a central storage area within each website to store any package specific data. That's the package data store.
For each package, it is located at /sys/packageData/PACKAGE_NAME
.
A package link is a file link mounting a package by its hash. The package link is a hash-based link: the mounted subtree becomes part of the website and remains there even if the original package website is removed.
Example: package example.com 01ed8bb7a8ad5500c8885da1575f77068d0777606d
.Page
interface.A path link is a reference to another file by an internal path. It is not automatically followed. Its only purpose is documenting the relationship between the two files. The path link is a location-based link.
Example: path /foo/bar
prepend
, append
, before
or after
.The Posix bridge is a 2-way mapping between the Boomla filesystem and Posix filesystems. Posix filesystems in this context include Windows, Mac and Linux filesystems.
The Posix bridge allows one to use programs that understand Posix filesystems to manipulate Boomla files.
If a branch is private, only its owner and users registered to the website can access it through a browser.
Note that registered users still don't have filesystem level access, unless explicitly granted by the owner.
The production environment is a synonym for the master branch.
~.json
. It stores file properties and attributes.path/to/file
, child/*
, foo/:c:1/first()
.
) and parent (..
) selectors separated by slashes (/
). It starts with either a filename, .
or ..
.foo/bar
, ./foo/bar
, ../foo/bar
.Request
is located on its type chain and executed..Request
is reserved for request method files.0
is treated as success and thus a HTTP response status code of 200
is returned to the visitor.
A scope link mounts a writable volume that establishes a filesystem scope. The scope link is a transparent, hash-based link.
Turn a package link into a scope link to make it editable. (This will also prevent the system from updating the package.)
Example: scope
example.com
, a secondary branch could be at beta.example.com
.volume
link.Each website (branch) contains a Static Filesystem and a Dynamic Filesystem. The Static filesystem is used to store supervised data, for example the website's codebase, pages and blog posts. Data on the Static Filesystem is often version controlled and requires non-linear development (branching, merging). It is a trusted storage area that is read-only in the production environment.
Automated changes like system updates are performed by the System account, also referred to as the System user depending on context.
.Request
. System filenames can only be used if they are among the reserved filenames.volume
link is a transparent link, while a path
link is not.A volume link mounts a volume with no special properties except for being a separate fileNodeId space. It is a transparent, hash-based link.The attached volume is also called a simple volume.
Example: volume
.boomla
directory among other things.