neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
A full-stack TypeScript framework for building web, app, server, database, and infrastructure together.
Developer toolsTypeScript · JavaScriptGitHub @akan-teamOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
The TypeScript framework, agents included. Web, iOS, Android, macOS, Windows and Linux. Your server and database. And the AI agents your users already talk to.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
The TypeScript framework, agents included. Powered by Bun.
Build a screen — agents can use it. Build a server — any AI can run it.
No tool schemas, no MCP server to write, no second permission model. The app you build for people is already the
one AI can use, on the model you choose. One line of business code runs through every layer, ships to six platforms,
and reaches everyone who uses it — people and agents.
Open Claude Code or Codex in an empty directory and paste this prompt. Add your workspace and app names under it,
or let the agent ask.Read the full README ↗한국어 | Docs | v3 release note | npm
The TypeScript framework, agents included. Powered by Bun.
Build a screen — agents can use it. Build a server — any AI can run it.
No tool schemas, no MCP server to write, no second permission model. The app you build for people is already the one AI can use, on the model you choose. One line of business code runs through every layer, ships to six platforms, and reaches everyone who uses it — people and agents.
Open Claude Code or Codex in an empty directory and paste this prompt. Add your workspace and app names under it, or let the agent ask.
Set up a new Akan.js workspace for me (https://akanjs.com).
1. Check that Bun 1.4.4 or newer is installed (`bun --version`). If it isn't, install or upgrade it as https://bun.sh describes.
2. Ask me for a workspace name and a first app name, short and lowercase, unless I wrote them below.
3. In this directory, run `bunx create-akan-workspace@latest <workspace> --app <app>`. It installs the akan CLI globally, creates ./<workspace> and installs its dependencies.
4. Inside ./<workspace>, start the dev server in the background with `akan start <app>` and check that the URL it prints (http://localhost:8282 by default) loads.
5. Tell me it's running, and that I should reopen you inside ./<workspace>: the project's Akan MCP server and AGENTS.md rules load from there.
The new workspace already carries what the agent works through: AGENTS.md and CLAUDE.md, Cursor rules, and the
Akan MCP server registered for Claude Code, Codex and Cursor. Reopen the agent inside the workspace so it loads them.
Requires Bun >=1.4.4.
bunx create-akan-workspace@latest
cd <workspace-name>
akan start <app-name> --open
The creator asks for a workspace name and an app name, installs the akan CLI and the workspace's dependencies, and
generates a sample app. The app opens on http://localhost:8282.
export class ProductInput extends via((field) => ({
name: field(String),
})) {}
1 line × 8 layers × 6 platforms × people & agents.
export const Order = () => {
const { l } = usePage();
const icecreamOrderForm = st.use.icecreamOrderForm();
const order = st.tool("createIcecreamOrder", { confirm: true })
.desc("Place the order in the form.")
.exec(() => st.do.createIcecreamOrder());
return (
<>
<Field.MultiToggleSelect
label={l("icecreamOrder.toppings")}
items={cnst.Topping}
value={icecreamOrderForm.toppings}
onChange={st.do.setToppingsOnIcecreamOrder}
/>
<Button onClick={order}>{l("icecreamOrder.createIcecreamOrder")}</Button>
</>
);
};
st.tool line — the same function the button calls.confirm stops on an approval card.Setup is one <Agent.Chat /> in a layout and your model's key in option.ts. OpenAI-compatible hosts and Anthropic
both work.
serveIcecreamOrder: mutation(cnst.IcecreamOrder, {
guards: [Admin],
})
.param("icecreamOrderId", ID)
.exec(async function (icecreamOrderId) {
return await this.icecreamOrderService.serve(icecreamOrderId);
}),
refundIcecreamOrder: mutation(cnst.IcecreamOrder, {
guards: [Every, Person],
})
.param("icecreamOrderId", ID)
.with(Self)
.exec(async function (icecreamOrderId, self) {
return await this.icecreamOrderService.refund(icecreamOrderId, self.id);
}),
POST /mcp is on by default. Every endpoint whose guards admit the caller is
a tool, described by the dictionary you already write.libs/shared. The AI gets a token for one user —
exactly their rights, revocable at any time.refundIcecreamOrder is guarded by Person, so it never reaches the shelf. To
the AI it looks exactly like a tool that doesn't exist.page().prompt(name, description) publishes a screen as an MCP prompt: its fetches run
under the caller's token and the agent receives the data, with no second implementation to keep in sync.You write a guard once per endpoint. It decides for a person on the screen, for the agent in their tab, and for an AI calling over MCP.
AI coding turns to spaghetti past a certain size: the faster an agent writes, the more file paths, names, structures and declaration styles drift apart. Akan stops this at the source with strict rules.
akan.config.ts, and an empty one still runs.AGENTS.md, bundled guidelines, a
plan-then-apply workflow MCP, and akan code, a terminal coding agent that works through them.Code is organized around business domains such as user, product, ticket or project, not by technical layer
first.
lib/product/
├── product.constant.ts # model, scalar, enum, schema definition
├── product.dictionary.ts # i18n labels, descriptions, errors
├── product.signal.ts # typed endpoint contract, guards
├── product.document.ts # persistence and document queries
├── product.service.ts # business logic
├── product.store.ts # domain state and actions
├── Product.Template.tsx # form UI
├── Product.Unit.tsx # list item UI
├── Product.View.tsx # detail UI
└── Product.Zone.tsx # page section UI
flowchart LR
ConstantDictionarySignal["constant + dictionary + signal"] --> DocumentService["document + service"]
ConstantDictionarySignal --> StoreComponents["store + UI components"]
DocumentService --> ServerRuntime["server runtime + MCP"]
StoreComponents --> ClientRuntime["client runtime + in-page agent"]
ServerRuntime --> DeployArtifacts["deploy artifacts"]
ClientRuntime --> DeployArtifacts
v3 adds agents, MCP and a new UI system, and it is still faster than v2 on every number we measured.
| Metric | v2 | v3 | Change |
|---|---|---|---|
| Requests per second | 112K | 123K | +10% |
| Response time (p99) | 1.30 ms | 1.04 ms | −20% |
| Startup time | 204 ms | 102 ms | −50% |
| Memory at rest | 84 MB | 57 MB | −32% |
| Memory under load | 105 MB | 85 MB | −19% |
Measured on an Apple M4 Pro MacBook Pro with production builds and 50 concurrent users. The harness and raw data live
in benchmarks/api-benchmark.
Akan Cloud is the deploy platform built for Akan apps.
akan login # sign in to Akan Cloud from your machine
akan tunnel <app> # share the app you are running on a public URL
akan build <app> # build the production artifact Akan Cloud runs
https://akanjs.com/mcp, and your AI reads the docs (listDocPages,
searchDocPages, readDocPage) while it writes your code.llms.txt indexes the docs for any model.Akan is published as a single npm package, akanjs. The root import is intentionally small; subpath imports keep
server-only, client-only, UI and tooling surfaces apart.
import { Int, dayjs } from "akanjs/base";
import { via } from "akanjs/constant";
import { endpoint } from "akanjs/signal";
import { Button, Layout } from "akanjs/ui";
import { page } from "akanjs/client";
import { AkanApp } from "akanjs/server/akanApp";
@import "akanjs/ui/styles.css";
| Subpath | Purpose |
|---|---|
akanjs/base | Core primitives, scalars (Int, Float, ID, Binary, enumOf), dayjs, environment helpers. |
akanjs/common | Shared cross-runtime helpers. |
akanjs/constant | Model declarations, schema shaping, serialization, defaults, and the via builder. |
akanjs/dictionary | Locale, translation, and dictionary helpers for labels, descriptions and errors. |
akanjs/document | Database documents, filters, query builders, full-text search, and persistence utilities. |
akanjs/signal | Endpoints, slices, guards, middleware, and typed signal contracts. |
akanjs/service | Services, adaptors, dependency injection, and the business logic runtime. |
akanjs/fetch | Typed fetch, HTTP and WebSocket clients. |
akanjs/store | Domain state, actions, and the in-page agent's st.tool / st.use surface. |
akanjs/ui | React components, recipes, and _overrides.tsx slots: layout, form, modal, table, loading, agent chat. |
akanjs/client | The route chain (page(), layout()), routing, cookies, storage, locale, and cn. |
akanjs/client/native | The native bridge and builtin plugins for iOS, Android and desktop apps. |
akanjs/webkit | Browser-side helpers such as lazy and SEO pages. |
akanjs/server | Server runtime, SSR/RSC, MCP, logging, and server types. akanjs/server/akanApp is the entrypoint. |
akanjs/native/desktop | Desktop parts of native plugins. |
akanjs/test | Test helpers and sample generation. |
Tooling ships as separate packages: @akanjs/cli (the akan command), @akanjs/devkit (build runners, code
generation, lint rules) and create-akan-workspace.
akan create-workspace
akan create-application <app>
akan create-module
akan start <app> --open # or several: akan start a,b
akan build <app>
akan build-ios <app> # also build-android, build-desktop
akan lint <app>
akan typecheck <app>
akan test <app>
akan logs <app>
akan code
akan update
akan doctor.akan code, akan mcp, akan mcp-install, akan workflow, akan guideline.akan login, akan tunnel, deployment assets, and package updates.akan.config.ts is the single place for app-level configuration. It can stay empty, then grow only when the app
needs routes, domains, base paths, database modes, or native app settings.
import type { AppConfig } from "akanjs";
const config: AppConfig = {
routes: [
{ domains: { main: ["example.com", "www.example.com"] }, basePath: "web" },
{ domains: {}, basePath: "app" },
],
database: { modes: ["single", "cluster"] },
native: {
basePath: "app",
appName: "Example",
appId: "com.example.app",
version: "1.0.0",
buildNum: 1,
},
};
export default config;
This repository is a Bun-first monorepo. Framework code lives under pkgs/akanjs, tooling under pkgs/@akanjs,
applications under apps, shared libraries under libs, and deployment assets under infra. apps/akan is
akanjs.com itself.
Inside this repository, bun run akan builds the CLI from source and runs it:
bun run akan start <app>
bun run akan lint <app>
bun run akan typecheck <app>
bun run akan test <app-or-lib-or-pkg>
AGENTS.md is the guide for coding agents and contributors alike. When editing framework code, prefer established
subpaths and keep the root akanjs entrypoint small. The package boundary is part of the runtime design.
pkgs/akanjs/LICENSE.pkgs/akanjs/CONTRIBUTING.md.pkgs/akanjs/CODE_OF_CONDUCT.md.