terse init, write jobs inside it, and run terse deploy to ship the whole project at once.
On disk
projectId is assigned the first time the project is created and ties this code to a specific project in the Terse app. Commit terse.config.json to your repo so anyone cloning it can run terse deploy without re-creating the project.
Lifecycle
- Create. Run
terse init <name>to scaffold a new project. The CLI sets up the files, installs dependencies, opens the browser to authenticate you, and runsterse generateagainst your connected integrations. - Develop. Define each job in its own file under
src/jobs/and import it for side effects from thesrc/terse.jobs.tsmanifest. Runterse generateagain whenever you add or reconfigure an integration. - Test. Run
terse testto execute jobs locally against sample events. - Deploy. Run
terse deployto ship the project. New jobs are created, existing jobs are updated, and removed jobs are cleaned up in a single pass. - Monitor. Open the project in the Terse app to see runs, actions, and failures.
terse attach in its root.
Where the project runs
Terse splits into a control plane (orchestrator, triggers, dashboard, history) and a data plane (the runtime that executes youronTrigger code). Each can run on Terse Cloud or in your own infrastructure. A project’s terse.config.json controls only the data plane choice; the control plane choice is set by TERSE_BACKEND_URL at the CLI/SDK level.
By default, terse deploy zips your code and the Terse Cloud data plane runs it serverlessly. No infrastructure to manage.
To route execution to a data plane you operate, add two fields to terse.config.json:
Where to go next
Jobs
The trigger-plus-handler unit you write inside a project.
CLI reference
Every
terse command and its flags.