Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
90a793a
chore: adopt TypeScript 7, pnpm catalogs, and Turborepo 2.10
martijn00 Aug 27, 2026
6de7bb8
feat: add createPermix factory with isolated React context
martijn00 Aug 28, 2026
ea49d79
feat: initialize Next.js Permix from a request-scoped rules resolver
martijn00 Aug 28, 2026
0fa844e
fix: read hydrated permissions on first Solid, Svelte, and Vue render
martijn00 Aug 28, 2026
3fddf3c
fix: skip vendored agent skills in Oxfmt and Oxlint
martijn00 Aug 28, 2026
42aaa57
fix: format React public API and allow React 18 peer mismatches in CI
martijn00 Aug 28, 2026
3872834
merge: bring in React CI format and peer-dep fixes
martijn00 Aug 28, 2026
d8519df
fix: drop extra blank line from public API type test
martijn00 Aug 28, 2026
8ec7576
chore: add changelog, Release Please, and OSS conventions
martijn00 Aug 28, 2026
a610325
chore: switch docs to Fumadocs Base UI and skip vendored skills in oxfmt
martijn00 Aug 28, 2026
43a3206
ci: allow fumadocs 16.15.4 through pnpm minimumReleaseAge
martijn00 Aug 28, 2026
f4d6a83
feat: add NestJS adapter with guard and Check decorator
martijn00 Aug 28, 2026
b9d8b08
feat: add Nuxt adapter with per-request Nitro isolation
martijn00 Aug 28, 2026
48dd91e
feat: add Astro adapter with locals-based middleware
martijn00 Aug 28, 2026
b49e7de
feat: add React Router adapter with middleware context isolation
martijn00 Aug 28, 2026
3752c95
feat: infer entity types from Zod and other Standard Schema validators
martijn00 Aug 28, 2026
4e73754
feat: add opt-in runtime validation on the Standard Schema factory
martijn00 Aug 28, 2026
2784eff
Merge remote-tracking branch 'upstream/pr/55' into feat/permission-ca…
martijn00 Aug 28, 2026
0f4df5a
Merge remote-tracking branch 'upstream/pr/56' into feat/permission-ca…
martijn00 Aug 28, 2026
c3c5f6e
Merge remote-tracking branch 'upstream/pr/57' into feat/permission-ca…
martijn00 Aug 28, 2026
804ece1
Merge remote-tracking branch 'upstream/pr/58' into feat/permission-ca…
martijn00 Aug 28, 2026
29f3f03
Merge remote-tracking branch 'upstream/pr/59' into feat/permission-ca…
martijn00 Aug 28, 2026
99cf166
Merge remote-tracking branch 'upstream/pr/60' into feat/permission-ca…
martijn00 Aug 28, 2026
602473a
Merge remote-tracking branch 'upstream/pr/61' into feat/permission-ca…
martijn00 Aug 28, 2026
8660c46
Merge remote-tracking branch 'upstream/pr/62' into feat/permission-ca…
martijn00 Aug 28, 2026
4dfdff2
Merge remote-tracking branch 'upstream/pr/63' into feat/permission-ca…
martijn00 Aug 28, 2026
d709da8
fix: preserve adapter types across merged compiler settings
martijn00 Aug 28, 2026
de7e0a1
feat: generate typed permission catalogs from source
martijn00 Aug 28, 2026
cd9d9fe
perf: enforce bundle budgets and narrow React checks
martijn00 Aug 28, 2026
20cabd7
fix: reject prototype paths, fail closed on deny, and run unit tests …
martijn00 Aug 28, 2026
dbcbf3c
perf: refresh bundle baseline after prototype-safe freeze
martijn00 Aug 28, 2026
67506d6
test: uniquely identify tenant shell during Next instant navigation
martijn00 Aug 28, 2026
b98cd77
test: scope Next instant tenant chrome by tenant-name
martijn00 Aug 28, 2026
2a1ac73
fix: rehydrate Svelte on state change and run UI checks through the i…
martijn00 Aug 28, 2026
1fb1c2b
perf: optional extractor deps, incremental watch, and one TS-compat b…
martijn00 Aug 28, 2026
3c79a6c
feat: add explain() and denial reasons on check hooks
martijn00 Aug 28, 2026
ed764f7
feat!: setup() and hydrate() return a new instance
martijn00 Aug 28, 2026
2a4fdba
fix: keep React PermixProvider context stable across setup()
martijn00 Aug 28, 2026
8f3dc9e
feat!: shared adapter kernel, factory-only UI, unified ready, catalog…
martijn00 Aug 28, 2026
326acf5
feat: add shared provider adapter kernel
martijn00 Aug 28, 2026
ed3ff83
feat: add HTTP policy decision point
martijn00 Aug 28, 2026
6c2395e
feat: add Supabase authorization integration
martijn00 Aug 28, 2026
01b2ea4
feat: add Better Auth permission plugins
martijn00 Aug 28, 2026
f5f0150
feat: add Clerk authorization integration
martijn00 Aug 28, 2026
4d90bfc
feat: add Convex authorization wrappers
martijn00 Aug 28, 2026
ca6fb0d
docs: document provider adapter milestone
martijn00 Aug 28, 2026
bc139c1
test: add repeatable provider release verification
martijn00 Aug 28, 2026
5e0bd7b
perf: add bundle fixtures for provider adapters and HTTP PDP
martijn00 Aug 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
94 changes: 94 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Bug report
description: Something isn't working as expected
title: '[Bug]: '
labels: ['bug']
body:
- type: markdown
attributes:
value: |
Before opening a bug report, please check that the issue hasn't already been reported.

