Skip to content

The pieces

Seven names, and what each one is responsible for. Read this once and the rest of the documentation reads faster.

CEagle is a platform made of several services that share one identity provider. You rarely have to care where a boundary falls, but knowing the names makes everything else easier to read.

Publishing programs is the part most people meet first. It is not the only part.

CEagle Accounts#

The identity provider. It is an OAuth 2.0 authorization server and an OpenID Connect provider, and it is what every other service signs people in against.

You touch it directly in two situations: when you sign in to the console, and when you register an application that wants to sign its users in with their CEagle account.

Signing in with CEagle

Registering an application, the authorization code flow with PKCE, and the device flow.

Read on

Aerie#

The developer console. A Go API and a Next.js frontend on one origin, split by the reverse proxy rather than by the application: /api/* is the API and everything else is the frontend.

Aerie is where you create projects, connect a repository to Flight, watch builds and register OAuth credentials. It is the only part of CEagle that writes; everything else reads.

Flight#

The build service. It is not a separate site you visit; it is a tab on a project, plus a build runner that does the work.

Flight is what turns a repository into a published program. It reads a file called .ceagle-flight at the root of your repository, runs the build command it names inside a container with no network, collects the artifact, and writes a release into the registry.

Set up Flight in your repo

The one guide most people need.

Read on

Roost#

The registry. This is the public part: a browsable site and an unauthenticated JSON API where published programs live and are downloaded from.

A program on Roost has an address, its slug, which is the project id it was published from and never changes. That address is what a dependency names, what a download URL contains and what a client asks about.

Swoop#

The app that runs on the calculator. It browses Roost over Wi-Fi and installs programs, resolving their dependencies first.

Swoop is the reason several things in the platform look the way they do: the raw download route that hands back a variable body with no file wrapper, the flattened dependency list, and the bulk version check that lets a calculator reconcile itself in one request.

CEagle Domains#

.ce registrations, served by an authoritative nameserver of its own. Register a name, point its DNS records where you like, and use it for anything you are hosting alongside your calculator work.

You do all of that in Aerie, under Domains. The name is held by your account rather than by a project, so it sits beside your projects instead of inside one: a domain needs no project, and a project needs no domain.

What a .ce domain is

Registering a name, the records you can set, and how long a change takes to be served.

Read on

How they fit together#

  1. You create a project in Aerie

    It claims an address and picks a language.

  2. You connect a source with Flight

    A public GitHub repository, or an upload source for TI-BASIC.

  3. A push starts a build

    GitHub sends one webhook to Aerie. The build runs in a sandbox with no network.

  4. The release lands on Roost

    The artifact, the listing from your manifest, and the dependency graph.

  5. Swoop installs it

    It asks Roost what has to be written first, writes those, then writes the program.

Words that mean something specific#

Vocabulary
projectAerie

The unit that owns an address, a language, a Flight source and any OAuth credentials. Projects are archived, never deleted.

slugeverywhere

A project's address, and therefore its program's address on Roost. Two to 48 characters of lowercase letters, digits and hyphens. Immutable.

sourceFlight

Where a project's code comes from. Exactly one per project, either repo or upload.

listingFlight

The title, summary, description, author, categories and tags a program shows on Roost. It belongs to the project, not to a release, so publishing a new version needs only a file and a version number.

manifestFlight

The .ceagle-flight file a project builds from, at the root of a repository or at the project's manifest path. It carries the listing and the build instructions for a repository source.

buildFlight

One run of the pipeline. It has a number, a status, a log and, if it succeeded, a release.

releaseRoost

A published version: the artifact, its version string, its checksum and its variable metadata.

permissionAccounts

What a person sees on the consent screen. A permission expands into one or more OAuth scopes, which is what the token carries.

CEagle documentation