Skip to content

Self-contained terminal #539

Description

@WhiteBlackGoose

The package I want to suggest the idea to: AngouriMath.Terminal

So that anyone could download it and use, without the need to use SDK and without installation. This means shipping a single executable file.

Problem 1: assemblies

The terminal relies on embedded kernel, to which we need to load assemblies of AngouriMath.Interactive. If we do single file, we need to keep those assemblies inside

Problem 2: trimming

Because of it, unused methods (almost all) will be removed. So we need to not trim only our packages, and let it trim everything else. To check DynamicDependency.

dotnet publish -c release
-r win-x64
/p:PublishTrimmed=true
/p:ReadyToRun=true
/p:PublishSingleFile=true
/p:TrimMode=copyused    
--self-contained

Activity

  1. Rafael-SOWNet commented on Aug 11, 2026

    @Rafael-SOWNet
    Member

    Triage, 2026-08-11. Recommended for closure, and labelled Opinions wanted rather than closed because declining a proposal is a maintainer's call.

    Terminal polish. The terminal has no measurable users — NuGet shows the library at 313k downloads against a terminal distributed as a handful of GitHub release artefacts — so this is effort against an audience that has not appeared.

    This is one of thirteen dormant proposals swept in the same pass. If you disagree with any of them the label is the place to say so; if you agree, closing is the action. Nothing here is a defect report, so nothing is lost by closing except the record of the idea, which this comment preserves.

  2. Happypig375 commented on Aug 11, 2026

    @Happypig375
    Member

    The terminal may be relevant together with AngouriMathMcp. Should the mcp server serve a dual-purpose as a terminal? Then the terminal would be more like a debug utility for the MCP server - utility even if no standalone users. Do some cross-repo analysis.

  3. Rafael-SOWNet commented on Sep 5, 2026

    @Rafael-SOWNet
    Member

    Self-contained already exists and has since 2022. publish.sh publishes --self-contained for
    seven RIDs, pack-deb-linux.sh builds .debs, and TerminalNightly.yml releases zips and debs to
    AngouriMathLab.

    What is broken is the channel, not the capability: those releases stop at v1.0.0.6 (2022-09-28),
    the workflow fires only on changes to Sources/Terminal/VERSION, and its last three runs (2026-01-01)
    failed at the workflow-file level. No pre-merge workflow builds the Terminal at all.

    Both remaining asks are dead, and for structural reasons

    Single-file. AssemblyLoadBuilder.fs loads the kernel via typeInfo.Assembly.Location, checks
    File.Exists, then #r "<path>" into FSI. Under PublishSingleFile, Location is empty for bundled
    assemblies — so this fails by construction, not by configuration.

    Trimming. The Terminal hosts FSharp.Compiler.Service and compiles code typed at run time. There is
    no static call graph to trim against. TrimMode=copyused over dotnet-interactive plus FCS is not a
    setting that can be got right.

    Correcting something worth correcting

    The Terminal is not without users: AngouriMath.Terminal on NuGet has 3,245 downloads against the
    kernel's 320,987. Small, but not zero. And dotnet tool install needs the SDK, so the zips and debs
    remain the only SDK-free channel — and they are four years stale, which is this issue's actual unmet
    goal.

    Recommendation: reject single-file and trimming with the reasons above, and repoint the issue at
    fixing or deleting TerminalNightly.yml.
    A release channel that last produced anything in 2022 and
    now fails before it starts is the thing standing between this issue and its own objective.

  4. Happypig375 commented on Sep 18, 2026

    @Happypig375
    Member

    Easy issue, the agent can handle this

  5. added this to the 2.6.0 milestone on Sep 18, 2026
  6. Rafael-SOWNet commented on Sep 27, 2026

    @Rafael-SOWNet
    Member

    Sorry this sat for a week. #1496 fixes the release channel: osx.12-arm64 no longer publishes on .NET 8 and later, and the workflow can now be checked without releasing. A release still needs Sources/Terminal/VERSION bumped; the PR asks which version you want.

  7. Happypig375 commented on Sep 28, 2026

    @Happypig375
    Member

    The release version of the terminal should really just follow the package version. For example, if the upcoming release is 2.6 for the AngouriMath package just use that version for the terminal release alongside it.

  8. Rafael-SOWNet commented on Sep 28, 2026

    @Rafael-SOWNet
    Member

    #1541 does that. The Terminal's workflow now runs on release: published, beside Nuget.yml, and releases under the version from the release's tag, so 2.6.0 ships a 2.6.0 Terminal. Sources/Terminal/VERSION is gone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Opinions wantedWe are interested in your opinion about the topic

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions