@jimhoyd/urlcode 0.4.0-alpha.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/urlcode-authoring/SKILL.md +17 -19
- package/.claude/skills/urlcode-operations/SKILL.md +9 -9
- package/.claude-plugin/marketplace.json +1 -1
- package/CONTRIBUTING.md +20 -16
- package/README.md +59 -64
- package/ROADMAP.md +66 -376
- package/dist/BUILD-MANIFEST.json +26 -25
- package/dist/agents-guide.js +6 -6
- package/dist/authoring.js +15 -1
- package/dist/build-static.js +2 -0
- package/dist/capability-query.js +0 -1
- package/dist/catalog.js +0 -1
- package/dist/cli.js +25 -9
- package/dist/config.js +1 -1
- package/dist/explain-cli.js +4 -2
- package/dist/explain.js +8 -2
- package/dist/extensions.js +1 -1
- package/dist/http-response.js +1 -1
- package/dist/index.js +1 -0
- package/dist/init-with.js +36 -11
- package/dist/manifest.js +8 -2
- package/dist/mcp-authoring.js +4 -4
- package/dist/mcp.js +1 -1
- package/dist/policies/cache.js +2 -2
- package/dist/policies.js +3 -1
- package/dist/prerender.js +4 -0
- package/dist/project-dependencies.js +305 -0
- package/dist/readiness.js +3 -0
- package/dist/route-diff.js +12 -5
- package/dist/runtime.js +1 -1
- package/dist/trusted-functions.js +4 -5
- package/dist/types/authoring.d.ts +9 -1
- package/dist/types/capability-query.d.ts +0 -1
- package/dist/types/catalog.d.ts +0 -4
- package/dist/types/config.d.ts +1 -9
- package/dist/types/explain.d.ts +6 -1
- package/dist/types/extensions.d.ts +1 -1
- package/dist/types/http-response.d.ts +0 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/init-with.d.ts +7 -13
- package/dist/types/manifest.d.ts +5 -2
- package/dist/types/project-dependencies.d.ts +78 -0
- package/dist/types/readiness.d.ts +2 -0
- package/dist/types/trusted-functions.d.ts +1 -4
- package/dist/types/types.d.ts +8 -1
- package/dist/types.js +8 -1
- package/dist/typescript-authoring.js +18 -7
- package/docs/AI-AUTHORING.md +15 -7
- package/docs/ASSETS.md +2 -1
- package/docs/AUTH-BACKUP.md +32 -0
- package/docs/AWS.md +9 -0
- package/docs/BEST-PRACTICES.md +17 -9
- package/docs/CAPABILITIES.md +1 -1
- package/docs/CI-FOLLOWUP-2026-09-19.md +97 -0
- package/docs/CI-RELEASE-AUDIT-2026-09-19.md +322 -0
- package/docs/CI.md +8 -3
- package/docs/CODEBASE-AUDIT-2026-09-20.md +284 -0
- package/docs/COMPOSING-A-SITE.md +278 -0
- package/docs/DEVELOPMENT-PIPELINE.md +270 -0
- package/docs/EXTENSIONS.md +51 -11
- package/docs/FRAMEWORK.md +67 -48
- package/docs/FUNCTION-SECURITY.md +44 -0
- package/docs/INSTALL.md +13 -8
- package/docs/LOCAL-DEVELOPMENT.md +3 -0
- package/docs/MIDDLEWARE.md +10 -4
- package/docs/OPEN-DECISIONS.md +224 -212
- package/docs/OPERATIONAL-PROOF.md +3 -3
- package/docs/OPERATIONS.md +3 -3
- package/docs/POLICIES.md +13 -5
- package/docs/PRERENDER.md +23 -11
- package/docs/PROJECT-DIRECTION.md +3 -3
- package/docs/READINESS.md +10 -5
- package/docs/README.md +20 -44
- package/docs/RELEASE-0.4.0-alpha.3.md +50 -0
- package/docs/RELEASE-0.4.1.md +73 -0
- package/docs/RELEASE-READINESS.md +6 -6
- package/docs/RELEASE-SECURITY.md +96 -181
- package/docs/RESILIENCE.md +3 -3
- package/docs/ROUTING.md +3 -4
- package/docs/SECURITY-AUDIT.md +2 -2
- package/docs/SPECIFICATION.md +12 -6
- package/docs/SPIKE-AI-FRAMEWORK-BENCHMARK.md +6 -5
- package/docs/SPIKE-BUSINESS-SUITE.md +14 -6
- package/docs/SPIKE-CORE-LAYERING.md +49 -18
- package/docs/SPIKE-DEFAULT-TRUST-MODEL.md +7 -5
- package/docs/STARTERS.md +17 -5
- package/docs/STATIC.md +14 -3
- package/docs/TOOLING.md +10 -7
- package/docs/TYPESCRIPT-AUTHORING.md +6 -1
- package/docs/VERCEL.md +10 -2
- package/docs/VERSION-ALIGNMENT.md +76 -201
- package/docs/archive/2026-09-19/EXTENSION-IMPLEMENTATION.md +68 -0
- package/docs/archive/2026-09-19/MANAGEMENT-SECURITY.md +102 -0
- package/docs/{NEXT-PHASE-PLAN.md → archive/2026-09-19/NEXT-PHASE-PLAN.md} +15 -5
- package/docs/{NEXT-STEPS.md → archive/2026-09-19/NEXT-STEPS.md} +15 -3
- package/docs/archive/2026-09-19/OPEN-DECISIONS.md +277 -0
- package/docs/archive/2026-09-19/RELEASE-SECURITY.md +186 -0
- package/docs/archive/2026-09-19/ROADMAP.md +387 -0
- package/docs/{SPIKE-EXTENSION-MODEL.md → archive/2026-09-19/SPIKE-EXTENSION-MODEL.md} +11 -0
- package/docs/{SPIKE-EXTENSIONS.md → archive/2026-09-19/SPIKE-EXTENSIONS.md} +25 -14
- package/docs/archive/2026-09-19/SPIKE-LAMBDA-COMPILE.md +365 -0
- package/docs/archive/2026-09-19/SPIKE-MONOREPO.md +778 -0
- package/docs/{USABILITY-REVIEW.md → archive/2026-09-19/USABILITY-REVIEW.md} +12 -2
- package/docs/archive/README.md +28 -0
- package/docs/policies/agents.md +1 -1
- package/docs/policies/compression.md +3 -2
- package/docs/policies/security.md +3 -2
- package/docs/yaml/functions.md +10 -2
- package/docs/yaml/middleware.md +5 -3
- package/examples/assets/example.yaml +1 -1
- package/examples/cookbook/middleware/envelope.mjs +4 -2
- package/examples/cookbook/route-index.json +1 -1
- package/examples/cookbook/routes/middleware.yaml +1 -1
- package/examples/prerender/README.md +14 -6
- package/examples/prerender/functions/page.mjs +4 -2
- package/examples/prerender/middleware/template.mjs +1 -1
- package/examples/prerender/prerender.mjs +1 -1
- package/examples/prerender/urlcode.yaml +8 -4
- package/llms-full.txt +503 -88
- package/llms.txt +6 -4
- package/package.json +27 -4
- package/packaging/claude-plugin/.claude-plugin/plugin.json +2 -2
- package/packaging/claude-plugin/skills/urlcode-authoring/SKILL.md +17 -19
- package/packaging/claude-plugin/skills/urlcode-operations/SKILL.md +9 -9
- package/recipes/authenticated-json-api/README.md +4 -3
- package/recipes/authenticated-json-api/functions/profile.mjs +2 -1
- package/recipes/authenticated-json-api/recipe.yaml +1 -1
- package/recipes/contact-form/functions/contact.mjs +2 -1
- package/recipes/contact-form/recipe.yaml +2 -2
- package/recipes/cors-api/README.md +2 -2
- package/recipes/cors-api/recipe.yaml +1 -1
- package/recipes/health-page/README.md +1 -1
- package/recipes/json-api/README.md +1 -1
- package/recipes/json-api/recipe.yaml +3 -3
- package/recipes/middleware/README.md +8 -4
- package/recipes/middleware/middleware/envelope.mjs +4 -2
- package/recipes/protected-download/README.md +1 -1
- package/recipes/protected-download/recipe.yaml +1 -1
- package/recipes/static-plus-api/README.md +2 -2
- package/recipes/static-plus-api/public/index.html +1 -1
- package/recipes/static-plus-api/recipe.yaml +1 -1
- package/recipes/static-plus-api/urlcode.yaml +1 -1
- package/recipes/typescript/recipe.yaml +4 -4
- package/skills/urlcode/SKILL.md +6 -6
- package/starters/default/AGENTS.md +6 -6
- package/docs/SPIKE-LAMBDA-COMPILE.md +0 -201
- package/docs/SPIKE-MONOREPO.md +0 -322
|
@@ -26,17 +26,12 @@ Documentation, schema and runtime must come from the **same revision**. Read fro
|
|
|
26
26
|
the project's installed runtime (`node_modules/@jimhoyd/urlcode/`) or the
|
|
27
27
|
checkout you are working in — never from memory of another version.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
5. `docs/ROUTING.md`, `docs/HTTP.md`, `docs/MIDDLEWARE.md`, `docs/ASSETS.md` —
|
|
36
|
-
matching precedence, methods, composition, MIME and ranges.
|
|
37
|
-
6. `docs/FUNCTION-SECURITY.md` — the sandbox and operator binding policy.
|
|
38
|
-
|
|
39
|
-
`llms.txt` at the repository root is a compact index of all of the above.
|
|
29
|
+
Start with `urlcode context --project <dir> --budget 4000`, then retrieve the
|
|
30
|
+
capability, schema fragment, recipe or example relevant to the change. Use the
|
|
31
|
+
read-only MCP equivalents when available. `llms.txt` is the index; read the
|
|
32
|
+
matching task guide from `docs/` when a query needs more explanation.
|
|
33
|
+
`docs/SPECIFICATION.md` and `schemas/urlcode.schema.json` resolve contract
|
|
34
|
+
questions. Archived plans are historical, not valid YAML guidance.
|
|
40
35
|
|
|
41
36
|
## Workflow
|
|
42
37
|
|
|
@@ -52,8 +47,8 @@ checkout you are working in — never from memory of another version.
|
|
|
52
47
|
- Bind typed inputs through `args` or context. There is no `${...}`
|
|
53
48
|
interpolation anywhere in the format.
|
|
54
49
|
- Create every referenced module, page and asset **before** validating. All
|
|
55
|
-
paths resolve from the project root
|
|
56
|
-
|
|
50
|
+
source paths resolve from the project root. Trusted modules can import Node built-ins and npm packages;
|
|
51
|
+
only `sandbox: true` modules are restricted to the relative snapshotted graph.
|
|
57
52
|
- Write exact response fixtures for success and failure, covering every active
|
|
58
53
|
method, middleware behavior, HEAD, and any range or cache semantics.
|
|
59
54
|
- Follow `docs/BEST-PRACTICES.md` for layout and readability as the project grows.
|
|
@@ -69,14 +64,17 @@ mistakes that recur:
|
|
|
69
64
|
- `function`/`middleware` routes run trusted and unsandboxed by default: full
|
|
70
65
|
Node, npm, filesystem and `fetch` access, in-process, like any other project
|
|
71
66
|
code. `sandbox: true` opts a route into isolation — reach for it when that
|
|
72
|
-
route's own code warrants it (
|
|
73
|
-
|
|
67
|
+
route's own code warrants it (unreviewed or third-party code, a secret whose
|
|
68
|
+
blast radius matters, complex logic), not reflexively on every route and
|
|
69
|
+
never merely because it handles request data -- that is untrusted in both
|
|
70
|
+
modes and must be validated either way. A
|
|
74
71
|
`sandbox: true` route gets a text/JSON `Request`/`Response` sandbox only:
|
|
75
72
|
**no** `fetch`, Node or npm APIs, filesystem, WebSocket, streaming or crypto
|
|
76
73
|
API.
|
|
77
74
|
- No global middleware, Express compatibility or automatic auth.
|
|
78
75
|
- `policies` accepts only `throttle`, `agents`, `security`, `compression` and
|
|
79
|
-
`cache`,
|
|
76
|
+
`cache`, plus registered extension requirements under `extensions`;
|
|
77
|
+
the built-in policies are off unless declared; `hardened` is the only built-in
|
|
80
78
|
profile. Check the per-target table in `docs/POLICIES.md` before declaring
|
|
81
79
|
one for a serverless or Cloudflare deployment — an unsupported policy refuses
|
|
82
80
|
activation rather than degrading.
|
|
@@ -84,9 +82,9 @@ mistakes that recur:
|
|
|
84
82
|
only and off unless declared; a declared route at the same path wins. Its
|
|
85
83
|
generated routes count toward `--expect-routes`, and `site.sitemap` needs
|
|
86
84
|
`--origin` on every command that activates the project.
|
|
87
|
-
- There is no native `link` handler or `dynamicLinks` project flag
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
- There is no native `link` handler or `dynamicLinks` project flag, and no
|
|
86
|
+
supported extension package provides one; report stored short links as a gap,
|
|
87
|
+
never invent a `link` field.
|
|
90
88
|
- Infrastructure (proxy ranges, storage URLs, vendor rule identifiers) is an
|
|
91
89
|
operator flag, never route YAML.
|
|
92
90
|
|
|
@@ -74,20 +74,20 @@ by the operator.
|
|
|
74
74
|
|
|
75
75
|
## Hard limits — report these as gaps, never invent around them
|
|
76
76
|
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
operator
|
|
77
|
+
- Provider adapters exist with different capability limits; query
|
|
78
|
+
`urlcode capabilities --target NAME`. Automatic TLS/DNS, distributed rate
|
|
79
|
+
limiting, metrics exporters and durable delivery require operator infrastructure.
|
|
80
80
|
- No orchestration, traffic switching or automated rollback; recovery is an
|
|
81
81
|
explicit snapshot reload from a known-good artifact.
|
|
82
82
|
- `verify-deployment` has no infrastructure access, uses no credential,
|
|
83
83
|
follows no redirect and offers no `--insecure`. It cannot check anything a
|
|
84
84
|
read-only HTTP probe cannot observe.
|
|
85
|
-
- Core has no durable store and no private management API of its own
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
- Core has no durable store and no private management API of its own, and no
|
|
86
|
+
supported extension package provides stored short links.
|
|
87
|
+
- Only `sandbox: true` routes share the sandbox worker slots and forced
|
|
88
|
+
execution deadlines. Trusted routes run in Node under HTTP admission limits;
|
|
89
|
+
their cooperative timeout cannot stop blocking JavaScript. A guest timer still
|
|
90
|
+
occupies a sandbox slot. Size both modes from `docs/CAPACITY.md`.
|
|
91
91
|
- `throttle` and `agents` policy counters are per instance, not distributed;
|
|
92
92
|
they are a second layer behind the edge, never a replacement for it.
|
|
93
93
|
|
package/CONTRIBUTING.md
CHANGED
|
@@ -37,9 +37,11 @@ update docs when support changes. Do not claim a provider or OS is supported
|
|
|
37
37
|
without a passing test run. Preserve portable behavior and useful self-hosting.
|
|
38
38
|
|
|
39
39
|
Use synthetic data. Never commit secrets, customer URL collections or local
|
|
40
|
-
environment files.
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
environment files. Project function and middleware code runs trusted in Node by default. Preserve
|
|
41
|
+
explicit `sandbox: true` isolation: never add a host-execution fallback for that
|
|
42
|
+
mode. Binding grants come from operator policy outside the project and govern
|
|
43
|
+
what URLCode injects, not ambient access by trusted code. Extend adversarial
|
|
44
|
+
tests with every new sandbox guest/host bridge. See the
|
|
43
45
|
[security model](docs/FUNCTION-SECURITY.md).
|
|
44
46
|
|
|
45
47
|
## Maintaining the starter
|
|
@@ -68,19 +70,19 @@ explicit in `docs/AI-AUTHORING.md`; never present future roadmap fields as valid
|
|
|
68
70
|
|
|
69
71
|
## Documentation
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
there
|
|
74
|
-
|
|
75
|
-
urlcode-docs.
|
|
76
|
-
|
|
77
|
-
`docs/` here is contributor and maintainer material: local development, CI,
|
|
78
|
-
the release process, internal reviews, spikes, plans and the generated
|
|
79
|
-
`YAML-REFERENCE.md`. Reader-facing pages still under `docs/` are being
|
|
80
|
-
migrated to urlcode-docs; edit them in place and do not add new ones.
|
|
73
|
+
Documentation lives in `docs/` in this repository. Write new guides,
|
|
74
|
+
references and recipes here, alongside the contributor and maintainer material
|
|
75
|
+
already there: local development, CI, the release process, internal reviews,
|
|
76
|
+
spikes, plans and the generated `YAML-REFERENCE.md`.
|
|
81
77
|
|
|
82
78
|
A behavior change that a reader depends on is not finished until the matching
|
|
83
|
-
|
|
79
|
+
page in `docs/` is updated. Put both in the **same** pull request so review can
|
|
80
|
+
see both halves and neither can land alone.
|
|
81
|
+
|
|
82
|
+
`urlcode-docs` was deleted on 2026-09-19. It held its own copy of most of these
|
|
83
|
+
pages and had drifted from them; the content that was ahead has been brought
|
|
84
|
+
across, and the repository was retired rather than reconciled page by page.
|
|
85
|
+
Links to it no longer resolve.
|
|
84
86
|
|
|
85
87
|
If you find a gap you cannot close, file it as an issue on the repository that
|
|
86
88
|
owns the code rather than leaving it undocumented. Feature requests are wanted:
|
|
@@ -93,8 +95,10 @@ Work on a branch and open a focused pull request. Explain the problem, resulting
|
|
|
93
95
|
behavior, validation and compatibility/security implications. Never include real
|
|
94
96
|
credentials or customer data. Use the PR template and keep unrelated changes out.
|
|
95
97
|
|
|
96
|
-
`main` requires a pull request,
|
|
97
|
-
|
|
98
|
+
`main` requires a pull request, the `verify-complete` and `container` checks,
|
|
99
|
+
CodeQL results and resolved conversations. The current ruleset does not require
|
|
100
|
+
an up-to-date branch. The [development pipeline](docs/DEVELOPMENT-PIPELINE.md)
|
|
101
|
+
describes the fast prose lane, full code lane and exact-commit release gate. High/critical
|
|
98
102
|
security findings and error-level CodeQL alerts block merging. Force pushes and branch
|
|
99
103
|
deletion are blocked; squash merging keeps a linear history. Administrators have
|
|
100
104
|
no configured ruleset bypass. Automation cannot approve pull requests.
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ and agents can read: the agent describes what, the runtime owns how, and
|
|
|
20
20
|
generated code goes to the part that is actually the application. It is
|
|
21
21
|
infrastructure for AI-built software, not a framework for building AI models.
|
|
22
22
|
[Why](docs/PROJECT-DIRECTION.md#why-your-ai-should-build-your-application-not-your-framework) ·
|
|
23
|
-
[
|
|
23
|
+
[roadmap](ROADMAP.md).
|
|
24
24
|
|
|
25
25
|
## What it is
|
|
26
26
|
|
|
@@ -32,8 +32,10 @@ compiles it once, and refuses anything a target cannot enforce with the route
|
|
|
32
32
|
named. Functions and middleware run trusted, in-process, with full Node
|
|
33
33
|
access by default; a route opts into an isolated QuickJS/WebAssembly sandbox
|
|
34
34
|
with a fresh heap per call and no Node, filesystem or network by declaring
|
|
35
|
-
`sandbox: true`. Either way, secrets
|
|
36
|
-
pinned to the project revision
|
|
35
|
+
`sandbox: true`. Either way, the `env`/`secrets` the runtime *hands* a route
|
|
36
|
+
come only from operator grants pinned to the project revision; grants govern
|
|
37
|
+
that injected context, not the ambient Node environment a trusted, in-process
|
|
38
|
+
module can reach on its own like any other code in the host.
|
|
37
39
|
|
|
38
40
|
URLCode is not a URL shortener: stored short links are an operator-installed
|
|
39
41
|
extension, not core's job. It is not a
|
|
@@ -53,20 +55,34 @@ an AI agent must follow are in [the framework](docs/FRAMEWORK.md).
|
|
|
53
55
|
|
|
54
56
|
| Package | Adds | Status |
|
|
55
57
|
|---|---|---|
|
|
56
|
-
| [urlcode](https://github.com/jimhoyd-com/urlcode) (this repository) | Runtime, CLI, policies, provider adapters, extension contract | `0.4.
|
|
57
|
-
| [urlcode-ui](
|
|
58
|
-
| [urlcode-auth](
|
|
59
|
-
| [urlcode-admin](
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
58
|
+
| [urlcode](https://github.com/jimhoyd-com/urlcode) (this repository) | Runtime, CLI, policies, provider adapters, extension contract | `0.4.1` stable release target, Apache-2.0 |
|
|
59
|
+
| [urlcode-ui](packages/ui) (in this repository) | Shared presentation: escaped templates, shadcn/ui partials, themes, translations | `0.4.1` stable release target; review pending |
|
|
60
|
+
| [urlcode-auth](packages/auth) (in this repository) | Accounts: password, passkeys, OIDC, email codes, TOTP, sessions, roles, account page | `0.4.1` stable release target; review pending |
|
|
61
|
+
| [urlcode-admin](packages/admin) (in this repository) | Administration: users, sessions, roles, audit, approvals, cases, impersonation | `0.4.1` stable release target; review pending |
|
|
62
|
+
|
|
63
|
+
This release aligns all four packages at `0.4.1`, with publication to npm's
|
|
64
|
+
`latest` channel in the order core → ui → auth → admin. The table describes
|
|
65
|
+
the release target; confirm publication with `npm run release:status` before
|
|
66
|
+
installing it. Matching numbers do not establish a permanent fixed-version
|
|
67
|
+
policy. Peer ranges, channel rules and generated application pins are documented
|
|
68
|
+
in [package and channel alignment](docs/VERSION-ALIGNMENT.md).
|
|
69
|
+
|
|
70
|
+
`urlcode-dynamic-link` and `urlcode-short` were published once as
|
|
71
|
+
`0.1.0-alpha.1` and have since been retired: both were unpublished from npm and
|
|
72
|
+
their repositories deleted, and neither has a successor. Nothing supported
|
|
73
|
+
provides stored short links today — a project that needs them owns that storage
|
|
74
|
+
itself. Anything still pinned to `@jimhoyd/urlcode-dynamic-link@0.1.0-alpha.1`
|
|
75
|
+
also has to deal with its exact declared peer `@jimhoyd/urlcode: 0.4.0-alpha.1`,
|
|
76
|
+
which cannot be installed beside core `0.4.0-alpha.2` and never will be.
|
|
77
|
+
|
|
78
|
+
`urlcode-middleware` was retired the same way on 2026-09-19 —
|
|
79
|
+
`@jimhoyd/urlcode-middleware` was unpublished from npm at `0.1.0-alpha.2` and
|
|
80
|
+
its repository deleted. Unlike the two above, its capability did not go away
|
|
81
|
+
with it: **per-route middleware is native to core**, through the
|
|
82
|
+
`middleware:` array documented in [docs/MIDDLEWARE.md](docs/MIDDLEWARE.md).
|
|
83
|
+
The deleted package only ever offered the same behavior through the extension
|
|
84
|
+
seam. A project using it moves its entries to the native array; there is no
|
|
85
|
+
gap to report here.
|
|
70
86
|
|
|
71
87
|
```yaml
|
|
72
88
|
version: "1"
|
|
@@ -90,8 +106,9 @@ it. Cross-repository acceptance is tracked in
|
|
|
90
106
|
|
|
91
107
|
## Status
|
|
92
108
|
|
|
93
|
-
`0.4.
|
|
94
|
-
|
|
109
|
+
The `0.4.1` release line brings core, UI, auth and admin to matching stable
|
|
110
|
+
versions. A stable version selects the npm `latest` channel; it does not close
|
|
111
|
+
the review and deployment evidence gaps below. `0.4.0-alpha.1`
|
|
95
112
|
added the extension contract, capabilities and provider conformance, strict
|
|
96
113
|
redirect interchange, bulk import, recipes and search, TypeScript guest
|
|
97
114
|
authoring, conditions, bounded proxy and signals, and the MCP read and
|
|
@@ -106,10 +123,9 @@ The [roadmap](ROADMAP.md) separates implemented from planned, and
|
|
|
106
123
|
what is not: provider deployments, soak and independent security review
|
|
107
124
|
remain open.
|
|
108
125
|
|
|
109
|
-
Stored short links
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
native `link` handler.
|
|
126
|
+
Core has no native `link` handler. Stored short links moved out to a
|
|
127
|
+
mount-based `urlcode-dynamic-link` extension, which has since been retired and
|
|
128
|
+
unpublished; no supported package provides them.
|
|
113
129
|
|
|
114
130
|
URLCode is free and open-source software licensed under the
|
|
115
131
|
[Apache License 2.0](LICENSE). Commercial use, modification, redistribution and
|
|
@@ -128,6 +144,14 @@ project grows. Operators should read [capacity/concurrency](docs/CAPACITY.md) an
|
|
|
128
144
|
[DDoS and recovery playbook](docs/RESILIENCE.md). Embedding the runtime from
|
|
129
145
|
TypeScript is covered in [TypeScript](docs/TYPESCRIPT.md). [All documentation](docs/README.md).
|
|
130
146
|
|
|
147
|
+
All of it lives in [`docs/`](docs/README.md) in this repository — guides,
|
|
148
|
+
references and recipes alongside the contributor and maintainer material: local
|
|
149
|
+
development, CI, the release process, reviews and the generated field
|
|
150
|
+
reference. New pages belong here, in the same pull request as the change they
|
|
151
|
+
describe. `urlcode-docs`, a private repository that served a documentation site
|
|
152
|
+
from its own copy of these pages, is being retired; the content that was ahead
|
|
153
|
+
of this repository has been brought across.
|
|
154
|
+
|
|
131
155
|
## Start your own project
|
|
132
156
|
|
|
133
157
|
Use [urlcode-template](https://github.com/jimhoyd-com/urlcode-template) for a small
|
|
@@ -142,28 +166,6 @@ npm ci
|
|
|
142
166
|
npm run dev
|
|
143
167
|
```
|
|
144
168
|
|
|
145
|
-
## Built with URLCode
|
|
146
|
-
|
|
147
|
-
[urlcode-short](https://github.com/jimhoyd-com/urlcode-short) is a
|
|
148
|
-
standalone, account-free demo built on URLCode's public runtime. It predates
|
|
149
|
-
this repository's removal of the native link-store API from core; its
|
|
150
|
-
retrospective should be read alongside that change, not as current guidance.
|
|
151
|
-
It combines short links that expire after one hour or less, QR downloads, and a
|
|
152
|
-
shadcn/ui + Tailwind frontend. URLCode handles the page/assets and routing; the
|
|
153
|
-
application adds anonymous creation, stored-link storage and its own limits.
|
|
154
|
-
|
|
155
|
-
Read its [build retrospective](https://github.com/jimhoyd-com/urlcode-short/blob/main/docs/BUILD-RETROSPECTIVE.md)
|
|
156
|
-
for what the runtime supplied, what the application still needed, and proposed
|
|
157
|
-
improvements. The demo's license, hosting and production validation remain open;
|
|
158
|
-
it does not change URLCode's Apache-2.0 license or guest isolation model.
|
|
159
|
-
|
|
160
|
-
`urlcode-docs` demonstrates URLCode hosting a static documentation site with
|
|
161
|
-
shadcn/ui and Tailwind: content authored directly in that repository, applying
|
|
162
|
-
templates through its own sandbox-opted-in (`sandbox: true`) middleware during
|
|
163
|
-
the build, served through native page/static/download routes. That repository
|
|
164
|
-
is currently private, so it isn't publicly browsable yet. Hosting and a public
|
|
165
|
-
domain are not yet selected; the original site-code license is pending.
|
|
166
|
-
|
|
167
169
|
## Start from YAML
|
|
168
170
|
|
|
169
171
|
Already wrote `urlcode.yaml`? Run `urlcode scaffold --project ./my-links --dry-run`,
|
|
@@ -176,7 +178,8 @@ SQLite build requirement, unverified from this repository.
|
|
|
176
178
|
## Try it
|
|
177
179
|
|
|
178
180
|
```sh
|
|
179
|
-
|
|
181
|
+
# After the 0.4.1 release has been published:
|
|
182
|
+
npm install --global @jimhoyd/urlcode@0.4.1
|
|
180
183
|
urlcode init my-urls && cd my-urls
|
|
181
184
|
urlcode dev
|
|
182
185
|
```
|
|
@@ -254,26 +257,18 @@ inspection, validation and conversion previews over stdio, and
|
|
|
254
257
|
`--allow-authoring` adds project-confined authoring tools
|
|
255
258
|
([tooling](docs/TOOLING.md)).
|
|
256
259
|
|
|
257
|
-
## Documentation
|
|
258
|
-
|
|
259
|
-
Full documentation is authored in a separate `urlcode-docs` repository, where
|
|
260
|
-
new guides, references and recipes belong — but that repository is currently
|
|
261
|
-
private, so its content isn't publicly browsable yet. Until it's made public,
|
|
262
|
-
the practical reference is this README and [`docs/`](docs/README.md) in this
|
|
263
|
-
repository.
|
|
264
|
-
|
|
265
|
-
`docs/` in this repository is contributor and maintainer material — local
|
|
266
|
-
development, CI, the release process, reviews and the generated field
|
|
267
|
-
reference. Reader-facing pages still under `docs/` are being migrated.
|
|
268
|
-
|
|
269
260
|
## Built with URLCode
|
|
270
261
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
supplied and
|
|
262
|
+
Two applications were built on the public runtime as ordinary consumers, and
|
|
263
|
+
both have since been retired: `urlcode-docs`, a static documentation site
|
|
264
|
+
rendered through its own middleware at build time and served through native
|
|
265
|
+
page/static/download routes, and `urlcode-short`, an account-free short-link
|
|
266
|
+
demo combining expiring links, QR downloads and a shadcn/ui frontend — URLCode
|
|
267
|
+
supplied the pages, assets and routing, the application supplied anonymous
|
|
268
|
+
creation, link storage and its own limits. `urlcode-short`'s repository is
|
|
269
|
+
deleted, so its build retrospective is no longer reachable; what it recorded
|
|
270
|
+
about the gap between the runtime and a real application is carried in
|
|
271
|
+
[principles and open decisions](docs/OPEN-DECISIONS.md) and [roadmap](ROADMAP.md).
|
|
277
272
|
|
|
278
273
|
## License and contributing
|
|
279
274
|
|