- type: textarea
id: description
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is.
validations:
required: true

- type: textarea
id: reproduce
attributes:
label: Minimal reproduction
description: A minimal code snippet or repository that reproduces the issue.
placeholder: |
import { createPermix } from 'permix'

const permix = createPermix<{ post: ['read'] }>()
permix.setup({ post: { read: true } })
permix.check('post.read')
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen?
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual behavior
description: What actually happened? Include any error messages or console output.
validations:
required: true

- type: input
id: version
attributes:
label: permix version
placeholder: e.g. 4.1.2
validations:
required: true

- type: dropdown
id: framework
attributes:
label: Framework / adapter
options:
- Core (no adapter)
- React
- Vue
- Solid
- Svelte
- Next.js
- TanStack Start
- Express
- Hono
- Fastify
- tRPC
- oRPC
- Elysia
- Node
- Other
validations:
required: true

- type: input
id: framework_version
attributes:
label: Framework version
placeholder: e.g. React 19.2, Next.js 16
validations:
required: false

- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I searched existing issues first
required: true
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Documentation
url: https://permix.letstri.dev/docs
about: Usage questions are often answered in the docs.
41 changes: 41 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Feature request
description: Propose a DX, API, or adapter improvement
title: '[Feature]: '
labels: ['enhancement']
body:
- type: input
id: summary
attributes:
label: Summary
placeholder: Add a typed helper for checking several permissions at once
validations:
required: true

- type: textarea
id: problem
attributes:
label: Problem
description: What workflow or maintenance pain does this solve?
validations:
required: true

- type: textarea
id: proposal
attributes:
label: Proposed solution
description: Keep this focused on implementation shape, not product marketing.
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives considered

- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I checked existing issues and docs first
required: true
28 changes: 28 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
version: 2

updates:
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
time: '05:00'
timezone: UTC
open-pull-requests-limit: 10
groups:
workspace-dependencies:
patterns:
- '*'

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
time: '05:30'
timezone: UTC
open-pull-requests-limit: 5
groups:
github-actions:
patterns:
- '*'
18 changes: 18 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Summary

- [ ] closes #
- [ ] follow-up issues opened and linked

## Testing

- [ ] `pnpm format:check`
- [ ] `pnpm lint`
- [ ] `pnpm check-types`
- [ ] `pnpm test`
- [ ] `pnpm verify`

## Checklist

- [ ] docs updated where needed (`docs/content/docs/`, `README.md`, `CONTRIBUTING.md`)
- [ ] `permix/skills/` aligned when public API or integration patterns changed
- [ ] added or updated tests where it materially reduces regression risk
22 changes: 22 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
changelog:
exclude:
labels:
- ignore-for-release
categories:
- title: Breaking Changes
labels:
- breaking
- title: New Features
labels:
- enhancement
- feature
- title: Bug Fixes
labels:
- bug
- fix
- title: Documentation
labels:
- documentation
- title: Other Changes
labels:
- '*'
17 changes: 17 additions & 0 deletions .github/scripts/select-react-catalog.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { readFileSync, writeFileSync } from 'node:fs'

const react = process.env.REACT
const reactTypes = process.env.REACT_TYPES
const reactDomTypes = process.env.REACT_DOM_TYPES

if (!react || !reactTypes || !reactDomTypes) {
throw new Error('REACT, REACT_TYPES, and REACT_DOM_TYPES must be set')
}

const yaml = readFileSync('pnpm-workspace.yaml', 'utf-8')
.replace(/^( {2}react: ).+$/m, `$1${react}`)
.replace(/^( {2}react-dom: ).+$/m, `$1${react}`)
.replace(/^( {2}'@types\/react': ).+$/m, `$1${reactTypes}`)
.replace(/^( {2}'@types\/react-dom': ).+$/m, `$1${reactDomTypes}`)

writeFileSync('pnpm-workspace.yaml', yaml)
34 changes: 34 additions & 0 deletions .github/workflows/bundle-size.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Bundle Size

on:
pull_request:
branches:
- main

jobs:
bundle-size:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build package
run: pnpm --filter permix build

- name: Enforce bundle-size budgets
run: pnpm --filter permix size:compare
9 changes: 4 additions & 5 deletions .github/workflows/lint-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,14 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha }}

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 11.5.0
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down
36 changes: 36 additions & 0 deletions .github/workflows/next-integration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Next Integration

on:
pull_request:
types: [opened, synchronize]
branches:
- main

jobs:
next-matrix:
runs-on: ubuntu-latest
timeout-minutes: 45

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install Playwright Chromium
run: pnpm --filter @permix/next-integration exec playwright install chromium --with-deps

- name: Build Permix and run Next fixtures
run: pnpm test:next
5 changes: 4 additions & 1 deletion .github/workflows/npm-publish.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
name: Build and publish

on:
release:
types: [published]
workflow_dispatch:

permissions:
Expand All @@ -15,7 +17,8 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: latest
node-version: 24
cache: pnpm
registry-url: 'https://registry.npmjs.org'
- run: pnpm i --frozen-lockfile
- run: pnpm run lint
Expand Down
Loading
Loading