Skip to content
Conduit

skill

oel-studio

Plateforme d'outils pour les étudiants, par les étudiants.

EaglesView/oel-studiocommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/EaglesView/oel-studio itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 26, 2026

Bureau · OutilsEnLigne

Every file of a project on one desk — documents, spreadsheets, presentations and images — edited in the browser, with Word, Excel and PowerPoint files kept intact.

Licence: MPL-2.0 Rust TypeScript UI in French and English

The Bureau lays the files of a project side by side, like paper on a table. Double-click a paper to open it in place; the tools follow what you touch. A chart can be linked into a slide and a picture into a document, and the copies follow their source. Everything runs in the browser: the file formats are handled by Rust engines compiled to WebAssembly, and in this release your files never leave your device.

Made in Québec for students, from high school to university. The interface is in French (fr-CA) or English (asked on the first visit, changed in « Paramètres »); the site and the documentation are in French and English.

Highlights

  • Lossless Office round trips. .docx, .xlsx and .pptx go through codecs that rewrite only what you changed; untouched parts, styles, themes, charts and anything not modelled yet (fields, SmartArt, animations…) come back as they were.
  • Real editors. A Word-like document editor (styles, lists, tables, footnotes, headers, pagination), an Excel-compatible spreadsheet (IronCalc: XLOOKUP, MINIFS, RANK.EQ…, charts), a PowerPoint editor (layouts, shapes, notes, presenter view), and a non-destructive image workshop (wgpu: WebGPU → WebGL2 → CPU).
  • Linked copies (« fils de liaison »). Put a chart, a range or an image in a slide or a document; it stays up to date (live, manual or frozen), and a thread on the desk shows where it comes from.
  • Accessible desk. A DOM canvas that is a real listbox: every gesture has a key, moves are announced, a list view is always one click away. Built on react-aria.
  • Private by default. The single-user release keeps the desk and every file in IndexedDB, with a lossless « Exporter le bureau (.zip) » backup.

Try it

You need Node 24+ and Rust (stable, edition 2024) with the wasm32-unknown-unknown target; wasm-pack comes from npm.

rustup target add wasm32-unknown-unknown
npm install
npm run dev        # http://localhost:4321 — the site, /bureau (the editor), /docs

npm run dev builds the Rust engines to WebAssembly first when they are stale. Then open http://localhost:4321/bureau: a new desk holds a demo (a lap-times spreadsheet, a welcome deck whose chart is linked to it, a logo and a document).

CommandWhat it does
npm run devSingle-user Bureau + site (no server)
npm run dev:equipeTeam edition: web + collaboration server on :8787
npm testcargo test --workspace, then every vitest suite
npm run typecheckRegenerates the Rust → TS contract types, then tsc per package
npm run buildStatic site in apps/web/dist (PUBLIC_EDITION=equipe npm run build for the team build)
npm run build:wasmRebuilds every crate's WASM (web + Node targets) into packages/wasm/
bash scripts/build-site.shHosting build: installs Rust if missing, browser WASM only, then the site (DigitalOcean: .do/site.Dockerfile + .do/app.yaml)

Editions

One switch, PUBLIC_EDITION (apps/web/src/edition.ts), decides what the front end shows. Packages never read it; the app passes flags down as props.

solo (default, this release)equipe (built, not shipped yet)
StorageDesk and files in this browser (IndexedDB), .zip backupPlus the collaboration server (apps/collab)
Sharing, presence, version historyHiddenShare links with roles, live avatars, named and automatic versions
FormsHiddenBuilder, linked response spreadsheet, public respondent page (local stub backend)
Projects and membersOne desk, « Mon bureau »Projects, four roles, settings cascade (local stub backend)

Repository map

crates/                 Rust workspace — file formats and computation only (no UI)
  oel-opc/              lossless XML DOM + OPC package (zip, rels, content types)
  oel-docx/             .docx ⇄ ProseMirror JSON
  oel-xlsx/             .xlsx / .csv ⇄ workbook JSON, IronCalc calculation
  oel-pptx/             .pptx ⇄ deck JSON
  oel-chart/            DrawingML charts ⇄ ChartSpec, shared by the three codecs
  oel-img/              non-destructive image pipeline (CPU reference + wgpu)
