https://github.com/kyleu/projectforge
Project Forge helps you build applications with Go
https://github.com/kyleu/projectforge
codegen desktop fasthttp golang mobile quicktemplate typescript webassembly
Last synced: 3 months ago
JSON representation
Project Forge helps you build applications with Go
- Host: GitHub
- URL: https://github.com/kyleu/projectforge
- Owner: kyleu
- License: mit
- Created: 2021-07-15T20:49:15.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2026-02-28T19:58:05.000Z (3 months ago)
- Last Synced: 2026-02-28T19:59:12.059Z (3 months ago)
- Topics: codegen, desktop, fasthttp, golang, mobile, quicktemplate, typescript, webassembly
- Language: Go
- Homepage: https://projectforge.dev
- Size: 17.8 MB
- Stars: 19
- Watchers: 2
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Codeowners: .github/CODEOWNERS
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Project Forge

[Project Forge](https://projectforge.dev) is a long-lived code generator and project manager for Go web apps. It produces a complete Go codebase (with no runtime dependency on Project Forge) and keeps it evolvable: regenerate as your schema, modules, or targets change and keep custom code intact. Project Forge is itself managed by Project Forge; the tooling is continuously exercised in real apps.
Project Forge is a tool for Go-first web apps with predictable latency, minimal JS, and a codebase that can evolve without rewriting foundations. You get a standard Go project that compiles fast, ships everywhere, and stays yours.
## Download
https://projectforge.dev/download
## Source code
https://github.com/kyleu/projectforge
## Installation
### Golang
```sh
go install projectforge.dev/projectforge@latest
```

### Homebrew
```sh
brew install kyleu/kyleu/projectforge
```

## 5-minute Quick Start
1. Create a new directory and run the project wizard (accept defaults to start quickly):
```sh
mkdir hello-forge
cd hello-forge
projectforge create
```
2. Start the dev server:
```sh
./bin/dev.sh
# or: make dev
```
3. Open http://localhost:20000 (or whatever port you've picked).
4. When you're ready to change features, edit `.projectforge/project.json` and run `projectforge generate`.
## Why it is worth using
- Lifecycle-aware generation, not a one-time scaffold; updates improve your codebase on your schedule
- Performance-first runtime: quicktemplate HTML, zero-JS baseline, small payloads, aggressive caching
- Modular architecture: enable only what you need and ship a minimal or full-stack build
## Core runtime
- Fast HTTP server with MVC helpers and content negotiation (HTML, JSON, CSV, TOML, YAML, XML)
- Quicktemplate rendering for type safety, debugging support, and speed
- Stateless sessions, menu/breadcrumb hierarchy, and consistent request state
- ETag and Cache-Control support with request-aware rendering
- Embedded assets and SVG icon system with symbol reuse
## Web UI/UX
- UI works without JavaScript; progressive enhancement via TypeScript + ESBuild
- Optional JSX engine for lightweight component scripting without heavy frameworks
- Clean, accessible HTML/CSS with light/dark theming based on user preference and an optional theme catalog
- Client bundles and source maps included for fast debugging
## Developer experience
- Sub-second feedback loops and live reload for Go, templates, and client assets
- Debug builds that step through Go, quicktemplate files, and TypeScript
- Template debugging with breakpoints and test workflows
- Rich CLI and a web UI for project health, diagnostics, and admin tooling
## Build, deploy, operate
- Web, [desktop](module/desktop/doc/module/desktop.md), [iOS](module/ios/doc/module/ios.md), [Android](module/android/doc/module/android.md), [WASM](module/wasmserver/doc/module/wasmserver.md), and [notarized](module/notarize/doc/module/notarize.md) macOS targets; ~60 build targets when fully enabled
- Self-contained ~25MB binaries with embedded assets, providing a rich CLI and web API
- CI/CD via GitHub Actions, GoReleaser packaging, optional Docker publishing
- [Auto-upgrade](module/upgrade/doc/module/upgrade.md) via GitHub Releases (optional)
- OpenTelemetry tracing, Prometheus metrics, and structured Zap logging
- Admin UI utilities for profiling, system stats, sitemaps, and debugging
## Feature inventory (all optional via modules)
### Platform targets
- Custom, lightweight [desktop](module/desktop/doc/module/desktop.md) webview apps (Windows/macOS/Linux, ARM64/AMD64)
- [iOS](module/ios/doc/module/ios.md) and [Android](module/android/doc/module/android.md) webview apps
- [WASM client](module/wasmclient/doc/module/wasmclient.md) library and [WASM server](module/wasmserver/doc/module/wasmserver.md) (an offline service-worker running your Go server)
- macOS [notarization](module/notarize/doc/module/notarize.md) support
### Data and schema
- [Database](module/database/doc/module/database.md) abstraction with [PostgreSQL](module/postgres/doc/module/postgres.md), [MySQL](module/mysql/doc/module/mysql.md), [SQL Server](module/sqlserver/doc/module/sqlserver.md), [SQLite](module/sqlite/doc/module/sqlite.md), and [read-only](module/readonlydb/doc/module/readonlydb.md) replicas
- [Migration](module/migration/doc/module/migration.md) engine and [database admin UI](module/databaseui/doc/module/databaseui.md)
- Schema-driven [export](module/export/doc/module/export.md)/codegen (Go + TypeScript)
- [JSON Schema](module/jsonschema/doc/module/jsonschema.md) engine, rich [type hierarchy](module/types/doc/module/types.md) for reflection-free introspection
- High-precision [numeric](module/numeric/doc/module/numeric.md) types for Go and TypeScript
### API and protocol surface
- [OpenAPI](module/openapi/doc/module/openapi.md)/Swagger UI integration
- [WebSocket](module/websocket/doc/module/websocket.md) support with reconnection, queueing, and admin observation
- Rich [TUI](module/tui/doc/module/tui.md) using the charmbracelet/bubbletea suite
- Secure [HTTP proxying](module/proxy/doc/module/proxy.md)
- [GraphQL](module/graphql/doc/module/graphql.md) APIs with embedded GraphiQL UI
- [HTTP Archive](module/har/doc/module/har.md) (HAR) parsing and tooling
### Auth, users, auditing
- [OAuth](module/oauth/doc/module/oauth.md) 2.0 providers (dozens), permission system, stateless sessions
- [User](module/user/doc/module/user.md) framework (filesystem or database-backed)
- [Audit](module/audit/doc/module/audit.md) trails for changes and actions
### Runtime utilities
- [Filesystem](module/filesystem/doc/module/filesystem.md) abstraction for local, embedded, remote, and browser storage
- [Search](module/search/doc/module/search.md) system with UI and indexers
- [ripgrep](module/grep/doc/module/grep.md) integration
- [Git](module/git/doc/module/git.md) automation and repo workflows
- [Process](module/process/doc/module/process.md) manager with real-time output streaming
- [Task](module/task/doc/module/task.md) engine, queue system, and scheduler
- [Reactive](module/reactive/doc/module/reactive.md) values and observer pattern
- [CEL expression](module/expression/doc/module/expression.md) engine with caching
- Server-side [JavaScript execution](module/scripting/doc/module/scripting.md)
- [Sandbox](module/sandbox/doc/module/sandbox.md) module for experimentation
- [Settings](module/settings/doc/module/settings.md) framework for file-backed config
### UI and content system
- Markdown renderer and [doc browser](module/docbrowse/doc/module/docbrowse.md) with embedded help
- Syntax highlighting via Chroma
- [Rich editor components](module/richedit/doc/module/richedit.md) with progressive enhancement and JSON fallback
- [Icon packs](module/brands/doc/module/brands.md) via simple-icons (brand icons)
- UI components: menus, forms, arguments, tables, tabs, modals, accordions, load screens, flash messages, tag editor, autocomplete, link augments, DOM utilities
### Productivity and QA
- [Playwright](module/playwright/doc/module/playwright.md) E2E testing harness
- [Notebook](module/notebook/doc/module/notebook.md) integration (Observable Framework)
- [Plotting](module/plot/doc/module/plot.md) and data visualization (Observable Plot)
- [Marketing site](module/marketing/doc/module/marketing.md) module with multi-port architecture and download UX
### AI and tooling
- [Model Context Protocol](module/mcp/doc/module/mcp.md) server integration
## Example Applications
- [Rituals.dev](https://rituals.dev) ([GitHub](https://github.com/kyleu/rituals)):
Work with your team to estimate work, track your progress, and gather feedback.
- It's a full websocket-driven rich client application, but also works fine without JavaScript
- [TODO Forge](https://todo.kyleu.dev) ([GitHub](https://github.com/kyleu/todoforge)):
Manages collections of todo items.
- Almost entirely generated using Project Forge, this is a "stock" application
- [Load Toad](https://loadtoad.kyleu.dev) ([GitHub](https://github.com/kyleu/loadtoad)):
A tool for uploading HTTP Archives (`.har` files) and running load tests.
- Also supports client-defined JavaScript, executed in-process on the server
- [Admini](https://admini.dev) ([GitHub](https://github.com/kyleu/admini)):
A database management application, basically. It does other stuff too.
- This one is weird, it tried to build a user-defined admin app, but it just ended up looking like a 1990's web portal
- [NPN](https://npn.dev) ([GitHub](https://github.com/kyleu/npn)):
Basically Postman, it helps you explore and test HTTP services with a focus on speed and correctness.
- This uses a Vue.js-based rich client application, and a websocket to handle communication
- [Solitaire](https://solitaire.kyleu.dev) ([GitHub](https://github.com/kyleu/solitaire)):
An example game, not really anything right now.
- It mainly exists as a testbed for me, and to show the features of Project Forge projects
_More examples coming soon..._
## Documentation
- [Installation](doc/installation.md)
- [Contributing](doc/contributing.md)
- [Customizing](doc/customizing.md)
- [Releasing](doc/releasing.md)
- [Running](doc/running.md)
- [Scripts](doc/scripts.md)
- [Technology](doc/technology.md)
## Licensing
The Project Forge application is released under [MIT](LICENSE.md) license, and all modules and generated code are [CC0](https://creativecommons.org/publicdomain/zero/1.0/). Code used in your project is your own, and should be licensed accordingly.