July 9, 2026 / Extra usage for automations and integrations, Forms restyling, Custom Apps improvements

Extra usage for automations and integrations

If you find yourself in the middle of the month with barely any automation runs or integration syncs left on your Pro plan, now you can enable extra usage instead of worrying about potential interruptions:

If you’ve already tried extra usage for AI, you know what to do. Specify how much you’re willing to spend each month on automations and integrations on top of your existing subscription and continue your normal operations.

Once a calendar month is over, you’ll be charged only for the amount used (e.g., €23.34), not the entire cap. There will be an extra invoice in your billing settings.

Extra 1000 runs cost $5/€5 and extra 1000 syncs cost $0.5/€0.5.

Check out our guide for more details.

Forms restyling

We’ve refreshed Forms View with a cleaner, more intuitive setup experience. It now feels more consistent with the rest of Fibery, with better organization and faster field configuration directly in the form builder. Field settings are shown right on each field, removing extra clicks and speeding up the build process. Settings, Fields, Preview, and Share actions are now grouped in the header for quicker access, in line with other view headers. :light_bulb: All forms are listed alongside Fields in Database settings, making them easier to manage.

Custom Apps improvements (experimental)

We’re working on Custom Apps with a goal to make them out of experimental with ~2 weeks. You still can enable them in Settings → Experimental Lab to try. In this release we did some changes and improvements.

  • We’ve reworked system prompt and implemented a base mechanism for upgrades in the future. Old sessions will be replaced with new sessions and historical information is folded on top. We will also use this mechanism to include Apps into Space Templates in nearest future
  • UI of Custom Apps was improved and polished in many places
  • Now you can ask AI to include external JS libraries and use them inside your Apps. For example, this prompt will generate a nice chart “show me new features creation trend chart using library Liveline

NOTE: Apps will be in Pro plan only after the official release.

:butterfly: Improvements

  • UI:
    • Avatar placeholder palette has been improved with more colors and better support for dark mode
    • Help & Support menu renamed to Help, link to MCP Server added to Help menu
  • Activity:
    • Confusing 3M, 1d, 2h labels replaced with proper 3 months, 1 day, 2 hours labels in Activity
    • Now when you see a toast with Undo, you can hit Cmd/Ctrl + Z to indeed Undo the action
    • Activity Log and Trash moved from top popover to the bottom of the sidebar, so they are easier to spot and faster to access (we believe these actions are becoming more important with all that AI modifications)

:shrimp: Fixed Bugs

  • Permissions:
    • It’s impossible to Extend access to Created by relation
    • Auto-sharing with “Member” template is automatically enabled even if Member template was disabled
  • MCP Server: Fibery AI/MCP allows to create self-relation with the same name in different casing
  • Whiteboard: There is no way to play an uploaded video on mobile phones
  • Fibery AI Agent:
    • Fibery AI reads all data in huge CSVs and fails to work with it
    • AI Agent responds with error when context is overflown. We should respond with intermediate results instead
  • Form View: Form is passing number as string and rejecting it

P.S. Your feedback is useful, as always!

12 Likes

NOOOOO :sob: :sob: cries in single user PKM mode :frowning:

But you can purchase a 1-seat Pro subscription, given Fibery provides > €20/month of value, right?

3 Likes

Also note that it will be still possible to create Apps in Private section even in Standard plan

3 Likes

As a single user I have no problem creating and enjoying Apps in the Private section, that is a huge relief. Upgrading to Pro is not a choice for me, 60% more, for features that I do not need might be too much.

Thanks for leaving it at least in the Private area. Keep Fybering! :flexed_biceps:

Hello everyone! I just noticed an MCP call from Claude to Fibery, which made the view creation go so much more smoothly, given that our own local skill for Fibery-tool-calling does NOT have all the details, and of course can become outdated very easily and quickly.

:100: Fibery MCP Remote Skills

get_fibery_skill — Loads the full reference guide for a Fibery skill domain. The reasoning behind each tool’s input, syntax, configuration shapes, and workflow for a group of related tools. Called when a task spans a whole domain, for example, views creation.

:clap: Well done, wise concept and amazing implementation.

