Skip to content

Database Schema ​

Terminology

In the app and user docs, tasks are called workflows (and subtasks sub-workflows). The code, database, IPC messages and CLI keep the original task naming, which is what this page uses.

Tipeline uses SQLite (via better-sqlite3) stored at ~/Tipeline/.database/tipeline.db. Schema is managed with Knex migrations and the ORM layer uses Objection.js.

Tables ​

task ​

Stores task (workflow) definitions.

ColumnTypeDescription
idinteger PKAuto-increment
identifierstring (21) UNIQUEnanoid identifier
namestringDisplay name
descriptionstringMarkdown description
authorstringAuthor
versionstringSemver string
platformstringwindows | linux | macos, or null
metadataJSONExtra info (e.g. draft for assistant drafts, cache settings)
sourcetextThe task source as JSON
project_idinteger FK → projectOwning project, or null
created_atdatetime
updated_atdatetime

Hub details live in task_hub_link, tags in task_tag.

app ​

Stores app definitions: the same columns as task except platform. source holds the app document (pages, components, runnables).

pipeline ​

One record per task execution.

ColumnTypeDescription
idinteger PK
identifierstring (21) UNIQUEnanoid
task_idinteger FK → task
statusstringpending | running | failed | completed | canceled | paused
metadataJSONExtra info (correlationId, etc.)
sourceJSONSnapshot of task source at run time
started_atdatetime
finished_atdatetime

pipeline_block ​

One record per execution block (root + one per loop iteration / conditional branch).

ColumnTypeDescription
idinteger PK
pipeline_idinteger FK → pipeline
parent_block_idinteger FK → pipeline_blockSelf-reference for nesting
parent_action_positionintegerPosition of the flow control action that created this block
iterationintegernull for one-shot, loop iteration index otherwise
metadataJSONBlock-level extra info

pipeline_action ​

One record per action execution within a block.

ColumnTypeDescription
idinteger PK
pipeline_idinteger FK → pipeline
block_idinteger FK → pipeline_block
positionintegerOrder within the block
identifierstring (21)Action's own nanoid (from task definition)
statusstringpending | running | completed | failed | canceled | paused
resulttext (JSON)Serialized result (non-serializable values are null)
errortextError message if failed
started_atdatetime
finished_atdatetime

pipeline_variable ​

Snapshot of variable values at the end of a pipeline run.

ColumnTypeDescription
idinteger PK
pipeline_idinteger FK → pipeline
namestringVariable name
valuetextJSON-serialized value
typestringVariable type
scopestringtask | core | env | global

global_variable ​

Persistent variables shared across all tasks.

ColumnTypeDescription
idinteger PK
identifierstring (21) UNIQUEnanoid
namestringVariable name used in templates
descriptionstring
metadataJSON
typestringstring | number | boolean | date | array | object | workbook | oauthToken | audio | video
valuetext (JSON)Serialized value
secretbooleanMasked in UI
readonlybooleanCannot be overwritten by tasks
created_bystringCreator identifier
created_atdatetime
updated_atdatetime

schedule ​

When workflows run on their own. Each row has exactly one of cron, every_seconds and run_at.

ColumnTypeDescription
idinteger PK
identifierstring (21) UNIQUEnanoid
task_idinteger FK → task
cronstring, nullableCron expression, 5 fields or 6 with seconds first (e.g. 0 9 * * *, */20 * * * * *)
every_secondsinteger, nullableInterval schedule: repeats every this many seconds
run_atdatetime, nullableOne-time schedule: when it runs
enabledbooleanPaused schedules are kept but don't fire. A one-time schedule is turned off when it runs
variablesJSONInput values for the scheduled runs
last_run_atdatetimeWhen it last started a run
created_atdatetime
updated_atdatetimeAlso set when it's turned on or off

connections ​

Remote Core engine connections.

ColumnTypeDescription
idinteger PK
namestringDisplay name
hoststringWebSocket URL
tokenstringBearer token
created_atdatetime
updated_atdatetime

settings ​

Key-value application settings.

ColumnTypeDescription
keystring PKSetting name (e.g. apiToken, agent_provider)
valuetextSetting value

project ​

ColumnTypeDescription
idinteger PK
identifierstring UNIQUEnanoid
name, description, colorstring
created_at, updated_atdatetime

Tasks and apps point at their project with project_id.

tag and task_tag ​

tag (id, label, created_at) holds each tag once; task_tag (task_id, tag_id) links tags to tasks.

hub ​

ColumnTypeDescription
idinteger PK
namestringDisplay name
typestringremote | local_folder
targetstringBase URL, or folder path
enabledbooleanChecked for updates and shown in the Hub browser
last_checked_atdatetime
created_at, updated_atdatetime

One row per item installed from a hub, kept apart from the item's own table so a plugin rescan or a source save never overwrites it.

ColumnTypeDescription
task_id / app_id / plugin_idinteger FKThe installed item
hub_idinteger FK → hub
hub_task_identifier / hub_app_identifier / hub_plugin_identifierstringThe item's id in the hub's catalog
hub_versionstringThe catalog's latest version
hub_statusstringok | missing (gone from the catalog) | error (last check failed)
auto_updatebooleanDefault true
hub_user, last_synced_at, created_at, updated_at

plugin ​

ColumnTypeDescription
idinteger PK
identifierstring UNIQUE
groupstringThe action group the plugin provides
name, description, author, version, imagestringFrom the plugin's export
enabledbooleanNew plugins start disabled
pathstringIts folder under ~/Tipeline/plugins
statusstringe.g. missing when its folder is gone
created_at, updated_atdatetime

agent_run ​

One row per assistant request.

ColumnTypeDescription
idinteger PK
correlation_idstring
prompttextWhat was asked
answertextThe assistant's answer
statusstringrunning | proposed | done | error
task_identifier, task_namestringThe workflow it used
pipeline_identifierstringThe run it started
errortext
created_at, finished_atdatetime

cache_entries ​

Stored results of cached steps and workflows.

ColumnTypeDescription
keystring PKHash of what makes two calls "the same"
kindstringaction (a step) | workflow
owner, labelstringThe workflow it belongs to, and what to show
valuetextThe stored result
size_bytes, ttl_seconds, hitsinteger
source_pipelinestringThe run that produced it
created_at, last_hit_atdatetime

Migrations ​

Migration files live in apps/core/src/database/migrations and run on Core startup. Knex records each file by name, so a migration that already ran is never run again — every schema change needs a new file. List them with ls apps/core/src/database/migrations.

Released under the Apache License 2.0.