Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.tesslate.com/llms.txt

Use this file to discover all available pages before exploring further.

Tesslate OpenSail

Three ways to start

OpenSail gives you three entry points. Pick the one that matches how you are starting.

Template

Marketplace base with working code, containers, and config.

Import

GitHub, GitLab, or Bitbucket repo, including private with OAuth.

Describe

Natural language. The agent scaffolds the project for you.
All three run through the same POST /api/projects endpoint. A background task sets up the directory, seeds the workspace, and the frontend polls GET /api/tasks/{task_id} for progress. When the task completes, you land in the project builder.

Method 1: From a template

The marketplace ships dozens of bases covering every popular framework. Pick one and you get working code, pre-wired containers, and a valid .tesslate/config.json.
1

Open the dashboard

Navigate to /dashboard and click Create Project or use the create button on /home.
2

Pick a template

The wizard shows the featured bases. Browse all of them from the marketplace browse route. Common picks:
  • Next.js 16 for full-stack React with App Router
  • Vite + FastAPI for React frontend + Python API
  • Expo for React Native mobile
  • Go API for Go backends
  • Full-stack CRM for multi-container starters
3

Name and create

Pick a project name. The slug auto-generates (my-app-k3x8n2). Create submits the request and the background task begins.
4

Wait for setup

The task clones the base repo, seeds the volume, and registers containers. Progress: 5% directory created, 10-90% clone and file sync, 100% done.
5

Land in the builder

The frontend navigates to /project/{slug}/builder when setup completes. Containers are stopped; click Start to boot them.
Templates are just MarketplaceAgent rows with item_type='base' and a git_repo_url. Publishing your own base is covered in the marketplace docs.

Method 2: Import from git

OpenSail supports GitHub, GitLab, and Bitbucket, including private repos via OAuth.
1

Connect your provider (first time only)

The first import prompts OAuth with your git provider. Tokens are stored encrypted in DeploymentCredential and reused for future imports, push, pull, and commit.
2

Pick a repo

The import modal lists your accessible repos (pulled from the provider’s API). Filter by owner, search by name. Private repos are listed alongside public ones.
3

Select a branch

Default branch is pre-selected. Override for feature branches or forks.
4

Create

Submit. The background task clones the repo, seeds the workspace, and runs the Librarian agent against the tree to generate .tesslate/config.json.
5

Review the generated config

The setup wizard opens at /project/{slug}/setup. The Agent tab shows the LLM-generated graph; the Manual tab lets you hand-edit the same ServiceConfigForm. Confirm to save.
Deep-link imports work too. An external “Edit in OpenSail” button can link to /import?repo=https://github.com/user/repo. The auth-aware redirect sends signed-in users to the import flow and unauthenticated users to login while preserving the destination.

Supported providers

ProviderOAuthPrivate reposPush/pull
GitHubYesYesYes
GitLabYesYesYes
BitbucketYesYesYes

Method 3: Describe what you want

The “describe” flow gives the agent a blank workspace and your prompt. The agent picks an appropriate base, adjusts it, and iterates until the scaffold matches your description.
1

Open the describe flow

From the dashboard, click Describe your app (or use the command palette).
2

Write your prompt

Be specific. “A Slack-style team chat app with channels, DMs, and search, built with Next.js and Postgres” gives the agent enough to scaffold. “An app” does not.
3

Pick compute tier

If you are on Kubernetes, choose the compute tier. Tier 0 scaffolds without a compute pod; tier 1 or 2 boot containers so the preview works immediately.
4

Let the agent scaffold

The agent picks a base, runs apply_setup_config to wire containers, installs dependencies, and writes an initial implementation. You watch progress in the chat panel.
5

Iterate

When the agent stops, the preview is live. Ask for changes, review diffs, approve or reject.
The describe flow uses the same agent loop as any chat session. Progressive persistence means you can close the tab, grab coffee, and come back to a finished scaffold.

What happens under the hood

All three methods produce the same end state: a Project row, a provisioned volume, container records, and a valid .tesslate/config.json.
1

POST /api/projects

Creates the Project row with status creating, assigns a unique slug, kicks off the background task, returns the project and a task_id.
2

_perform_project_setup

Runs in the background. Creates the directory (Docker) or allocates the volume (K8s). Clones the source (base or git). Writes files to the volume.
3

Config resolution

Reads .tesslate/config.json from disk. If absent, falls back to LLM analysis (Librarian agent), then to a minimal single-app fallback.
4

Container sync

Upserts Container rows from the config. Creates ContainerConnection, DeploymentTarget, and BrowserPreview records as declared.
5

Task complete

The frontend poll flips to 100%. Navigation to /project/{slug}/builder. Containers are stopped and ready to start.

Compute tier selection

On Kubernetes projects, you can pick a compute tier at creation time:
No compute provisioning. The workspace exists, but nothing runs. Use when you just want source code and will run locally.
You can upgrade or downgrade later from the Project Overview page.

After creation

Once the project is ready, the usual surfaces are available:

Code editor

Monaco with the project file tree.

Live preview

Iframe with hot module reload.

Architecture Panel

Visual graph editor for the config.

Chat interface

Talk to agents about your project.