Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
A software and machine-learning organisation building on ExecuTorch: OpenWeights and ExecuServe run open models on phones, ExecuPack builds them for phone chips, and we contribute fixes upstream.
BusinessTypeScript · JavaScriptGitHub @ExperimentalMachinesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Independent benchmarks for AI hardware. GPUs, NPUs and ASICs measured at datacenter, laptop and phone scale, with every log published.
Taken from the repository README
Loading the full README.
Read the full README ↗Site for Experimental Machines, an independent software and machine-learning organisation building on ExecuTorch: OpenWeights, ExecuServe and ExecuPack, plus the research behind them. Sibling site: experimentalintelligence.org.
Next.js (App Router, TypeScript) + Tailwind CSS v4. Static content, no API routes.
npm run dev
The homepage's copy lives in lib/home.ts and its sections in components/home/. It runs from the two apps people use (OpenWeights, ExecuServe) to the models under them (ExecuPack), and the fixes contributed to ExecuTorch, each with one real visual. ExecuBench is off the homepage until it has results; its section is still in components/home/ExecuBench.tsx. Project facts come from each repository's README, results and execupack's research log, upstream items from pytorch/executorch, and the ExecuPack build table from lib/execupack-published.ts; screenshots are in public/home/. Every page shares the organisation's look: Inter and Inter Tight from lib/fonts.ts, the .home colours in app/globals.css, and components/home/HomeHeader.tsx and HomeFooter.tsx, which components/home/HomeShell.tsx puts around every page but the homepage from each section's layout.tsx (/openweights, /execuserve, /executorch, /asic, /gguf), and app/not-found.tsx puts around the 404 page, which the export writes to 404.html. lib/content.ts holds the site name, contact and sibling link that every page shares.
To add a conference talk: add its entry to lib/talks.ts, then write app/conferences/<slug>/page.tsx on the same frame, with the sections The talk, The evidence and Where and when. Copy the listing's details from the conference's own page.
To add a research post: add its entry to lib/studies.ts (title, date, one-sentence line, cover hook and chart), then write app/research/<slug>/page.tsx on components/research/Post.tsx. The frame supplies the banner, title, sizes, Sources and Keep reading. Every post has the same sections in the same order: What we found, The results, How we ran it, Limits. Use Findings, Figure, Rows and Row rather than bullets, and fold detail most readers skip into More. A post that sets two machines or setups against each other draws its results with components/research/Compare.tsx, and keeps the full table behind More. Rows of links use components/home/Actions.tsx, on posts and everywhere else, so they read as buttons.
Every research post lives at /research/<slug>, and lib/studies.ts lists them newest first for /research and the homepage: each post's cover is computed there from its own data module, so a cover cannot drift from its page. Old addresses under /openweights, /asic and /gguf stay as pages that forward. /asic/ and /gguf/ themselves forward to /research/. /research/trainium-inferentia reads lib/neuron.ts. The posts /research/mi300x-h200, /research/m5-x2-elite, /research/8-elite-dimensity and /research/local-copilot are short versions of reports kept in their own repositories, and read lib/hardware-studies.ts. Every value is copied from a published report.
The /research/a100-quantization page reads two generated modules, both from OpenGrad at the study-001 tag. lib/gguf.ts (scripts/build-gguf-data.mjs) carries the BF16 GGUF and the nine llama.cpp quantizations on one A100. lib/gguf-bf16.ts (scripts/build-gguf-bf16-data.mjs) joins that BF16 GGUF against the same weights served by vLLM on an H200, for the engine-comparison section. Neither is edited by hand:
OPENGRAD=../OpenGrad node scripts/build-gguf-data.mjs
OPENGRAD=../OpenGrad node scripts/build-gguf-bf16-data.mjs
Both are committed, because CI builds without an OpenGrad checkout.
OpenWeights' own page is /openweights, and its layout marks OpenWeights as the current project in the header. It reads lib/openweights.ts, which lists its research pages newest first. The studies themselves live under /research, which has an index of its own; their old /openweights/<study> addresses still exist as pages that forward to the new ones, #section included (components/home/Moved.tsx), because GitHub Pages has no server redirects. The privacy policy stays on the app's own GitHub Pages site, because that is the address registered in Google Play. /research/prefill-decode reads lib/prefill-decode-data.ts, the nine CPU, GPU and NPU matrices at reply length from the Snapdragon 8 Elite Gen 5 runs, generated from OpenWeights' raw results at a pinned commit and committed because CI builds without that checkout; lib/prefill-decode.ts adds the links and the few clock and thermal notes taken from its report. Re-run after new results land:
OPENWEIGHTS=../mobile-inference node scripts/build-prefill-decode-data.mjs <commit>
/research/latency, /research/window and /research/reruns were first published on that GitHub Pages site; lib/openweights-latency.ts, lib/openweights-window.ts and lib/openweights-reruns.ts carry their data as published there, and their charts are in components/openweights/, with each phone's colour and marker in chips.tsx. The homepage's OpenWeights figure reads the latency data. A new OpenWeights study goes under app/research/ and into that list.
public/home/openweights-chat.png is an unedited capture of a real conversation, cropped to the app: LFM2.5-1.2B-Instruct-QAD-Q4_0 on the CPU, in a debug build of OpenWeights at 88614a7e, on a Qualcomm Device Cloud Snapdragon 8 Elite Gen 5 phone, 2026-11-04. It was picked from 23 conversations. Its first turn searches the web; a forecast checked the same day agreed on the rain and the high to within 2 °F. Its second turn states the rate because no wording that asked for the live rate came back right: replies ranged from ¥30,000 to ¥150,000 for 500 USD, against about ¥79,200. The model did the sum without running the script the prompt mentions. A replacement should be just as real: pick the prompt, never edit the reply.
The /execuserve page and its privacy policy read lib/execuserve.ts and app/execuserve/privacy/page.tsx. The privacy page is the URL given to Google Play and mirrors docs/privacy-policy.md in the ExecuServe repository; change both together.
The /executorch page sets what execupack has published on Hugging Face against what ExecuTorch 1.5.1 can export. lib/execupack.ts is the hand-written family × accelerator table, each claim traced to a file at ExecuTorch's v1.5.1 tag. lib/execupack-published.ts is generated from the Hugging Face API and committed; re-run it after new exports land:
node scripts/build-execupack-data.mjs
Pushes to main build the static export and deploy it to GitHub Pages (.github/workflows/pages.yml); public/CNAME holds the experimentalmachines.org domain.