Maple is a monorepo for the Maple applications, Maple SDKs, local proxy,
OpenSecret backend, and updater service. The existing web, desktop, and mobile client lives under
apps/maple-research/, including Research chat
and desktop Agent Mode. Its directory name does not change the shipped Maple
application identity.
| Path | Responsibility |
|---|---|
apps/maple-research/ |
React/Vite frontend and Tauri desktop/mobile application, app documentation, and distribution configuration |
apps/maple-agent/ |
GPUI desktop-v2 prototype, ACP agent, and CLI proxy; independent from the shipped Research app |
sdk/ |
Independently published Maple TypeScript/React and Rust SDKs |
proxy/ |
Standalone OpenAI-compatible proxy, also consumed by desktop Maple |
services/updates/ |
Desktop updater Worker and verified release-metadata publishing |
services/opensecret/ |
Confidential authentication, inference, conversations, and related backend APIs; local Nitro tooling and signed PCR files |
docs/ |
Shared deployment documentation |
scripts/ and .github/workflows/ |
Shared validation and release entry points |
The backend import and legacy PCR publication contract are recorded in the backend migration note. The original OpenSecret repository remains available for installed clients' signed PCR histories. The GPUI import history and upstream follow-up branches are recorded in the Agent migration note.
Use the pinned Nix environment and run shared commands from the repository root:
nix develop --no-update-lock-file
./setup-hooks.sh
just install
just # List recipes
just dev # Research web development
just desktop-dev # Research Tauri application, including Agent Mode
just agent-dev # GPUI Agent app, using its own pinned component shellFollow the Research setup guide to
configure apps/maple-research/frontend/.env.local before starting the app.
Preserve existing configuration and externally managed workspace resources.
All VITE_* values are public client configuration and must never contain secrets.
Root justfile, flake.nix, .agents/, and CI scripts remain shared entry points;
use each component's guide for its direct Bun or Cargo commands.
Consumers select their SDK versions independently. Published pins are the
default, with local links available for development; follow the
SDK consumer version policy.
OpenSecret retains its own pinned Nix shell and Rust package: enter
services/opensecret/ before running its commands, and follow its
setup guide for stateful
PostgreSQL and environment hooks.
Use the root agent guide for shared policy and the Research validation guide or component README for the checks affected by a change. Report unit tests, builds, runtime smoke tests, and deployed behavior separately.
Production-shaped master builds and GitHub Releases are production actions. A master push that changes app inputs can upload an iOS build to TestFlight; a GitHub Release starts cross-platform packaging and downstream publication. Use the release procedure only for authorized release work. The Pages guide documents preview and production deployment profiles and controls. SDK publication uses separate protected manual workflows and does not create a Maple application release; see the SDK publishing guide. OpenSecret's root CI workflows validate code and in-tree SDK compatibility; they do not publish EIFs or deploy the TEE service. Backend deployment and manual signed-PCR publication remain explicit operator actions.
Keep changes focused, preserve compatibility at public and installed-client boundaries, and report the exact checks and runtime paths exercised before opening a pull request.