Base Properties
Properties are the foundation of Bases - they define the structure of your data. Lokus supports 8 property types out of the box, with advanced features like formulas, rollups, and relations coming soon.
Prerequisites: Familiar with Bases Overview? If not, start there to understand how properties integrate with YAML frontmatter.
Property Types
Text
Single-line text for titles, names, and short descriptions.
YAML Format:
title: "Build Landing Page"
name: "John Doe"
project_code: "PRJ-2024-001"Configuration:
- Max length (optional)
- Default value
- Validation regex
- Required field toggle
Use Cases:
- Titles and names
- Short descriptions
- Codes and identifiers
- URLs or links
Tip: For longer content, use Long Text instead. Text properties are optimized for single-line display in table cells.
Long Text
Multi-line text with markdown support for descriptions and notes.
YAML Format:
description: |
This is a multi-line description.
It supports **markdown** formatting.
- Bullet points
- Links
- Code blocksConfiguration:
- Enable markdown rendering
- Max length
- Default value
- Show preview in table
Use Cases:
- Project descriptions
- Meeting notes
- Instructions
- Comments and feedback
Display Options:
- Table view: Shows truncated preview (hover for full text)
- Card view: Shows full text or configurable preview
- Detail view: Full markdown rendering
Number
Numeric values with formatting options.
YAML Format:
score: 85
price: 149.99
quantity: 42
percentage: 0.75Format Options:
- Integer - Whole numbers only
- Decimal - Floating point (specify precision)
- Percentage - Displays as % (stored as decimal)
- Currency - Adds currency symbol and formatting
Configuration:
property: budget
type: number
format: currency
currency: USD
precision: 2
min_value: 0
max_value: 1000000
prefix: "$"
suffix: ""Advanced Options:
- Min/max values
- Precision (decimal places)
- Prefix/suffix (e.g., ”$”, “kg”)
- Thousand separator
- Negative number format
Use Cases:
- Budgets and costs
- Scores and ratings
- Quantities and counts
- Percentages and ratios
Warning: Store percentages as decimals (0.75) not integers (75). The display format handles conversion automatically.
Checkbox
Boolean true/false values for toggles and completion status.
YAML Format:
completed: true
is_public: false
featured: trueConfiguration:
- Default value (true/false/unset)
- Custom labels (“Yes/No”, “On/Off”, “Active/Inactive”)
- Color when checked
Display:
- Yes Checked (green)
- Unchecked (gray)
- − Unset (light gray)
Use Cases:
- Task completion
- Feature flags
- Published/draft status
- Active/inactive toggles
Inline Editing: Click the checkbox in table view to toggle instantly. Changes save automatically after 300ms.
Date
Date and optional time values with calendar picker.
YAML Format:
due_date: 2025-10-30
start_date: 2025-01-15
created_at: 2025-01-01T09:00:00ZDate Formats:
YYYY-MM-DD- Date onlyYYYY-MM-DDTHH:MM:SS- Date with timeYYYY-MM-DDTHH:MM:SSZ- Date with time and timezone
Configuration:
property: due_date
type: date
include_time: false
date_format: "MMM DD, YYYY" # Jan 30, 2025
time_format: "12h" # or 24h
relative_display: true # "3 days from now"Display Options:
- Absolute: Jan 30, 2025
- Relative: 3 days from now, Yesterday, In 2 weeks
- Custom format: DD/MM/YYYY, MM-DD-YYYY, etc.
Relative Display Examples:
- Today
- Yesterday / Tomorrow
- In 3 days / 3 days ago
- Next week / Last week
- In 2 months
Use Cases:
- Due dates and deadlines
- Start/end dates
- Timestamps
- Scheduling
Tip: Use relative display for better time awareness. “Due in 2 days” is more useful than “2025-10-25”!
Select
Single-choice dropdown with predefined options.
YAML Format:
status: In Progress
priority: High
category: Web DevelopmentConfiguration:
property: status
type: select
options:
- value: Backlog
color: gray
- value: Todo
color: blue
- value: In Progress
color: yellow
- value: Review
color: purple
- value: Done
color: green
- value: Cancelled
color: red
default: Backlog
allow_custom: falseColor Options:
- gray, blue, green, yellow, orange, red, purple, pink, brown
Best Practices:
- Keep options focused - 5-8 options ideal
- Use consistent colors - green for positive, red for negative
- Order logically - workflow order or alphabetical
- Clear labels - self-explanatory, no abbreviations
Use Cases:
- Status workflows
- Priority levels
- Categories
- Stages in a process
Tip: Enable
allow_customto let users add new options on-the-fly, useful for evolving categorizations!
Multi-Select (Tags)
Multiple-choice tags with color coding.
YAML Format:
tags:
- web
- design
- urgent
categories:
- Frontend
- Backend
- DevOpsConfiguration:
property: tags
type: tags
options:
- value: urgent
color: red
- value: web
color: blue
- value: design
color: purple
allow_custom: true
max_selections: 5Display: Tags appear as colored pills:
[urgent] [web] [design]Filtering:
- contains_any: Has at least one specified tag
- contains_all: Has all specified tags
- is_empty: No tags
- is_not_empty: Has at least one tag
Use Cases:
- Content categorization
- Skill tagging
- Topic organization
- Feature flags
Tip: Tags are perfect for many-to-many relationships. A project can have multiple tags, and a tag can apply to multiple projects.
URL
Validated URL fields with link rendering.
YAML Format:
website: "https://example.com"
repository: "https://github.com/user/repo"
documentation: "https://docs.example.com"Configuration:
- Validation (must start with http:// or https://)
- Display as clickable link
- Show favicon (optional)
- Open in new tab
Display:
[example.com ↗]Use Cases:
- Website links
- Documentation URLs
- Repository links
- External resources
Validation:
- Must be valid URL format
- Auto-adds https:// if missing
- Validates domain format
Email address fields with validation and mailto links.
YAML Format:
contact: "john@example.com"
owner_email: "sarah@company.com"Configuration:
- Email validation (RFC 5322)
- Display as mailto link
- Show gravatar (optional)
Display:
[john@example.com ]Use Cases:
- Contact information
- Owner/assignee emails
- Support contacts
Validation:
- Must be valid email format
- Checks for @ symbol and domain
- Validates format but not existence
Creating Properties
Adding a New Property
Method 1: From Table Header
- Click the ”+” button in the table header row
- Enter property name
- Select property type
- Configure options
- Click Save
Method 2: From Base Settings
- Open Base settings (gear icon)
- Go to Properties tab
- Click ”+ Add Property”
- Configure all options
- Save
Property Configuration
Each property can be configured with:
Basic Settings:
- Name - Property identifier (used in YAML)
- Display name - Human-readable label
- Description - Help text for users
- Type - Property type (text, number, etc.)
Validation:
- Required - Must have a value
- Unique - No duplicates allowed
- Default value - Pre-filled for new entries
- Validation rules - Custom validation
Display:
- Show in views - Which views display this property
- Column width - Default width in table
- Sort order - Position in property list
Advanced Features (Coming v1.4)
Formula Properties
Calculate values from other properties.
Formula Syntax:
// Simple calculation
{Price} * {Quantity}
// Conditional logic
if({Status} = "Done", "Done", "Pending")
// Date calculations
dateDiff({Due Date}, now(), "days")
// Text manipulation
upper(substring({Title}, 0, 10))
// Aggregations
sum({Related Tasks.Hours})Available Functions:
Math:
add,subtract,multiply,divideround,floor,ceil,absmin,max,pow,sqrt
Logic:
if(condition, true_value, false_value)and,or,notequals,greater,less
Text:
concat,upper,lower,trimsubstring,replace,lengthstartsWith,endsWith,contains
Date:
now(),today()dateDiff(date1, date2, unit)dateAdd(date, value, unit)formatDate(date, format)year,month,day,hour
Aggregation:
sum,average,min,maxcount,median,mode
Examples:
// Calculate total cost
{Unit Price} * {Quantity}
// Days until due
dateDiff({Due Date}, today(), "days")
// Status emoji
if({Completed}, "Complete", if({Status} = "Doing", "In Progress", "Not Started"))
// Full name
concat({First Name}, " ", {Last Name})
// Overdue indicator
if(dateDiff({Due Date}, today(), "days") < 0, "OVERDUE", "On track")Rollup Properties
Aggregate data from related records.
Rollup Configuration:
- Create a Relation property first
- Add rollup property
- Select relation to follow
- Choose property to aggregate
- Select aggregation function
Example:
Projects Base → Tasks Base (via relation)
In Projects Base:
- Rollup: Total Hours
- Relation: Tasks
- Property: Estimated Hours
- Function: Sum
Result: Sum of all related task hoursAggregation Functions:
- Count - Number of related records
- Sum - Total of numeric values
- Average - Mean value
- Min - Minimum value
- Max - Maximum value
- Percent checked - % of checked checkboxes
- Percent unchecked - % of unchecked checkboxes
Relation Properties
Link records between different Bases.
Relation Types:
One-to-One:
# Task → Single Assignee
assignee: [[John Doe]]One-to-Many:
# Project → Multiple Tasks
tasks:
- [[Task 1]]
- [[Task 2]]
- [[Task 3]]Many-to-Many:
# Task → Multiple Tags
# Tag → Multiple Tasks
tags:
- [[Frontend]]
- [[Urgent]]Creating Relations:
- Add Relation property to source Base
- Select target Base
- Choose relation type
- Optional: Create reverse relation
- Configure display
Configuration:
property: project
type: relation
target_base: Projects
relation_type: many_to_one
reverse_property: tasks
display_property: titleDisplay in Table:
| Task | Project |
|---------------|---------------------|
| Design mockup | [[Website Redesign]]|
| Write tests | [[Website Redesign]]|
| Deploy | [[Mobile App]] |Linked Records:
Click a relation to:
- View related record
- Add new related records
- Remove relations
- Filter related records
- Open in new tab
Reverse Relations
Automatic back-references between related Bases.
Example Setup:
Projects Base:
properties:
- name: tasks
type: relation
target: Tasks Base
reverse: true
reverse_name: projectTasks Base:
properties:
- name: project
type: relation
target: Projects Base
# Auto-created as reverse relationResult:
- When you add a task to a project’s
taskslist - The task’s
projectfield automatically updates - Bi-directional sync maintained automatically
Property Best Practices
Naming Conventions
Good Names:
due_date- Clear, snake_casestatus- Single wordowner_email- Descriptiveis_public- Boolean prefix
Avoid:
dd- Too crypticDue Date (MM/DD/YYYY)- Format in nameStatus/Stage- AmbiguousEmail Address of Primary Owner- Too long
Property Organization
Group Related Properties:
# Identity
title: "..."
description: "..."
# Metadata
status: "..."
priority: "..."
category: "..."
# People
owner: "..."
assignee: "..."
# Dates
created_date: "..."
due_date: "..."
completed_date: "..."Default Values
Set sensible defaults to speed up data entry:
properties:
status:
default: "Backlog"
priority:
default: "Medium"
completed:
default: false
created_date:
default: "{{today}}"Required Fields
Mark essential fields as required:
properties:
title:
required: true
status:
required: true
due_date:
required: false # OptionalTroubleshooting
Property Not Showing in Base
Possible causes:
- Property hidden in current view
- Property not in YAML frontmatter
- YAML syntax error
- Property type mismatch
Solution:
- Check view settings → Visible Properties
- Verify YAML frontmatter format
- Validate YAML syntax (no tabs, proper indentation)
- Ensure value matches property type
Inline Editing Not Working
Possible causes:
- File is read-only
- Property configured as non-editable
- YAML syntax conflict
Solution:
- Check file permissions
- Review property settings → Allow editing
- Validate YAML frontmatter
Property Values Not Updating
Possible causes:
- Auto-save delay (300ms)
- File locked by another process
- Index not refreshed
Solution:
- Wait for auto-save indicator
- Close file in other editors
- Refresh Base (Cmd/Ctrl + R)