Tessera

Tessera is a clean desktop rendering host. It starts with an empty page. Coding agents submit source code to a namespace through a local CRUD API; Tessera parses that code, builds its architecture tree, compiles it to drawing commands, and renders the result.

Aster source dependency

Aster is an independent Git repository checked out as a submodule at vendor/aster. Tessera records its exact commit in the Git submodule entry; .gitmodules records its source URL. See vendor for initialization, version updates, and the checkout layout.

Cargo directly depends on Aster's frontend, compiler, and core library packages through paths inside that submodule. The core dependency is named endor_core in Tessera's manifest. These packages also bring in Aster's objects package. Aster retains its own Cargo workspace and source history.

Rust 1.91 or newer is required. Building Tessera compiles the required Aster libraries automatically; no separate Aster build or CLI/server process is required. Tessera does not depend on Aster's storage, host, CLI, or server packages.

This change establishes the source and library dependency only. The namespace API still uses the experimental Tessera parser described below. Executing Endor through Aster and replacing that parser is the next implementation step; no Aster source changes are part of this integration.

Start

Initialize the Aster submodule first, following the SSH identity instructions in vendor:

git submodule update --init --recursive

For local native builds and window runs (automated tests run only in CI):

cargo run --release

Tessera listens only on 127.0.0.1:4737.

Start every agent integration by reading the live Markdown guide:

curl http://127.0.0.1:4737/agent

Namespace code API

The initial active namespace is app.main. Tessera has no file concept.

GET    /v1/namespaces/app.main/code
PUT    /v1/namespaces/app.main/code
DELETE /v1/namespaces/app.main/code

Submit code as plain text:

curl \
  --request PUT \
  --header 'Content-Type: text/plain; charset=utf-8' \
  --data-binary @- \
  http://127.0.0.1:4737/v1/namespaces/app.main/code <<'TESSERA'
namespace app.main

use tessera.ui::{Column, Text}

export scene Main {
    render {
        Column(gap: 12, padding: 24) {
            Text("Hello", role: .title)
            Text("Rendered by Tessera")
        }
    }
}
TESSERA

Updates are atomic. Invalid code returns diagnostics with HTTP 422 and preserves the last successfully rendered revision.

Developer tools

The developer sidebar is closed by default.

  • macOS: Command-Option-I or F12
  • Windows/Linux: Control-Shift-I or F12

The upper section displays the compiler-produced architecture tree. Selecting a node shows the corresponding source range below it.

Current syntax experiment

The first parser intentionally supports only enough syntax to test the architecture:

  • namespace
  • namespace-only use
  • one export scene
  • one render root
  • Column, Row, Spacer, and Text
  • gap, padding, and .title

There are no files, HTML, CSS, JavaScript, DOM, or resource-network concepts in the runtime.

Validation

Local Cargo builds and native window runs are allowed; do not run local tests or Docker. Automated tests and Clippy run in .gitea on ces-control using Dockerfile.ci. The Linux CI checks portable code and software-renderer tests, not macOS window presentation. Aster has no standalone CI/CD; Lyra CI explicitly runs the pinned engine tests. CI uses HTTPS checkout with the built-in job token; see .gitea/README.md.

S
Description
No description provided
Readme 19 MiB
Languages
Rust 99.5%
JavaScript 0.4%
Shell 0.1%