Skip to content

Releases

1.299.1

Choose a tag to compare

@github-actions github-actions released this 09 Nov 15:00

1.299.1 — Ctrl/Cmd+P stays the command palette

Pressing Ctrl/Cmd+P now opens Obsidian's command palette only. An older
install can carry a custom hotkey that assigns the same chord to Open
cards
; when the Cards module is off, that command's module guard opens
Settings to turn Cards on. Both actions then appeared at once.

What changed

  • One startup repair. src/hotkey-cleanup.js checks the custom hotkeys on
    mcq-tracker:open-cards and removes an exact Ctrl/Cmd+P binding. It does
    not touch Obsidian's own command-palette hotkey.
  • Narrow by design. Only P with Mod, Ctrl, Cmd or Meta is
    removed. Shift and Alt variants, other commands and other keys are left
    alone. Open cards remains in the command palette, and its ribbon button
    is unchanged whenever Cards is on.
  • Visible only when it matters. A short notice explains the change when a
    binding is actually removed. A clean install, or one without that custom
    binding, sees no notice and no write.
  • No data or feature changes. Note formats, cards, review history,
    settings, AI setup and network paths are untouched.

Verification

The release adds tests/hotkey-cleanup.test.js for exact-chord matching,
preservation of other bindings, the removeHotkeys and setHotkeys paths,
and quiet handling of hosts without the hotkey manager. tests/plugin.test.js
also drives the real plugin startup and proves the core
command-palette:open binding is not changed.

node --test passes 2,568 tests. npm run check is clean across
353 source files; main.js is current at 7,069,068 bytes from
356 modules. git diff --check is clean. The release asset is rebuilt from
this commit, so the build-verification check can reproduce it byte for byte.

A live Obsidian window is not available in this workspace, so the final
click-through with a real vault hotkey file remains an owner check.

1.299.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 08:20

1.299.0 — OpenCode at the front door

A new desktop setup now starts with OpenCode. The same connection screen used
before an AI import has the install button inline, tests the install, and only
then enables Continue. Direct API remains the phone path and a one-click
fallback.

What changed

  • OpenCode is the desktop default. A brand-new desktop install starts on
    the OpenCode backend. Phones still use Direct API, because OpenCode runs on
    the computer.
  • The install button is in the setup path. The shared wizard used by
    Practice and the import helper opens on OpenCode instead of hiding it under
    an advanced disclosure. Install OpenCode downloads the supported build,
    shows progress, and can retry a failed start without leaving the screen.
  • Test, then Continue. Installing no longer silently marks AI as ready.
    The screen saves an optional provider key, Test OpenCode starts the
    agent and checks its health and provider list, and Continue to import
    unlocks only after that test succeeds.
  • Readiness tells the truth. Practice, the empty screen and the import
    helper now require an actual OpenCode install, or a server the user
    configured, before showing AI as ready. A missing install points back to the
    install button instead of failing later in an import.
  • Direct API and offline remain reachable. The same screen offers a
    Direct API key path for phones, existing keys or a fallback, and Paste
    questions instead (works offline)
    stays visible on both paths.
  • Existing Direct API setups keep working. An install that already has AI
    enabled or saved Direct API credentials, but no saved backend, is migrated
    to Direct API. It is not moved to OpenCode by the new default.

The welcome guide's one-click installer still enables AI on a successful
install. The shared wizard passes { enable: false } so it can test the
connection before turning AI on.

Verification

node --test passes 2,563 tests. npm run check is clean across
352 source files; main.js is current at 7,065,144 bytes from
355 modules. git diff --check is clean. The release asset is rebuilt from
this commit, so the build-verification check can reproduce it byte for byte.

The installer and test flow are covered by the wizard tests with a mocked
desktop manager. A live Obsidian window and a real OpenCode installation are
not available in this workspace, so the final in-app install click-through
remains an owner check.

1.298.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 07:47

1.298.0 — Community review fixes

This patch clears the two actionable findings from the Community Plugins
review. It changes metadata and one decorative stylesheet rule only; no plugin
feature, setting, note schema or network path changed.

What changed

  • Manifest description fixed. The plugin description no longer contains the
    word "Obsidian". The community directory rejects that word in a description
    as redundant, and this was the review's only blocking failure.
  • Stylesheet warning cleared. The small red marker on a flagged exam
    question used clip-path, which the review reports as only partially
    supported by Obsidian 1.7.4. It is now a supported rounded marker in the
    same top-right position.
  • Regression guard. The release-hygiene suite now fails if the manifest
    description mentions Obsidian or the stylesheet uses clip-path again.
  • No behaviour change. Practice, imports, the AI connection wizard, review,
    cards, calendar, assignments and every note format are untouched.

