Releases: AbhinavMishra32/spar
Release list
Spar v0.3.1
Spar 0.3.1
Spar has a complete update experience, a larger language gym, a more durable
practice loop, and a new public home. This is the first release that checks
for updates automatically, tells you what changed, and carries its own release
notes from GitHub into the app.
Updates that stay out of your way
- Automatic checks, no hidden switch. Spar checks when it opens and every
six hours while it is running. A release waits politely until you choose
Update now; it never starts a large download behind your back. - A real in-app update flow. See the version, changelog, download percentage,
transferred bytes, and speed. When the download is ready, Spar flushes active
checkpoints before it closes and hands off to the native installer. - A changelog after a successful update. The release notes you are reading
are embedded in the updater feed. Spar displays them only after that exact new
version has started—not on a fresh install, and not before an update succeeds. - Clear update status in Settings. Check manually, see whether you are current,
and follow progress from anywhere in the app.
A more capable practice workspace
- Ten challenge languages. JavaScript, TypeScript, Python, Java, C, C++,
Go, Rust, Swift, and Ruby now have language-aware starter files, execution
stages, and fallback challenges where supported by the current workspace. - Official language marks and better source fidelity. LeetCode and
Codeforces workspaces show the appropriate language identity, preserve source
statements and examples, and report testcase input and output directly in the
results surface. - A clean retry boundary. Resetting an attempt starts a fresh, synced evidence
segment without deleting the files you have written. Spar can distinguish new
work from the attempt you intentionally restarted. - Safer workspace recovery. Interrupted or restored sessions recreate missing
declared files without overwriting learner edits; canonical paths keep runners
from executing the wrong location. - More resilient source practice. Practice-source connectivity, sign-in, and
browser cleanup have been hardened, and unavailable system credential storage
no longer prevents Spar itself from launching.
A public home for Spar
- A dedicated landing site. Explore the adaptive loop, providers, sources,
workspace, download options, FAQ, and an animated agent walkthrough at the
Spar website. The responsive site includes its own deployment setup for Vercel.
Downloads
| Your machine | File |
|---|---|
| Mac, Apple silicon | Spar-0.3.1-arm64.dmg |
| Mac, Intel | Spar-0.3.1.dmg |
| Windows | Spar-0.3.1-x64.exe |
| Linux | Spar-0.3.1-x86_64.AppImage or Spar-0.3.1-amd64.deb |
Known limits
- This open distribution is unsigned. macOS Gatekeeper or Windows SmartScreen
may ask you to approve the first launch, and those platforms may require a
manual installer step for an update. - Linux AppImage installations can self-update when the runtime supports it;
.debinstallations remain managed by the system package manager.
Spar v0.3.0
Spar now brings Codeforces into the same adaptive practice loop. Connect a
Codeforces account and Spar remembers the browser identity in its own managed
profile, then uses your solved history to select the next appropriate problem.
Run uses the local sample harness; Submit is the explicit remote-judge action.
The new Problems page lets you browse every reachable problem, filter by
provider and difficulty, and open the one you want directly. Source problems
keep their original statements and examples, while Spar's surrounding workspace
gives you the same editor, runner, evidence, and coaching experience.
Downloads
| Your machine | File |
|---|---|
| Mac, Apple silicon | Spar-0.3.0-arm64.dmg |
| Mac, Intel | Spar-0.3.0.dmg |
| Windows | Spar-0.3.0-x64.exe |
| Linux | Spar-0.3.0-x86_64.AppImage or Spar-0.3.0-amd64.deb |
These builds are not code-signed. On a Mac, right-click the app and choose
Open the first time, or run xattr -d com.apple.quarantine /Applications/Spar.app.
On Windows, choose More info -> Run anyway.
Also in this release
- Adaptive source assignment. Spar considers your sourced practice history
when selecting the next challenge, so it avoids treating previously solved
problems as new work. - Direct problem opening. Choose a problem from the catalog and open its
dedicated challenge workspace without routing the choice through the agent. - Reliable challenge workspaces. Existing learner edits are preserved when
challenge files are recovered, including C++ workspaces that must not be
opened as a header file. - A clearer sourced-problem view. Provider branding, statements, examples,
language scaffolding, and result presentation now match the actual source
rather than flattening it into a synthetic prompt.
Known limits
- JavaScript, TypeScript, and C++ only.
- Builds are unsigned and not notarized.
- macOS is the platform the chrome has been tuned on.
- Auto-update is opt-in via
SPAR_ENABLE_UPDATES=1. - Codeforces submission requires an authenticated browser session; running
samples remains entirely local.
Spar v0.2.0
Your account now remembers you. Signing out and back in used to send you
through the seven onboarding questions again, on the same machine and on every
new one — the profile that answers them lived only in that device's local
storage. It is server-side now. Onboarding happens once per account, for good.
Sessions, challenges, attempts, the agent transcript and your abilities restore
on sign-in too, including the files of a session you left half-finished — sign
out, reinstall, or move to a new machine, and it comes back as you left it.
The API is hosted at https://spar.abhinavmishra.in, on Neon Postgres.
Downloads
| Your machine | File |
|---|---|
| Mac, Apple silicon | Spar-0.2.0-arm64.dmg |
| Mac, Intel | Spar-0.2.0.dmg |
| Windows | Spar-0.2.0-x64.exe |
| Linux | Spar-0.2.0-x86_64.AppImage or Spar-0.2.0-amd64.deb |
These builds are not code-signed. On a Mac, right-click the app and choose
Open the first time, or run xattr -d com.apple.quarantine /Applications/Spar.app.
On Windows, choose More info → Run anyway.
Also in this release
- LeetCode as a problem provider. Connect an account in Settings or during
onboarding, and Spar can mount your own solved history as challenges rather
than only writing its own. - A search palette. Jump to any session, challenge, or ability by name
without leaving the keyboard. - The sidebar redesign. Pinning, archiving and a clearer shelf for what you
are actually working on.
Known limits
- JavaScript, TypeScript, and C++ only.
- Builds are unsigned and not notarized.
- macOS is the platform the chrome has been tuned on.
- Auto-update is opt-in via
SPAR_ENABLE_UPDATES=1. - Restoring a session's files works up to 2MB per session; anything larger is
named rather than silently dropped, and object storage for larger workspaces is
the planned follow-up.
Spar v0.1.1
v0.1.0 could not start. Installing it and opening it produced "Spar could not
start — Spar must run inside its Electron desktop shell", on every platform. This
release fixes that. If you downloaded 0.1.0, replace it with this build; there is
nothing to migrate.
Downloads
| Your machine | File |
|---|---|
| Mac, Apple silicon | Spar-0.1.1-arm64.dmg |
| Mac, Intel | Spar-0.1.1.dmg |
| Windows | Spar-0.1.1-x64.exe |
| Linux | Spar-0.1.1-x86_64.AppImage or Spar-0.1.1-amd64.deb |
These builds are not code-signed. On a Mac, right-click the app and choose
Open the first time, or run xattr -d com.apple.quarantine /Applications/Spar.app.
On Windows, choose More info → Run anyway.
What was broken
Two separate faults, both of which only appeared in a packaged build.
The preload bridge was never built for release. Development bundles the
preload to CommonJS with esbuild, because a sandboxed renderer will not load an
ESM preload. The production build used tsc, which — in a "type": "module"
package — emits only ESM, and no index.cjs for the main process to load. So the
window opened, the renderer ran, and the API bridge it needs was absent.
It survived review because every development machine had a stale index.cjs left
over from a dev run, so the packaged app worked everywhere except on a clean
checkout — which is to say, everywhere it actually shipped from. Both paths now
build the preload from one shared configuration, and the build asserts the
artifact exists and exposes a context bridge instead of trusting that it does.
Assets were requested from the filesystem root. Vite's default base is
absolute, so the built HTML asked for /assets/index-*.js. Loaded over file://
that resolves against the root of the disk rather than the app, every script and
stylesheet 404'd, and the window came up blank. Dev never showed it, because there
the same paths are served over http.
Also in this release
- The API can be hosted. The Fastify app now deploys as a Vercel function,
the database client caps itself at one connection on a serverless runtime, and a
release is stamped with the origin it should talk to. See
docs/hosting.md. - A build with nowhere to sign in says so. Rather than reporting a refused
connection to localhost, which reads as the app being broken. - Waiting states are the logo. The app icon's dot grid runs a diagonal wave
while a test run or a page is producing something, and breathes while evidence is
being read. - Linux builds at all. The AppImage and deb targets had never once run;
between them they needed a legal executable name, package metadata, and an
import of a macOS-only module that no longer fails the build on Linux.
Known limits
- JavaScript, TypeScript, and C++ only.
- Builds are unsigned and not notarized.
- macOS is the platform the chrome has been tuned on.
- Auto-update is opt-in via
SPAR_ENABLE_UPDATES=1.
Spar v0.1.0
Spar is a coding gym that watches how you work and writes your next exercise
against the specific thing it thinks you can't do yet.
This is the first release with builds for all three desktop platforms.
Downloads
| Your machine | File |
|---|---|
| Mac, Apple silicon | Spar-0.1.0-arm64.dmg |
| Mac, Intel | Spar-0.1.0.dmg |
| Windows | Spar-0.1.0-x64.exe |
| Linux | Spar-0.1.0-x86_64.AppImage or Spar-0.1.0-amd64.deb |
These builds are not code-signed. On a Mac, right-click the app and choose
Open the first time, or run xattr -d com.apple.quarantine /Applications/Spar.app.
On Windows, choose More info → Run anyway.
You need a model and a backend. Spar runs on a model you already pay for or
host yourself, and v0.1.0 has no hosted Spar service — it looks for the API at
http://localhost:4318 unless you point it elsewhere with SPAR_API_ORIGIN. The
README
explains both.
What's in it
- Adaptive sessions. A six-question intake, a cold-start placement call, and
training targets that come from your own attempt history rather than a fixed
ladder. - Challenges generated for you and proven before you see them. A challenge is
only published once the compiler has shown that the reference solution passes,
that deliberately broken solutions pass the visible tests but fail the hidden
ones, and that every generated artifact agrees with the others. - Deterministic verdicts. Submissions are graded by running the committed
tests and reading the runner's exit code. No model sits in that path, so nothing
said to the agent can turn a failing program into a passing submission. An
attempt ends when a submission passes. - A real workspace. File tree, editor, problem statement, test results, and a
terminal in resizable panes, with the agent alongside — announcing each phase
before it runs it. - An ability ledger that keeps earned abilities and unconfirmed hypotheses
strictly apart, and concept pages that gather everything you've done under a
given concept. - Bring your own model. Sign in with an OpenAI Codex, Claude Code, or GitHub
Copilot subscription; use an API key for OpenAI, Anthropic, Google, xAI,
DeepSeek, Moonshot, Z.ai, MiniMax, OpenRouter, Cline, or any OpenAI-compatible
endpoint; or run locally against Ollama or LM Studio. Keys live in the system
keychain. - Native-feeling chrome. System/light/dark appearance, macOS window materials
and window-control placement, a command palette, and an app icon drawn on the
measured macOS 26 squircle that follows your appearance while the app runs. - Waiting states are the logo, not a spinner. The icon's dot grid runs a
diagonal wave while a test run or a page is producing something, and breathes
while evidence is being read — so the app tells you which kind of wait you are
in. Reduced-motion settles it to the resting mark.
Known limits
- JavaScript, TypeScript, and C++ only.
- No hosted backend yet.
- Builds are unsigned and not notarized.
- macOS is the platform the chrome has been tuned on.
- Auto-update is opt-in via
SPAR_ENABLE_UPDATES=1.
Spar v0.0.1
First official release of Spar.
Highlights:
- Poppins Spar wordmark across login, app shell, and provider connections.
- Durable System, Light, and Dark appearance settings.
- Evidence-driven sessions with deterministic challenge compilation and runner-owned evaluation.
- A sandboxed Electron renderer, typed preload boundary, and isolated agent and runner utility processes.
Verification:
- Frozen-lockfile install passed.
- Full workspace typecheck, deterministic tests, and production builds passed locally.
The source release is published now. Signed and notarized macOS downloads will be attached by the existing release workflow once the required Developer ID and Apple notarization secrets are configured.