Every project declares exactly one language. It may be left undecided at creation, but once it is set it is fixed, because the build pipeline, the file a version may carry and the way the listing is written all follow from it.
The three#
You write the program on the calculator or in an editor and upload the finished file. There is no build, no repository and no GitHub App. The listing is written in the console.
A public GitHub repository built with the CE C toolchain. Flight runs your build command and publishes whatever the output pattern matches.
A public GitHub repository that produces an appvar other programs link against, plus a stub and public headers. Built by ce-libify, or by the repository itself.
What changes with the choice#
| TI-BASIC | ASM/C | LibLoad library | |
|---|---|---|---|
| Source | upload | public repository | public repository |
| Needs the GitHub App | no | yes | yes |
| Manifest file | none | .ceagle-flight | .ceagle-flight |
| Where the listing lives | the console | the manifest | the manifest |
| What a release ships | the file you attach | one artifact | an appvar, a stub and headers |
| Publishing a version | upload a file | push a commit | push a commit |
| May declare dependencies | no | yes | yes |
| Has a library archive | no | no | yes, at /d/<slug>/lib |
Deciding#
Did you write it in TI-BASIC?
Then it is TI-BASIC. There is nothing to compile and nothing to put in a repository.
Is it a program someone runs?
Then it is ASM/C, whether the sources are C, assembly or both.
Is it code other programs call into?
Then it is a LibLoad library. The distinction is not the language the sources are written in. It is whether the result is run or linked against.
Leaving it undecided#
A project can be created with no language at all. It sits there, renameable and archivable, until the first time you connect a Flight source, at which point Flight asks. That is useful when you are claiming an address before you have decided how to build it.
Trying to set a language a second time answers 409 language_set.
When a language is not on offer#
Flight can be narrowed to a subset of the three, which is what happens while the build machinery is down for maintenance or while a language is still being rolled out.
The console offers only the languages Flight will actually take a source for, so what you can pick when creating a project is what will work.
The project itself is unaffected. It can still be created, renamed and archived, because projects are not part of any product, and a project whose language is temporarily excluded keeps everything it has published and starts building again when the language returns.