Remaining review warnings

These are intentional and unchanged:

  • main.js is larger than 5 MB because the plugin bundles the optional
    OpenCode installer and the unmodified MIT-licensed PDF++ bundle. Users on the
    Obsidian Sync Standard plan cannot sync a file that large.
  • Direct filesystem access, shell execution and Electron IPC come from that
    optional desktop installer and the vendored PDF++ bundle. They are not used
    on mobile and are documented in docs/security-inventory.md.
  • Vault enumeration, clipboard access and dynamic code execution are the same
    previously reviewed surfaces.

Verification

node --test passes 2,558 tests. npm run check is clean across
352 source files; main.js is current at 7,052,911 bytes from
355 modules. git diff --check is clean. The release asset is rebuilt from
this commit, so the build-verification check can reproduce it byte for byte.

1.297.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 07:37

1.297.0 — A first PDF import anyone can finish

This release finishes the first-run PDF path. A new user who has never used
Obsidian and has never made an AI key now sees that the file import needs AI,
can paste questions offline instead, and can connect a provider through a short
wizard that chooses a model for them and tests it before the importer opens.

What a new user gets

  • Honest labels at every entry point. The empty Practice screen says
    Import files (needs AI) and explains that practice, cards and timed tests
    work offline. Paste questions instead (works offline) sits directly beside
    it and opens Quick add. The top-of-Practice shortcut reads Import questions
    (needs AI)
    and a Paste questions (offline) button is next to it.
  • A beginner connection wizard. The setup screen and the import help window
    preselect Anthropic (Claude) — recommended, show a visible Create a key
    button that opens that provider's key page in the browser, and explain what
    the page is for. There is no required model-name field on the happy path.
  • Fetch models chooses for you. Fetch models reads the provider's own
    list and picks a stable saved model, the provider default, a preferred family
    such as Sonnet or GPT-5, or the first chat model. The chosen model appears in
    a dropdown and is saved.
  • Tested before continuing. Test connection sends one short request and
    reports the reply. Continue to import stays disabled until a cold start
    has a key, a model and a successful test. A saved working setup can continue
    without retesting.
  • Failure is a next step, not a dead end. A rejected key names the problem
    and points back to Create a key; an empty or non-chat model list says so;
    an offline device says it could not reach the provider and points at the
    offline paste route. Every one of those states keeps Paste questions
    instead (works offline)
    on screen.
  • One implementation. src/ai-connection.js owns provider defaults, key
    pages, model choice, model fetching and the connection test. The practice
    wizard, the import help window and Settings call the same fetch and test
    code instead of duplicating it.
  • Start here says the offline route. The guide's "If you do not have AI"
    line and the AP import step now name Quick add questions from pasted
    text
    and say it works offline, instead of telling the reader to write a
    question note by hand.

Verification

Focused tests drive a real cold start through the wizard with mocked provider
responses: the recommended provider is preselected, the key is stored, a model
is chosen from the fetched list, the connection is tested, and the importer
opens with AI enabled. Separate tests cover a rejected key, an empty model
list, an offline request, the absence of a free-text model field and the
offline Quick add path writing a note that passes the import checker.

node --test passes 2,557 tests. npm run check is clean across
352 source files; main.js is current at 7,051,745 bytes from
355 modules. No dependency, note schema, provider list or network path
was added; the wizard only uses the existing ApiClient requests.

1.296.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 07:15

1.296.0 — A simpler start and What's New

This release shortens the everyday path: new installs begin with a smaller
settings page, Import questions is at the top of Practice, the less-used
practice actions sit under More actions, and an update now opens a short
local What's new note inside Obsidian.

