Keep the whole workspace
Persist dependencies, virtual environments, ignored files and .git together in a mounted directory.
Give every runner a workspace that stays.
Keep files, dependencies and progress across disposable compute.
A home for your working state
Source code is only part of a workspace. Twig keeps the rest alongside it—from package trees to the last saved change.
Persist dependencies, virtual environments, ignored files and .git together in a mounted directory.
Turn a prepared environment into an immutable template. Fork independent workspaces with copy-on-write storage.
Separate buffered saves, durable live storage and published recovery checkpoints. Know what your app is acknowledging.
A small API. A separate lifecycle.
Create a disk from your backend. Deliver scoped credentials to the runner. Checkpoint work before a submission, then restore it on fresh compute.
Explore the E2B integrationTypeScript · integration outlineconst disk = await twig.disks.create({ name: 'student-workspace', region: 'us-west1', size_gib: 8, }); const attachment = await twig.attachments.create( disk.id, { owner: runnerId, role: 'writer' } ); // Mount using the E2B adapter. // Publish a checkpoint before accepting submission.
The storage lives outside your runner
Keep active writers near their storage region. Templates and checkpoints are immutable; writer access is scoped outside the guest.
Understand the security boundaryStart with the API and E2B integration guide. Student access follows the documented qualification gates.
Start building