packages/               TypeScript, shipped as source and compiled by the app
  engine/   @oel/engine     file detection, engine contract, Web Worker host, WASM adapters, generated types
  emboss/   @oel/emboss     blind-emboss UI kit on react-aria-components, Figma tokens (light/dark)
  desk/     @oel/desk       accessible infinite desk: framework-free core + React DOM renderer
  docs/     @oel/docs       document editor (Tiptap/ProseMirror + Yjs)
  sheets/   @oel/sheets     spreadsheet editor (canvas grid, IronCalc in a worker)
  slides/   @oel/slides     presentation editor, slideshow, presenter view
  charts/   @oel/charts     Office chart renderer (every chart type) and chart UI
  img/      @oel/img        image engine host, recipes, originals by content hash
  links/    @oel/links      linked copies: model, states, desk threads
  fonts/    @oel/fonts      fonts of opened files, open substitutes (Fontsource, OFL)
  collab-client/            Yjs session base, offline storage, sync / share / version UI
  forms/    @oel/forms      forms builder and respondent page (team edition)
apps/
  web/      @oel/web        Astro site: home, /docs (fr + en), /bureau (the editor)
  collab/   @oel/collab     collaboration server: Hocuspocus (Yjs), share links, versions, exports (team edition)
fixtures/               shared test corpus (docx, xlsx, pptx, charts, images, the demo Bureau)
docs/                   plans (docs/plans/) and package details (docs/packages.md)

How it fits together

flowchart LR
  subgraph Rust["crates/ (Rust)"]
    opc[oel-opc] --> docx[oel-docx]
    opc --> xlsx[oel-xlsx]
    opc --> pptx[oel-pptx]
    chart[oel-chart] --> docx & xlsx & pptx
    img[oel-img]
  end
  Rust -- wasm-pack --> wasm["packages/wasm/*"]
  wasm --> worker["@oel/engine<br/>Web Worker"]
  worker -- "JSON + bytes" --> editors["@oel/docs · sheets · slides · img"]
  editors -- "Yjs (live model)" --> idb[(IndexedDB)]
  editors --> bureau["apps/web /bureau<br/>(@oel/desk + @oel/links)"]

Files are import/export; the live model of every open file is a Yjs document, saved on the device (and synced to the server in the team edition). The editor shell never parses a file: it asks the engine worker. Layer rules and the reasoning are in ARCHITECTURE.md; each package in detail in docs/packages.md.

The Rust crates

The most reusable part of the project: lossless OOXML in Rust is rare. Each crate builds natively and, with its wasm feature, for the browser and Node.

CrateLibraryWhat it does
oel-opcoel_opcXML DOM that keeps what it doesn't understand, OPC packages (parts, relationships, content types)
oel-docxoeldocx.docx → editor JSON → .docx, rewriting only what changed
oel-xlsxoelxlsx.xlsx and .csv ⇄ workbook JSON, formulas computed with IronCalc
oel-pptxoelpptx.pptx ⇄ deck JSON (layouts, themes, DrawingML)
oel-chartoelchartevery Office chart type read to a ChartSpec, charts written back
oel-imgoelimgrecipe-based image retouching, CPU reference and wgpu (parity-tested)
cargo test --workspace
cargo run -p oel-xlsx --example recalc -- in.xlsx out.xlsx   # compute formulas and chart caches of any workbook

Status

Working: the desk (selection, zoom, notes, galleries, list view, saved on the device, .zip backup), documents, spreadsheets with charts, presentations with slideshow and presenter view, the image workshop, linked copies (charts, ranges, images) written into exports. Not yet: PDF viewing and annotation (a PDF keeps its page count only), editing charts inside slides and documents, animations and SmartArt (kept, not editable), a translated Bureau UI. The full table is in docs/packages.md; what users see is in the site's documentation (/docs, /en/docs).

Next: the team edition on a Canadian-hosted server (accounts, sharing, forms backend — docs/plans/2026-10-backend-mvp.md), a mobile layout, the PDF engine, a desktop app (Tauri).

For AI agents

Start with AGENTS.md: commands, conventions, the edition switch and where things live. Task-specific guides are in .claude/skills/oel-*/SKILL.md (plain Markdown, usable by any agent): oel-architecture first, then oel-rust-engine, oel-file-kind, oel-editor-feature, oel-charts or oel-collab-backend, and oel-verify to finish. Plans with their status live in docs/plans/.

Contributing, security, licence

↑↓ navigate openesc close