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.

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.
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.
Open the dashboard
Navigate to
/dashboard and click Create Project or use the create button on /home.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
Name and create
Pick a project name. The slug auto-generates (
my-app-k3x8n2). Create submits the request and the background task begins.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.
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.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.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.
Create
Submit. The background task clones the repo, seeds the workspace, and runs the Librarian agent against the tree to generate
.tesslate/config.json.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
| Provider | OAuth | Private repos | Push/pull |
|---|---|---|---|
| GitHub | Yes | Yes | Yes |
| GitLab | Yes | Yes | Yes |
| Bitbucket | Yes | Yes | Yes |
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.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.
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.
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.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: aProject row, a provisioned volume, container records, and a valid .tesslate/config.json.
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._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.
Config resolution
Reads
.tesslate/config.json from disk. If absent, falls back to LLM analysis (Librarian agent), then to a minimal single-app fallback.Container sync
Upserts Container rows from the config. Creates ContainerConnection, DeploymentTarget, and BrowserPreview records as declared.
Compute tier selection
On Kubernetes projects, you can pick a compute tier at creation time:- None
- Ephemeral
- Environment
No compute provisioning. The workspace exists, but nothing runs. Use when you just want source code and will run locally.
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.