docs / stdlib / session

Stdlib index
  1. Overview
  1. Captured-borrow migration worklist (3.3.3)
  2. Owned-bind migration worklist (8.2.7)
  3. Return-side title audit — the ride-through enumeration
  4. stdlib ownership audit
  5. stdlib ownership dispositions (plan 1.3.1 / 4.3.1)

codec

  1. Base64

codec / csv

  1. Csv

codec / json

  1. Json

collection

  1. ArrayList
  2. BPlusTree
  3. Cache
  4. Collectors
  5. HashMap
  6. HashSet
  7. Heap
  8. ImmutableList
  9. ImmutableMap
  10. ImmutableSet
  11. LinkedList
  12. RedBlackTree
  13. Sort

collection / ltm

  1. LtmBPlusTree

concurrent

  1. AtomicInt32
  2. AtomicInt64
  3. Channel
  4. FiberLocal
  5. Lock
  6. Mutex
  7. RwLock
  8. Semaphore
  9. Tasks

error

  1. Exception
  2. NoOptionalValueException
  3. RecoverableException
  4. Throwable
  5. UnrecoverableException

gfx

  1. Sampler
  2. Texture2D

hash

  1. Blake3
  2. DefaultHasher
  3. Hash
  4. MD5
  5. Sha1
  6. Sha256
  7. SipHash
  8. XXHash3

ifx

  1. BackendRegistry
  2. Window

io

  1. Buffer

io / file

  1. File
  2. FileInfo
  3. FileReader
  4. FileWriter
  5. Path
  6. Watcher

io / net

  1. IpAddress
  2. Server
  3. ServerBuilder
  4. SocketAddress
  5. TcpListener
  6. TcpStream
  7. UdpSocket

io / net / dns

  1. Dns

io / net / tls

  1. TlsConnection
  2. TlsListener

io / net / uri

  1. Uri
  2. UriBuilder

lang

  1. Guid
  2. Math
  3. Optional
  4. Pair
  5. Slice
  6. String
  7. StringBuilder

lang / stream

  1. ArrayStream
  2. Stream

math

  1. Camera
  2. Color
  3. DType
  4. Ray
  5. Rotation
  6. Tensor
  7. Transform

math / fft

  1. Fft

math / linalg

  1. LinAlg

math / npio

  1. Npy

math / poly

  1. Poly

math / random

  1. Generator

math / stats

  1. Stats

nucleo

  1. Columns — the Arrow-laid-out substrate
  2. Fused tensor expressions — Fuse
  3. Table — the lazy, typed dataframe
  4. Tape — define-by-run autograd
  5. Transform intrinsics — Grad, Vmap, Jit

process

  1. Command
  2. Process

reflect

  1. Class

search / distance

  1. Distance

search / fuzzy

  1. Matcher

search / ngram

  1. Index

session

  1. PackageInstallException
  2. Packages

time

  1. Clock
  2. DateTimeFormatter
  3. Duration
  4. Instant
  5. LocalDate
  6. LocalDateTime
  7. LocalTime
  8. Period
  9. ZonedDateTime
  10. ZoneId
  11. ZoneOffset

wire

  1. Compressor
  2. Decompressor
  3. Encoder
  4. Schema
  5. SchemaEncoder

xpu

  1. Device
  2. KernelBuffer
  3. KernelStream

xpu / mesh

  1. MeshSimplifier

Packages

cajeta.session.Packages — install a library into a live session so later cells can import it. Static methods; there is nothing to construct.

Acquisition and binding stay separate, exactly as they are in a compiled project. install puts an archive on the session’s classpath; import names packages from archives already acquired. install never imports anything itself.

// cell 1
import cajeta.session.Packages;
Packages.install("dev.cajeta.ml", "0.10.*");
// cell 2 — the import resolves now, not before
import dev.cajeta.ml.Frame;

A cell cannot import what it installs: the cell is compiled before its code runs, so the import is resolved before the install happens. The unresolved-import diagnostic says so when a cell calls install.

This is an ordinary stdlib API rather than a %-magic, so it behaves identically in every host and is testable like any other call. In a host with no live session — cajeta run, a compiled binary — it throws PackageInstallException rather than silently doing nothing.

Resolution and verification

The constraint resolves against the governing project’s settings.repositories, or the default central repository when no project governs the session. The highest satisfying version from the first repository carrying one wins.

A fetched archive is verified against the repository’s published sha256 before it is spliced; a mismatch discards the bytes and fails the install, so there is never a half-installed state. When the repository publishes an ed25519 signature it is verified against the machine’s trust store (cajeta trust) — never against a key supplied with the artifact. Setting "require-signatures": true in the governing manifest makes a signature mandatory rather than opportunistic.

A cached artifact is served without touching the network, and is held to the same verification as a freshly fetched one.

Limits

Installs are additive. A session cannot unload or replace an archive it has already loaded, because JIT’d code from it may be live: changing to a version the loaded one does not satisfy requires a session restart. Installing an archive that declares a class the session already holds is rejected — an install never shadows session state.

Re-installing at a version already loaded and satisfying is a no-op returning the loaded version, so re-running a notebook top to bottom is safe.

Methods

Signature
static #String install(String name, String constraint)Acquire name at constraint for the running session; returns the resolved version. Session-only — a restart loses it
static #String installAndSave(String name, String constraint)As install, and also record the dependency in the governing project’s cajeta.json, preserving its comments and formatting. Throws when no project governs the session

Both return an owned #String, so bind the result with #=:

String version #= Packages.install("dev.cajeta.ml", "0.10.*");

installAndSave is a separate method rather than a flag so that reading the call site tells you whether a file was written.

Failure

Every rejection leaves the kernel serving: the next cell still runs and the session keeps its bindings. Failures arrive as PackageInstallException, a RecoverableException, and can be caught:

try {
    Packages.install("dev.cajeta.ml", "0.10.*");
} catch (PackageInstallException e) {
    // the install was rejected; the session is still usable
}

See also

Source: docs/stdlib/session/Packages.md · 2 min read · 496 words