What changed

  • What's new in Obsidian. After an update, a short note lists the changes in
    that version. It is bundled with the plugin, uses no network, appears once per
    version on each device, and stays quiet on a genuine first run so the Start
    here note owns onboarding. Reopen it with Show what's new from the command
    palette or Settings → Global → About.
  • Simple settings. New installs start with Practice, review, the Study agent
    and app settings. A single Show all settings switch reveals the full
    specialist tree and remembers the choice. Existing data files keep the full
    tree, and a deep link to an advanced page reveals it instead of being dropped.
  • Import at the top. Practice puts Import questions above presets and
    filters. It stays visible with AI off and opens the existing setup screen
    rather than hiding the entry point.
  • Clearer practice actions. Skip, mark known, bury, suspend and exclude move
    under More actions. Confidence and Submit remain the primary path.
  • Calmer imports. Course, unit, skill and other note properties wait behind
    Add details. Importing into an existing folder adds questions instead of
    stopping, and an import that produced no notes now links directly to the AI
    settings page when the agent may be waiting for file-edit permission.
  • Clearer confidence labels. The untouched default scale is now Guessing /
    Probably Right / Confident
    ; custom labels are left alone. Ribbon buttons also
    carry matching accessible labels.

Verification

node --test passes 2,549 tests. npm run check is clean across 350
source files
; main.js is current at 7,034,946 bytes from 353 modules.
Focused tests cover the bundled release data, first-install and update gating,
the command, the modal, Simple settings, the old-label migration and the practice
layouts. No dependency, provider, note schema or network path changed; the
What's new note is bundled locally and reads only per-device local storage.

1.295.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 03:57

1.295.0 — Clearer feedback, tutoring and events

The feedback link now opens the MCQ Tracker feedback form, the Cards deck page
can open AnkiWeb's shared-deck search, local events carry a location, and the
Study agent gains an Objective coach tutor role.

What changed

  • Feedback defaults to the Tally form. An install that still carries the old
    built-in GitHub issue URL is migrated once on load; a URL you set yourself is
    left alone.
  • Cards → Find a deck on AnkiWeb (and the matching command) opens AnkiWeb's
    shared-deck search in your browser. Nothing is sent from Obsidian: download
    the .apkg there and import it with the existing Anki import.
  • Local events gain an optional Location field (up to 300 characters),
    shown beside the time and category in the day, week and timeline lists. The
    existing notes field is now labelled Description.
  • Study agent → Objective coach joins the tutor roles. It charts a note into
    atomic learning objectives, teaches one at a time through explain, recall and
    apply, keeps recall and transfer separate, and resumes at the objective that
    needs the most work.

Verification

node --test passes 2,513 tests. npm run check is clean across 347
source files
; main.js is current at 6,997,963 bytes from 350 modules.
Focused tests cover the feedback default and migration, the AnkiWeb command, the
event location and the new tutor role. No dependency, provider, note schema,
storage format or network path changed; the AnkiWeb button only opens a browser
tab.

1.294.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 00:01

1.294.0 — A one-screen start

The first run now opens on one Start here screen. It gives a new user three
plain steps, a real example question, an optional desktop OpenCode installer,
feedback links and a short mobile note. The optional module chooser and workflow
guide are still one click away.

What changed

  • Try the example question writes one ordinary note to
    Questions/Getting started example.md, enables MCQ Tracker if it was off, and
    opens Practice limited to that note. If the name is taken, it uses the next
    free number instead of overwriting a note.
  • Install OpenCode runs the existing desktop installer from the welcome
    screen. It reuses an existing compatible program, shows download progress,
    and leaves the AI settings unchanged if the install fails. The button then
    says Try again.
  • On mobile, the same section explains that OpenCode is desktop-only and points
    to a Direct API provider key instead. The desktop install button is not shown.
  • Help and feedback links open the GitHub issue form and the quick-start
    guide. Nothing opens or is submitted until you click.
  • The guide can be reopened from the command palette or Settings → Global →
    About
    .

The example is a normal question note: you can edit, move or delete it like any
other note. It uses the same Quick add format, question ID and review schedule
as the rest of the vault.

Verification

node --test passes 2,509 tests. npm run check is clean across 347
source files
; main.js is current at 6,995,234 bytes from 350 modules.
The 11 welcome tests cover preset state, the example note path and unique name,
the Practice filter, direct install and reuse, and the rendered screen. The
desktop and mobile branches are implemented; no physical mobile device was
available for this pass. No dependency, provider, note schema, storage format or
network path changed.

1.293.2

Choose a tag to compare

@github-actions github-actions released this 08 Nov 21:47

1.293.2 — Practice can use the computer layout on a tablet

The Practice screen now has a Mobile practice view switch under Practice
session
settings. An iPad reports itself as a mobile device, so its question
screen always used the phone tree even though the review and Settings already
used the desktop layout.

  • On (default) — phones keep the mobile question and review screens; an iPad
    keeps the mobile question screen and the shared desktop review, exactly as in
    1.293.1.
  • Off — an iPad or phone renders the desktop question and shared desktop
    review tree, so Practice can look like it does on a computer.
  • Desktop — ignores the switch and always uses the computer layout.
  • The preference is saved as settings.mobilePracticeView; changing it refreshes
    open Practice views immediately. It does not change the Settings navigation,
    notes, attempts, scheduling or distraction-free practice.