I debated with myself if I should have paste the request and response in full here, and finally decided that to show how amazingly useful the response is, I will. Honestly, very well done.


Request:

{
  "skill": "views"
}

Response:

create_view reference

config shape depends on viewType. This document covers all view types, the FilterNode operator matrix, shared building blocks, cross-field rules, and worked examples.

Common pattern: call schema and schema_detailed first to get database and field names. The agent should consult this reference for any non-trivial view (filters, ordering, hierarchy, multi-database, dependencies, milestones, defaults).

When to pick which view type

  • grid — default for tabular data with many visible fields; supports hierarchical grouping (items[].groupBy)
  • list — simple linear list; prefer grid unless explicitly asked
  • board — kanban/swimlane workflows; X axis is required (relation or enum field on each database)
  • timeline — items with a time span; supports milestones and dependencies
  • calendar — items with a single date; month/week display
  • map — items with a geographic location field
  • feed — items with a document field rendered as the post body
  • gallery — items with cover images for visual scanning
  • gantt — time spans + hierarchy + dependencies (grid + timeline combined)
  • embed — displays an external URL (e.g., Google Doc) inside Fibery.
  • form — data entry, not visualization; defines fields with defaults/required/hidden
  • document — standalone markdown; pass content via content param, omit config

Common Config Building Blocks

FieldUnit

{"field": "Space/FieldName", "showCount": true}
  • field — Field name in "Space/Field" format, or special value "db-badge"/"db-badge-abbr" (entity badge column)
  • showCount (optional) — For collection fields, show count instead of the expanded list

SortConfig

{"field": "Space/Priority", "direction": "desc", "dateRangeSortBy": "start"}
  • direction"asc" (default) or "desc"
  • dateRangeSortBy"start" or "end"; only for date-range fields

ItemConfig

Shared base for items[] entries:

{
  "database": "Space/Database",
  "fields": [{"field": "Space/Name"}, {"field": "Space/Status"}],
  "filter": <FilterNode>,
  "orderBy": [{"field": "Space/Priority", "direction": "desc"}]
}

AxisConfig (board x/y, gallery y, timeline y, gantt y)

Extends ItemConfig with:

  • forDatabase — Which items[].database this axis applies to. MUST match an items[].database. For multi-database views, provide one axisConfig per items.database.
  • field — Relation or enum field on forDatabase. MUST be relation or enum, not a primitive.
  • database — Lookup database queried for axis values:
    • For workflow state: "workflow/state_<Space>/<Database>", e.g. "workflow/state_Software Development/bug"
    • For relations grouping (e.g. group by user via assignees): the target entity database, e.g. "fibery/user"
    • Multi-database enum axes: each axisConfig gets its own lookup DB (only board/gallery/gantt support merged-enums)
    • Multi-database relation axes: all axisConfigs MUST share the same database
  • hideEmptyLanes (optional, default false) — Hide columns/rows with no items

FilterNode

Filters use a discriminated union on nodeType. Pick nodeType matching the field’s type. value is omitted for is-empty / is-not-empty operators.

nodeType operators value
text contains, does-not-contain, is, is-not, starts-with, ends-with, is-empty, is-not-empty string
number equals, does-not-equal, greater-than, greater-than-or-equal, less-than, less-than-or-equal, is-empty, is-not-empty number
bool is boolean
date is, is-before, is-after, is-on-or-before, is-on-or-after, is-empty, is-not-empty "YYYY-MM-DD" string OR {amount, unit, isBeforeNow}
location contains, does-not-contain, is-empty, is-not-empty string
reference is, is-not, is-any-of, is-none-of, is-empty, is-not-empty array of entity UUIDs
collection is-empty, is-not-empty, contains-any-of, contains-none-of, contains, does-not-contain, contains-me, does-not-contain-me (last two only for user collections) array of entity UUIDs
single-select is, is-not, is-any-of, is-none-of, is-empty, is-not-empty array of option UUIDs
workflow is, is-not, is-any-of, is-none-of, is-empty, is-not-empty array of state UUIDs
multi-select is-empty, is-not-empty, contains-any-of, contains-none-of, contains, does-not-contain array of option UUIDs
logical and, or (combine other filters)

Shape:

