Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 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
64262ac
feat: add shared provider adapter kernel
martijn00 Aug 28, 2026
228684d
feat: add HTTP policy decision point
martijn00 Aug 28, 2026
a46bf51
feat: add Supabase authorization integration
martijn00 Aug 28, 2026
04244fc
feat: add Better Auth permission plugins
martijn00 Aug 28, 2026
31ce32b
feat: add Clerk authorization integration
martijn00 Aug 28, 2026
7af844f
feat: add Convex authorization wrappers
martijn00 Aug 28, 2026
29ec5e3
docs: document provider adapter milestone
martijn00 Aug 28, 2026
56db28b
test: add repeatable provider release verification
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)
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
62 changes: 62 additions & 0 deletions .github/workflows/react-compatibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: React Compatibility

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

jobs:
react-compatibility:
name: React ${{ matrix.react }}
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
include:
- react: '18.3.1'
react-types: '18.3.23'
react-dom-types: '18.3.7'
pin: true
- react: '19.2.6'
react-types: '19.2.15'
react-dom-types: '19.2.3'
pin: false
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: Pin React catalog versions
if: matrix.pin
env:
REACT: ${{ matrix.react }}
REACT_TYPES: ${{ matrix.react-types }}
REACT_DOM_TYPES: ${{ matrix.react-dom-types }}
run: node .github/scripts/select-react-catalog.mjs

- name: Install pinned Permix dependencies
if: matrix.pin
# Catalog pin is workspace-wide; docs/fumadocs still declare React 19 peers.
run: pnpm install --filter permix --no-frozen-lockfile --config.strictPeerDependencies=false

- name: Install dependencies
if: ${{ !matrix.pin }}
run: pnpm install --frozen-lockfile

- name: Test React adapter
run: pnpm --filter permix exec vitest run src/react

- name: Build
run: pnpm --filter permix build
27 changes: 27 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Release Please

on:
push:
branches:
- main

permissions:
contents: write
issues: write
pull-requests: write

concurrency:
group: release-please-${{ github.ref }}
cancel-in-progress: false

jobs:
release-please:
name: Release Please
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Run Release Please
uses: googleapis/release-please-action@v5
with:
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
Loading
Loading