src/practice-view.js, src/settings-tab.js, src/constants.js and
src/plugin.js carry the change. tests/mobile-practice.test.js,
tests/plugin.test.js and tests/settings-navigation.test.js cover the iPad,
phone and desktop branches, the default and persisted off value, and the
rendered switch. The iPad branch is verified with Platform-driven tests; no
physical iPad was available for an in-app capture. No dependency, provider,
note schema, storage format or network path changed.

Verification: node --test → 2,502 pass, 0 fail; npm run check clean
across 347 source files; main.js is 6,986,925 bytes from
350 modules. The plan records 98 checked / 3 partial / 0 unchecked.

1.293.1

Choose a tag to compare

@github-actions github-actions released this 08 Nov 21:22

1.293.1 — Tablets keep the desktop Settings layout

Settings chose its compact phone layout from body.is-mobile, so an iPad —
which Obsidian reports as mobile — lost the desktop category and page list and
fell back to the phone picker. The layout is now chosen when the settings tab
renders.

  • Phones — Platform.isPhone marks the layout is-phone; the existing
    single-column body, grouped page picker, wrapped tabs and wrapped setting
    controls apply there.
  • Tablets — Platform.isPhone is false on iPad, so the desktop two-column
    layout and page list stay, with the current category row and breadcrumb.
  • Older API builds — when isPhone is unavailable, Platform.isTablet
    decides; a device with neither flag is treated as a phone, matching the
    existing practice-view fallback.
  • Narrow desktop panes — the container-query picker below 540 px is
    unchanged, so a narrow pane still gets the grouped picker.

src/settings-tab.js and styles.css carry the change.
tests/settings-navigation.test.js adds the iPad, phone and older-platform
test and asserts that no settings rule is scoped to body.is-mobile. The split
is covered by the platform-driven tests; no iPad or phone was available for an
in-app capture. No dependency, provider, note schema, storage format or network
path changed.

Verification: node --test → 2,499 pass, 0 fail; npm run check clean
across 347 source files; main.js is 6,986,073 bytes from
350 modules. The plan records 98 checked / 3 partial / 0 unchecked.

1.293.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 20:32

1.293.0 — The Practice view matches the exam app's question screen

The Practice question screen is rebuilt from the owner's screenshots of the
official testing app, recorded as text in docs/practice-bluebook-reference.md.
The layout is clean-room: no exam-app code, artwork, font or wording is copied,
and colours still come from the user's Obsidian theme.

  • Header and tools — the section title with Directions beneath it, a
    centred timer and its Hide pill, and labelled tool buttons
    (Highlights & Notes, Calculator, Reference, More) replace the
    generic bar. The practice-test ribbon is no longer rendered.
  • Answers — full-width outlined rows with a lettered circle, and the
    cross-out control outside the box. A crossed-out choice keeps a solid 1 px
    border, greys and strikes its text, slashes the letter circle and swaps the
    control for a small orange Undo pill. The controls and Undo no longer
    inherit the plugin's 44 px tap target, so they render at their intended
    22 px and 20 px.
  • Highlights — the drawer's highlight panel is replaced by one floating
    pill anchored above the selected text or the clicked highlight, with the four
    colours, a highlight/underline toggle, remove and an inline note field.
    Marks also paint inside answer choices, true/false options and review rows;
    clicking a mark reopens the pill, and a drag across choice text no longer
    counts as choosing that answer.
  • Selection capture — selectionchange plus a range-text fallback and
    section detection, and exam text opts back into text selection because
    Obsidian's own chrome disables it.
  • Calculator — a graphing tab plots an expression of x through the
    existing restricted evaluator and draws an SVG path. There is still no
    eval, new Function, dependency or network call.

src/practice-view.js, src/practice-tools.js, src/calculator.js and
styles.css carry the change. tests/practice-chrome.test.js adds 16 tests,
and tests/practice-tools.test.js is updated for the pill and the labelled
tool row. No dependency, provider, network path, note schema or storage format
was added.

Verification: node --test → 2,498 pass, 0 fail; npm run check clean
across 347 source files; main.js is 6,985,509 bytes from
350 modules. The plan records 98 checked / 3 partial / 0 unchecked.