{"nodeType": "<type>", "args": {"fieldPath": ["Space/Field"], "operator": "<op>", "value": <value>}}

For date-range fields, wrap fieldPath with q/start or q/end:

{"fieldPath": ["q/start", "Space/Dates"]}

Logical (AND/OR):

{
  "nodeType": "logical",
  "args": {
    "operator": "and",
    "filters": [
      {"nodeType": "workflow", "args": {"fieldPath": ["workflow/state"], "operator": "is-not", "value": ["<done-uuid>"]}},
      {"nodeType": "number", "args": {"fieldPath": ["Space/Priority"], "operator": "greater-than", "value": 3}}
    ]
  }
}

Relative date value (relativeDateInfo):

{"amount": 7, "unit": "day", "isBeforeNow": true}

unityear, quarter, month, week, day, hour, minute, second. isBeforeNow=true means N units ago; false means N units from now.

Config by view type

grid

{
  "items": [
    {
      "database": "Space/Task",
      "fields": [{"field": "Space/Name"}, {"field": "Space/Status"}],
      "orderBy": [{"field": "Space/Priority", "direction": "desc"}],
      "groupBy": {"parentIndex": 0, "parentField": "Space/SubTasks"}
    }
  ],
  "rowHeight": "medium",
  "hideEmptyParentGroups": false
}
  • items[].groupBy — hierarchical nesting; parentIndex is the parent item’s index, parentField is a collection field on parent’s database whose relation targets THIS item’s database (must be one-to-many or many-to-many)
  • rowHeight"short", "medium", "tall", "extra-tall"

list

Same shape as grid (no rowHeight).

board

{
  "x": [{"forDatabase": "Space/Task", "field": "workflow/state", "database": "workflow/state_Space/Task", "fields": []}],
  "y": [],
  "items": [{"database": "Space/Task", "fields": [{"field": "Space/Name"}]}],
  "cardSize": "comfortable"
}
  • x — required; one axisConfig per items[].database
  • y — optional; same cardinality rule as x if present
  • cardSize"compact", "comfortable", "spacious"

timeline

{
  "items": [{
    "database": "Space/Task",
    "fields": [{"field": "Space/Name"}],
    "startDate": "Space/Dates",
    "endDate": "Space/Dates",
    "secondaryStartDate": "Space/ActualDates",
    "secondaryEndDate": "Space/ActualDates",
    "dependencyField": "Space/BlockedBy"
  }],
  "y": [],
  "milestones": [{"database": "Space/Milestone", "dateField": "Space/Date"}],
  "oneItemPerLane": false,
  "dependencyDateShiftingMode": "none",
  "dependencyDateShiftingAvoidWeekends": true
}
  • startDate / endDate — date or date-range field name. For date-range, both can be the same field name.
  • secondaryStartDate / secondaryEndDate — optional second bar (e.g. planned vs actual)
  • dependencyField — relation marking predecessor → successor. Must be marked as Dependency in the workspace UI (Field Settings → Dependency); plain relations fail with “is not a dependency field”. Surface this and ask the user to mark it; do not retry.
  • dependencyDateShiftingMode"none", "consume-gap" (tighten when predecessor moves), "preserve-gap"
  • y — optional axis; if present, one axisConfig per items database

calendar

{
  "items": [{"database": "Space/Event", "fields": [{"field": "Space/Name"}], "startDate": "Space/Date", "endDate": "Space/Date"}]
}

map

{
  "items": [{"database": "Space/Office", "fields": [{"field": "Space/Name"}], "location": "Space/Location"}],
  "style": "default"
}
  • location — must be a fibery/location field
  • style"default", "muted", "satellite"

feed

{
  "items": [{"database": "Space/Post", "fields": [{"field": "Space/Name"}], "post": "Space/Content"}],
  "postWidth": "medium"
}
  • post — must be a Collaboration~Documents/Document field
  • postWidth"narrow", "medium", "full"

gallery

{
  "items": [{"database": "Space/Item", "fields": [{"field": "Space/Name"}], "cover": "Space/Image", "fillCover": true}],
  "y": [],
  "cardSize": "medium"
}
  • cover — must be a fibery/file field
  • fillCover — stretch image to fill card (defaults true)
  • cardSize"compact", "medium", "full"

