This repository is a source-first framework and reference application for building local-first MyGo desktop apps in Go. It adds a predictable application layout, SQLite and GORM persistence, Goose migrations, validation, explicit dependency injection, structured logging, typed settings, OS secrets, outbound HTTP helpers, form state, generators, and optional MCP tools without replacing MyGo's runtime or IPC.
The included Notes app is the working reference. It persists notes in one SQLite database, uses the same service from the desktop UI and MCP, and shuts down its listener and storage in dependency order.
- Go 1.27.3 or newer
- Bun 1.4.2 (web projects only)
- Git
- The native libraries required by MyGo on your operating system
The manifests pin MyGo 0.7.1 and the frontend toolchain. Run
framework doctor inside a generated project to check the local MyGo build
requirements.
Install the current CLI from a checkout. Ensure Go's binary directory is on
your PATH.
cd /path/to/mygo-framework
go install ./cmd/framework
framework --versionCreate the app from the directory that should contain it:
cd /path/to/projects
framework new my-notes
cd my-notes
bun install --frozen-lockfile
framework doctor
framework devThe last command opens the Notes desktop app with MyGo's normal live-reload workflow. Add a note, quit the app, and start it again to see the persisted note.
Create a native starter with Onevra components and persisted preferences:
framework new my-native-app --native
cd my-native-app
go mod download
framework devNative projects use the pinned Go MyGo tool for development, diagnostics, and
packaging. They also include MyGo MCP
for headless UI inspection, interaction, and screenshots. Start the harness with
go run . -mcp 127.0.0.1:8080 and connect an MCP client to
http://127.0.0.1:8080/mcp using Streamable HTTP.
See the native guide for persistence, testing, and using framework packages in another application.
From the generated project root, create a complete vertical slice:
framework make feature Bookmark
bun run generateThe first command creates the model, request, service, provider, and Goose
migration. It also refreshes framework-owned adapters. The second command
refreshes MyGo's TypeScript client in src/mygo.ts.
Edit the generated service method and frontend for the feature, then verify the owned files and builds:
framework generate --check
go test ./...
bun run test:web
framework buildNever edit files with a generated-code header. After changing an exposed method
signature or a framework: annotation, run framework generate and then
bun run generate. Ordinary method-body changes use MyGo's normal rebuild
flow.
| Command | Purpose |
|---|---|
framework dev |
Start MyGo development; generate adapters first for web projects |
framework build |
Build with MyGo; generate adapters first for web projects |
framework doctor |
Run the pinned MyGo doctor; check adapters first for web projects |
framework generate |
Refresh framework-owned Go adapters and registrations |
framework generate --check |
Fail if committed generated files are stale |
framework make feature NAME |
Create a complete feature and regenerate adapters |
framework make migration NAME |
Create the next numbered Goose migration |
go run ./cmd/appctl db status |
Inspect migrations while the desktop app is closed |
go run ./cmd/appctl db up |
Apply pending migrations while the desktop app is closed |
MyGo flags pass through framework dev and framework build. Use each
command's --help output for the pinned MyGo options.
- Capability recipes show settings, secrets, HTTP, migrations, MCP exposure, and the exact verification commands.
- Capability matrix maps each requested feature to its implementation, direct evidence, and platform limits.
- Foundation and architecture notes record ownership, lifecycle, generator, security, platform, and performance behavior.
The framework intentionally has no Goravel dependency, mandatory UI server, global service facade, automatic database repair, plaintext secret fallback, or second file watcher.
See development and releases for mise setup, repository hooks, checks, builds, and the release-please workflow.
MIT.