Getting started
Installation
This page walks one app from nothing to a running screen: how tent is run, a table, a query, a screen with its data, a link, a form, a sign-in, the seed and tent dev. Every file below is whole, and the app it makes runs as it is written.
Running tent
tent comes with the package tentjs of npm, which brings the Node.js it runs on:
npm install -g tentjsEach command of these docs is then tent <command>. A project names its own tentjs in its package.json, and tent builds and runs a project with the version it names. A program of your own that imports the framework, as topic.engine shows one, finds it in the tentjs that the project holds.
A new project
tent new my-app
cd my-appnpm create tent my-app makes the same project with nothing installed first, by tent new of the newest tentjs. tent new writes a bare project: tent.ts, package.json, AGENTS.md, one screen at / and the query it reads. The files below take their place. A definition is a top-level export const made by a word of tentjs; tent check after every change reports every mistake at once, each with its fix.
The project and its people
import { project } from 'tentjs'
export const myApp = project('myApp', {
title: 'My App',
signInPath: '/sign-in',
})The engine reads id and roles of each row of users; the rest is the project's own. The password is stored as its hash, in a column that no rule lets anyone read.
import { list, table, text } from 'tentjs'
export const users = table('users', {
columns: {
email: text({ unique: true, personal: true }),
name: text({ optional: true, personal: true }),
password: text({ optional: true, private: true }),
roles: list(text()),
},
access: { read: 'owner' },
})Every page
The same pages that tent docs prints, in the version of Tent.js that made this site.
Topics
69How a part of the framework works, walked through with whole examples.
- The build
- The check
- The commands
- db: the rows of the app, in code
- The engine in a program of your own
- What the engine counts
- What the engine tells and writes
- An app from a program
- The versions of a running app
- The web side
- Errors
- The guarded fetch, and parts that are fetched
- Flows
- When a step fails
- Flows on many machines
- Looking at runs
- The history
- History with an engine and on a server
- The members
- The inspect mode
- Your data, and the way out
- Live data
- The connection
- Many machines, tenants and programs
- The look of a screen
- Style files and CSS Modules
- Light and dark
- Fonts
- Icons, charts and large libraries
- Motion
- Tailwind CSS and component libraries
- MCP
- An outside MCP server
- A screen in a chat
- Sign-in for programs
- Tools, asking a person and streams
- Moving an app to another computer
- Code in other languages
- Plans: how rows are asked for
- Screen files and stubs
- The browser build and libraries
- The engine's own pages
- A list with a search and pages
- A page that streams its slow parts
- Signing people in
- A code by mail
- A sign-in from a package
- From a description back to text
- Installation
- A table, a query and a change
- The seed and tent dev
- A screen with its data, and a link
- A sign-in
- Tests of an app
- A test in a real browser
- Rows, marks and the clock
- A driver of your own
- A faked model
- A browser, with no browser
- Services, calls coming in, keys and the command line
- The types
- The table users
- The value words
- The words
- Heavy work on other machines
- Workspaces: apps that your users build
- The project tools
- The turn
- A workspace
Words
95Each word of tentjs that makes a definition or works out a value.
- action
- agent
- allow
- anyone
- asset
- avg
- backfill
- between
- boolean
- calc
- caller
- ceil
- change
- choice
- chunks
- col
- command
- component
- concat
- contains
- count
- cron
- date
- day
- dayOf
- del
- each
- earlier
- emit
- evals
- event
- every
- expect
- fail
- file
- fingerprint
- floor
- flow
- get
- given
- incoming
- input
- join
- json
- judge
- later
- least
- link
- list
- lower
- max
- message
- messages
- min
- model
- most
- noOtherPeople
- noPersonal
- now
- number
- object
- optimistic
- patch
- post
- project
- put
- python
- query
- random
- range
- read
- request
- role
- round
- route
- s3
- sameSecret
- screen
- secret
- seed
- service
- setting
- slice
- start
- startsWith
- sum
- table
- testApp
- text
- token
- trim
- upper
- vector
- verified
- where
Options
395Each option of a word, with its value and an example.
- about of action
- access of action
- background of action
- batch of action
- callerGone of action
- changes of action
- countBy of action
- danger of action
- deprecated of action
- follow of action
- input of action
- limits of action
- offer of action
- output of action
- plain of action
- remember of action
- rows of action
- run of action
- sends of action
- system of action
- uses of action
- was of action
- worker of action
- about of agent
- access of agent
- countBy of agent
- driver of agent
- guards of agent
- handsOver of agent
- instructions of agent
- key of agent
- knows of agent
- limits of agent
- memory of agent
- model of agent
- offer of agent
- on of agent
- onStop of agent
- output of agent
- pace of agent
- policy of agent
- questions of agent
- reasoning of agent
- score of agent
- sequence of agent
- tell of agent
- together of agent
- tools of agent
- trust of agent
- voice of agent
- was of agent
- words of agent
- fills of backfill
- page of backfill
- run of backfill
- system of backfill
- table of backfill
- was of backfill
- about of change
- access of change
- countBy of change
- danger of change
- deprecated of change
- everywhere of change
- input of change
- offer of change
- output of change
- plain of change
- run of change
- set of change
- system of change
- touches of change
- was of change
- messages of choice
- cut of chunks
- language of chunks
- overlap of chunks
- size of chunks
- about of command
- access of command
- args of command
- run of command
- was of command
- browser of component
- data of component
- layout of component
- personal of component
- props of component
- state of component
- view of component
- was of component
- by of count
- column of count
- of of count
- where of count
- zone of cron
- about of del
- body of del
- changes of del
- files of del
- headers of del
- input of del
- lists of del
- output of del
- query of del
- sends of del
- as of evals
- budget of evals
- name of evals
- pass of evals
- runs of evals
- data of event
- key of event
- where of event
- fields of fail
- kinds of file
- maxSize of file
- about of flow
- access of flow
- as of flow
- countBy of flow
- danger of flow
- follow of flow
- input of flow
- key of flow
- limits of flow
- moveRuns of flow
- offer of flow
- on of flow
- onFail of flow
- onStop of flow
- output of flow
- pace of flow
- plain of flow
- run of flow
- sealed of flow
- sends of flow
- stopOn of flow
- system of flow
- together of flow
- tries of flow
- was of flow
- about of get
- body of get
- changes of get
- files of get
- headers of get
- input of get
- lists of get
- output of get
- query of get
- sends of get
- limits of incoming
- open of incoming
- path of incoming
- then of incoming
- verify of incoming
- was of incoming
- pass of judge
- words of judge
- onRemove of link
- max of list
- min of list
- by of max
- column of max
- of of max
- where of max
- by of min
- column of min
- of of min
- where of min
- abilities of model
- call of model
- countBy of model
- fallback of model
- hosted of model
- input of model
- job of model
- key of model
- limits of model
- name of model
- options of model
- output of model
- provider of model
- takes of model
- tries of model
- units of model
- url of model
- voices of model
- was of model
- max of number
- min of number
- whole of number
- about of patch
- body of patch
- changes of patch
- files of patch
- headers of patch
- input of patch
- lists of patch
- output of patch
- query of patch
- sends of patch
- about of post
- body of post
- changes of post
- files of post
- headers of post
- input of post
- lists of post
- output of post
- query of post
- sends of post
- api of project
- backups of project
- build of project
- cache of project
- cli of project
- cookies of project
- countBy of project
- currency of project
- describeTo of project
- files of project
- head of project
- history of project
- hold of project
- hosts of project
- html of project
- icon of project
- identify of project
- images of project
- languages of project
- limits of project
- mail of project
- mcp of project
- onRequest of project
- privateHosts of project
- publish of project
- python of project
- redirects of project
- release of project
- removed of project
- roots of project
- settings of project
- signInPath of project
- state of project
- title of project
- trace of project
- trailingSlash of project
- unlock of project
- uploads of project
- vitals of project
- was of project
- workers of project
- zone of project
- about of put
- body of put
- changes of put
- files of put
- headers of put
- input of put
- lists of put
- output of put
- query of put
- sends of put
- about of python
- access of python
- atOnce of python
- background of python
- batch of python
- callerGone of python
- changes of python
- countBy of python
- danger of python
- deprecated of python
- file of python
- files of python
- follow of python
- gpu of python
- input of python
- limits of python
- lock of python
- offer of python
- output of python
- packages of python
- remember of python
- rows of python
- sends of python
- system of python
- uses of python
- was of python
- worker of python
- about of query
- access of query
- countBy of query
- deprecated of query
- heavy of query
- input of query
- live of query
- offer of query
- output of query
- plain of query
- reads of query
- refresh of query
- rows of query
- run of query
- system of query
- was of query
- needed of read
- refresh of read
- wait of read
- about of request
- body of request
- changes of request
- files of request
- headers of request
- input of request
- lists of request
- output of request
- query of request
- sends of request
- access of route
- limits of route
- method of route
- origins of route
- path of route
- run of route
- system of route
- was of route
- bucket of s3
- key of s3
- region of s3
- url of s3
- about of screen
- access of screen
- cache of screen
- data of screen
- for of screen
- framedBy of screen
- head of screen
- layout of screen
- loading of screen
- offer of screen
- path of screen
- seo of screen
- server of screen
- state of screen
- title of screen
- view of screen
- was of screen
- auth of service
- calls of service
- connection of service
- from of service
- headers of service
- limits of service
- mcp of service
- onceOnlyHeader of service
- tries of service
- url of service
- use of service
- was of service
- webhook of service
- by of sum
- column of sum
- of of sum
- where of sum
- access of table
- columns of table
- indexes of table
- keepHistory of table
- kept of table
- lasts of table
- owner of table
- plain of table
- removed of table
- search of table
- shows of table
- tenant of table
- unique of table
- was of table
- folder of testApp
- real of testApp
- room of testApp
- secrets of testApp
- lines of text
- max of text
- min of text
- pattern of text
- secret of text
- digits of token
- copy of vector
- model of vector
- old of vector
- size of vector
Tags
3The tags of tentjs/ui: Link, Form and Image.
Hooks
12The hooks a view calls.
Handles
17The handles that code is given: mail, files, sessions and the others.
Adapters
15The interfaces by which a part of your own takes the place of one of ours.
Commands
37Each command of tent, with its flags and what it prints.
- tent access
- tent add
- tent api
- tent build
- tent check
- tent cli
- tent data
- tent dev
- tent docs
- tent export
- tent filled
- tent history
- tent impact
- tent login
- tent logs
- tent machines
- tent map
- tent mcp
- tent models
- tent new
- tent publish
- tent pull
- tent push
- tent python
- tent run
- tent runs
- tent secrets
- tent service
- tent settings
- tent shot
- tent start
- tent take-over
- tent test
- tent uninstall
- tent update
- tent upgrade
- tent workers
Codes
188Each code a finding or a failure carries, with its fix.
- T0001 not-found
- T0002 bad-input
- T0003 too-large
- T0004 wrong-origin
- T0005 rate-limited
- T0006 not-signed-in
- T0007 version-gone
- T0008 took-too-long
- T0009 internal
- T0010 no-engine
- T0011 bad-description
- T0012 read-only
- T0013 not-allowed-here
- T0014 no-users-table
- T0015 cannot-read
- T0016 part-not-fetched
- T0017 wrong-name
- T0018 cannot-open
- T0019 secret-missing
- T0020 no-mailer
- T0021 mail-not-sent
- T0022 address-refused
- T0023 fetch-cut-off
- T0026 update-refused
- T0027 cannot-work-out
- T0028 nested-too-deep
- T0029 not-current
- T0030 not-the-writer
- T0031 record-behind
- T0032 writer-runs
- T0033 copy-clash
- T0034 engines-differ
- T0035 not-allowed-out
- T0036 not-sent
- T0037 room-ended
- T0038 usage
- T1001 not-top-level
- T1002 name-mismatch
- T1003 unknown-option
- T1004 name-used-twice
- T1005 both-imports
- T1006 helper-exported
- T1007 two-forms
- T1008 missing-option
- T1009 reserved-name
- T1010 not-plain
- T1011 bad-word
- T1012 project-count
- T1013 bad-name
- T1014 bad-value
- T2001 rows-do-not-fit
- T2002 column-gone
- T2003 table-gone
- T2004 rename-not-stated
- T2005 link-to-missing-table
- T2006 search-not-text
- T2007 owner-not-users
- T2008 vector-size
- T2009 near-without-limit
- T2010 vector-misused
- T2011 sealed-misused
- T2012 vector-of-another-model
- T2013 tenant-misused
- T2014 tenant-rule-open
- T2015 filled-misused
- T2016 shown-table-misused
- T2025 count-across-files
- T2026 findable-sealed-misused
- T2027 link-to-memory
- T2028 no-archive
- T2029 index-advised
- T2030 heavy-on-memory
- T2101 not-unique
- T2102 link-in-use
- T2103 row-not-found
- T2104 link-missing
- T2105 vector-not-valid
- T2106 near-not-valid
- T2107 value-not-valid
- T2108 too-many-rows
- T2109 not-one-file
- T3001 no-access-rule
- T3002 anyone-on-write
- T3003 anyone-on-personal
- T3004 system-without-why
- T3005 unreachable-table
- T3006 private-in-output
- T3007 secret-in-browser
- T3008 incoming-not-verified
- T3009 system-skips-owner
- T3011 secrets-not-searched
- T3101 access-denied
- T4001 clock-in-query
- T4002 random-in-query
- T4003 network-in-query
- T4004 live-without-limit
- T4005 async-run
- T4101 query-not-pure
- T5001 work-outside-step
- T5002 step-not-awaited
- T5003 step-name-gone
- T5007 worker-misused
- T5008 heavy-work-note
- T5101 too-many-steps
- T5102 result-too-large
- T5103 wait-too-long
- T5104 run-too-long
- T5105 called-too-deep
- T5106 run-stopped
- T5107 no-worker
- T5108 old-try
- T5109 worker-refused
- T5110 out-of-memory
- T5111 event-two-shapes
- T6007 path-used-twice
- T6008 direct-call
- T6009 field-not-usable
- T6011 state-not-declared
- T6012 bad-screen-part
- T6013 address-not-allowed
- T6015 cannot-cache
- T6016 needs-an-engine
- T6018 lives-in-the-browser
- T6021 no-currency
- T6022 name-twice-in-view
- T6023 bad-data-entry
- T6025 size-not-known
- T6030 public-reads-visitor
- T6031 consent-in-address
- T6032 seo-image-not-public
- T7001 ability-missing
- T7002 three-marks
- T7003 limits-incomplete
- T7004 too-many-tools
- T7005 fallback-lacks-ability
- T7006 model-not-known
- T7007 memory-table
- T7008 tools-too-deep
- T7009 tool-not-described
- T7010 no-access
- T7011 vector-in-fill
- T7012 tool-not-as-starter
- T7013 api-file-broken
- T7014 plain-fetch
- T7015 secret-revealed
- T7016 held-way-out
- T7017 trusted-reaches-ask
- T7018 asks-in-the-middle
- T7019 tool-answer-open
- T7020 python-lock-stale
- T7021 not-for-a-chat
- T7101 thread-too-long
- T7102 limit-reached
- T7103 thread-busy
- T7104 provider-failed
- T7105 no-voice
- T7106 model-refused
- T7107 answer-cut-off
- T7108 answer-did-not-fit
- T7109 request-too-large
- T7110 request-not-accepted
- T7111 not-agreed
- T7112 tool-changed
- T7113 provider-missing
- T7114 driver-missing
- T7115 service-failed
- T7116 service-answer-did-not-fit
- T7117 not-connected
- T7118 not-verified
- T7119 python-failed
- T7120 nobody-to-ask
- T7121 sequence-refused
- T7130 no-typed-answer
- T7131 guard-refused
- T8000 type-error
- T8001 date-by-javascript
- T8002 list-by-javascript
- T9001 missing-message
- T9002 missing-asset
- T9003 unknown-message
- T9101 point-not-usable
- T9102 clash-left
- T9103 publish-refused
- T9104 no-right
- T9105 policy-refused
- T9106 edit-not-found
- T9107 history-missing
- T9108 not-gradual