gantt

{
  "items": [{
    "database": "Space/Task",
    "fields": [{"field": "Space/Name"}],
    "laneFields": [{"field": "db-badge-abbr"}],
    "groupBy": {"parentIndex": 0, "parentField": "Space/SubTasks"},
    "startDate": "Space/Dates",
    "endDate": "Space/Dates",
    "dependencyField": "Space/BlockedBy"
  }],
  "milestones": [],
  "oneItemPerLane": true,
  "dependencyDateShiftingMode": "consume-gap",
  "dependencyDateShiftingAvoidWeekends": true
}

Combines grid hierarchy (groupBy) with timeline mechanics. Same dependency-field caveat as timeline.

embed

{
  "url": "https://www.example.com",
  "compatibleMode": true
}
  • url - URL of the external page to embed
  • compatibleMode - Compatible mode is used for sites that block iframe embedding. Defaults to true

form

{
  "database": "Space/Task",
  "fields": [
    {"field": "Space/Name", "displayName": "Task Name", "required": true},
    {"field": "Space/Description", "displayName": "Description", "description": "Enter details"},
    {"field": "Space/Priority", "displayName": "Priority", "defaultValue": {"id": "<priority-uuid>"}, "hidden": false}
  ]
}

defaultValue format depends on field type:

  • text → string
  • number → number
  • bool → boolean
  • date / date-time → ISO string
  • date-range → {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"}
  • single-relation / single-select / workflow → {"id": "<uuid>"}
  • multi-relation / multi-select / collections → [{"id": "<uuid>"}, ...]
  • location → {longitude, latitude, fullAddress, addressParts: {...}}

document

No config. Pass markdown via the content param at the top level.

Cross-field rules

  • Multi-database axes: for every items[].database, the corresponding axis array (x and/or y) MUST contain exactly ONE entry with forDatabase = items[].database. Missing entries fail with “Unable to find axis config for X”.
  • Single-axis vs merged-enums: multiple databases on one axis works only if (a) all axisConfigs are enums (merged-enums; only board/gallery/gantt support this) or (b) all axisConfigs are relations sharing the same database. Mixing enum + relation axes within one axis is an error.
  • Axis field type: must be relation or enum on forDatabase. Primitive fields are rejected.
  • groupBy.parentField: must be a collection (one-to-many or many-to-many) on items[parentIndex].database, and the relation must target this item’s database.
  • Form defaultValue type must match the actual field type (see formats above).
  • Date fields in startDate / endDate / secondaryStartDate / secondaryEndDate / milestone dateField must be of type fibery/date, fibery/date-time, fibery/date-range, or fibery/date-time-range.
  • dependencyField (timeline / gantt) must be a relation explicitly marked as Dependency in the workspace UI. Plain relations fail.
  • Map location must be fibery/location. Feed post must be Collaboration~Documents/Document. Gallery cover must be fibery/file.

Idiomatic patterns

  • Date-range filtering: wrap fieldPath with q/start or q/end, e.g. {"fieldPath": ["q/start", "Space/Dates"], "operator": "is-after", ...}
  • Relative dates: use relativeDateInfo as the value: {"amount": 7, "unit": "day", "isBeforeNow": true}
  • Hierarchical grid (N levels): items[0] is root; items[1..N-1] each set groupBy.parentIndex and groupBy.parentField
  • Workflow state filter: {"nodeType": "workflow", "args": {"fieldPath": ["workflow/state"], "operator": "is-not", "value": ["<state-uuid>"]}} (use schema_detailed to fetch state IDs)
  • Entity badge column: use {"field": "db-badge"} or {"field": "db-badge-abbr"} inside fields/laneFields

Special field-path tokens

  • workflow/state — the workflow state field on any database that has one
  • assignments/assignees — the standard assignees collection field
  • fibery/id, fibery/public-id — entity identity fields
  • db-badge, db-badge-abbr — entity badge as a “field” in fieldUnit

Worked examples

grid (hierarchical)

{
  "viewType": "grid",
  "name": "Features by Area",
  "config": {
    "items": [
      {"database": "Product/Area", "fields": [{"field": "Product/Name"}]},
      {
        "database": "Product/Feature",
        "fields": [{"field": "Product/Name"}, {"field": "workflow/state"}, {"field": "Product/Priority"}],
        "groupBy": {"parentIndex": 0, "parentField": "Product/Features"},
        "orderBy": [{"field": "Product/Priority", "direction": "desc"}]
      }
    ],
    "rowHeight": "medium"
  }
}

board (single database, workflow filter)

{
  "viewType": "board",
  "name": "Active Tasks",
  "config": {
    "x": [{"forDatabase": "Dev/Task", "field": "workflow/state", "database": "workflow/state_Dev/Task", "fields": []}],
    "items": [{
      "database": "Dev/Task",
      "fields": [{"field": "Dev/Name"}, {"field": "Dev/Assignee"}],
      "filter": {"nodeType": "workflow", "args": {"fieldPath": ["workflow/state"], "operator": "is-not", "value": ["<done-state-uuid>"]}}
    }],
    "cardSize": "comfortable"
  }
}

board (multi-database — note one x entry per items database)

{
  "viewType": "board",
  "name": "Bugs and Stories by State",
  "config": {
    "x": [
      {"forDatabase": "Dev/bug",   "field": "workflow/state", "database": "workflow/state_Dev/bug",   "fields": []},
      {"forDatabase": "Dev/Story", "field": "workflow/state", "database": "workflow/state_Dev/Story", "fields": []}
    ],
    "items": [
      {"database": "Dev/bug",   "fields": [{"field": "Dev/Name"}], "orderBy": [{"field": "Dev/Priority", "direction": "desc"}]},
      {"database": "Dev/Story", "fields": [{"field": "Dev/Name"}], "orderBy": [{"field": "Dev/Priority", "direction": "desc"}]}
    ]
  }
}

board (group by shared user — single relation axis across databases)

{
  "viewType": "board",
  "name": "Who Works on What",
  "config": {
    "x": [
      {"forDatabase": "Dev/bug",   "field": "workflow/state", "database": "workflow/state_Dev/bug",   "fields": []},
      {"forDatabase": "Dev/Story", "field": "workflow/state", "database": "workflow/state_Dev/Story", "fields": []}
    ],
    "y": [
      {"forDatabase": "Dev/bug",   "field": "assignments/assignees", "database": "fibery/user", "fields": []},
      {"forDatabase": "Dev/Story", "field": "assignments/assignees", "database": "fibery/user", "fields": []}
    ],
    "items": [
      {"database": "Dev/bug",   "fields": [{"field": "Dev/Name"}]},
      {"database": "Dev/Story", "fields": [{"field": "Dev/Name"}]}
    ]
  }
}

timeline (planned vs actual + sprint lanes)

{
  "viewType": "timeline",
  "name": "Sprint Stories",
  "config": {
    "y": [{"forDatabase": "Dev/Story", "field": "Dev/Sprint", "database": "Dev/Sprint", "fields": []}],
    "items": [{
      "database": "Dev/Story",
      "fields": [{"field": "Dev/Name"}],
      "startDate": "Dev/PlannedDates",
      "endDate": "Dev/PlannedDates",
      "secondaryStartDate": "Dev/ActualDates",
      "secondaryEndDate": "Dev/ActualDates"
    }],
    "oneItemPerLane": true
  }
}

calendar (with filter)

{
  "viewType": "calendar",
  "name": "Releases In Progress",
  "config": {
    "items": [{
      "database": "Dev/Release",
      "fields": [{"field": "Dev/Name"}],
      "startDate": "Dev/ReleaseDate",
      "endDate": "Dev/ReleaseDate",
      "filter": {"nodeType": "number", "args": {"fieldPath": ["Dev/Progress"], "operator": "less-than", "value": 1}}
    }]
  }
}

map (satellite + location filter)

{
  "viewType": "map",
  "name": "Seattle Releases",
  "config": {
    "items": [{
      "database": "Dev/Release",
      "fields": [{"field": "Dev/Name"}],
      "location": "Dev/Location",
      "filter": {"nodeType": "location", "args": {"fieldPath": ["Dev/Location"], "operator": "contains", "value": "Seattle"}}
    }],
    "style": "satellite"
  }
}

feed

{
  "viewType": "feed",
  "name": "Release Notes",
  "config": {
    "items": [{
      "database": "Dev/Release",
      "fields": [{"field": "Dev/ReleaseDate"}, {"field": "Dev/Version"}],
      "post": "Dev/ReleaseNotes",
      "orderBy": [{"field": "Dev/ReleaseDate", "direction": "desc"}]
    }],
    "postWidth": "medium"
  }
}

gallery

{
  "viewType": "gallery",
  "name": "Product Catalog",
  "config": {
    "items": [{
      "database": "Shop/Item",
      "fields": [{"field": "Shop/Name"}, {"field": "Shop/Price"}],
      "cover": "Shop/Image",
      "fillCover": true
    }],
    "cardSize": "medium"
  }
}

gantt (hierarchy + dependencies + milestones)

{
  "viewType": "gantt",
  "name": "Sprint → Story",
  "config": {
    "items": [
      {
        "database": "Dev/Sprint",
        "fields": [{"field": "Dev/Name"}],
        "laneFields": [{"field": "db-badge-abbr"}],
        "startDate": "Dev/Dates",
        "endDate": "Dev/Dates",
        "dependencyField": "Dev/BlockedBy"
      },
      {
        "database": "Dev/Story",
        "fields": [{"field": "Dev/Name"}],
        "groupBy": {"parentIndex": 0, "parentField": "Dev/Stories"},
        "startDate": "Dev/PlannedDates",
        "endDate": "Dev/PlannedDates",
        "secondaryStartDate": "Dev/ActualDates",
        "secondaryEndDate": "Dev/ActualDates"
      }
    ],
    "milestones": [{"database": "Dev/Release", "dateField": "Dev/ReleaseDate"}],
    "oneItemPerLane": true,
    "dependencyDateShiftingMode": "consume-gap",
    "dependencyDateShiftingAvoidWeekends": true
  }
}

form (required + hidden + defaults)

{
  "viewType": "form",
  "name": "Bug Request",
  "config": {
    "database": "Dev/Bug",
    "fields": [
      {"field": "Dev/Name", "displayName": "Name", "required": true},
      {"field": "Dev/StepsToReproduce", "displayName": "Steps to Reproduce", "required": true},
      {"field": "workflow/state", "displayName": "State", "hidden": true, "defaultValue": {"id": "<to-do-state-uuid>"}},
      {"field": "Dev/Priority", "displayName": "Priority", "defaultValue": {"id": "<low-priority-uuid>"}}
    ]
  }
}

document

{
  "viewType": "document",
  "name": "Meeting Notes",
  "content": "# Meeting Notes\n\nAgenda items here..."
}

compound filter (logical AND)

{
  "filter": {
    "nodeType": "logical",
    "args": {
      "operator": "and",
      "filters": [
        {"nodeType": "bool", "args": {"fieldPath": ["Dev/Urgent"], "operator": "is", "value": true}},
        {"nodeType": "workflow", "args": {"fieldPath": ["workflow/state"], "operator": "is-not", "value": ["<done-state-uuid>"]}}
      ]
    }
  }
}
1 Like

Increase the text string trim under the dropdown option for forms. The dropdown is capping the text even for a 1 sentence, it is being capped as a short 5-8 words. The dropdown should at least allow values to be shown completely and the height of the values under the dropdown should be dynamically sized. This is a long issue for use as we had to create additional and longer headers just to show the complete values. Also, even if you hover the mouse on the dropdown values, it is now showing the complete value. @mdubakov

can you share a screenshot?

This is the screenshot under Edit Form for the dropdown:

The issue now is that once you access the shared link OR embed code at max width, the values inside of the dropdown is as follows:

Unfortunately, the full value from the drop down only works in I am using a wide screen monitor to forcefully increase the width.
I think the best resolution is for it to NOT TRIM the values but instead use a dynamic height for each values to expose all of its content. @mdubakov

1 Like

Also, cant we have the option to have alternatives to the form styling once published. We would be nice to have the option to use the dark mode instead of the new pale color.

1 Like