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-IorF12 - Windows/Linux:
Control-Shift-IorF12
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
renderroot Column,Row,Spacer, andTextgap,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 dependency unit tests remain in Aster CI. CI bot SSH secrets are documented in .gitea/README.md.