Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: 🐛 Bug Report
description: Report something that behaves incorrectly
title: '[Bug]: '
labels: ['bug', 'needs-triage']
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug report. A minimal reproduction
is by far the most useful thing you can include.

- type: textarea
id: what-happened
attributes:
label: What happened?
description: Describe the bug and what you expected instead.
placeholder: Calling `store.patch()` inside a subscriber notified listeners twice…
validations:
required: true

- type: textarea
id: reproduction
attributes:
label: Minimal reproduction
description: The smallest code snippet that shows the problem.
render: typescript
placeholder: |
import { createStore } from 'exostate'

const store = createStore({ count: 0 })
// …
validations:
required: true

- type: dropdown
id: area
attributes:
label: Which part of Exostate?
multiple: true
options:
- Core store (createStore, patch, subscribe)
- Query layer (QueryClient, useQuery, mutations)
- React adapter
- Vue adapter
- Svelte adapter
- Solid adapter
- Persistence (localStorage / IndexedDB / filesystem)
- History / time travel
- Plugins / middleware / devtools
- Types / TypeScript inference
- SSR / hydration
- Other
validations:
required: true

- type: input
id: version
attributes:
label: Exostate version
placeholder: 1.2.0
validations:
required: true

- type: input
id: environment
attributes:
label: Environment
description: Runtime, framework version, bundler, OS.
placeholder: Node 22, React 18.3, Vite 5, macOS 15
validations:
required: true

- type: textarea
id: logs
attributes:
label: Relevant logs or stack trace
render: shell

- type: checkboxes
id: checks
attributes:
label: Before submitting
options:
- label: I searched existing issues and this is not a duplicate
required: true
- label: I am using a supported version of Exostate
required: true
14 changes: 14 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: 💬 Discussions
url: https://github.com/webcoderspeed/exostate/discussions
about: Ask questions, share patterns, and propose ideas
- name: 📖 Documentation
url: https://github.com/webcoderspeed/exostate#readme
about: Full API reference, framework guides, and examples
- name: 🔍 Search existing issues
url: https://github.com/webcoderspeed/exostate/issues?q=is%3Aissue
about: Someone may have already reported this
- name: 🔐 Report a security vulnerability
url: https://github.com/webcoderspeed/exostate/security/advisories/new
about: Please report security issues privately, not as a public issue
26 changes: 26 additions & 0 deletions .github/ISSUE_TEMPLATE/documentation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: 📚 Documentation
description: Report unclear, missing, or incorrect documentation
title: '[Docs]: '
labels: ['documentation', 'good first issue']
body:
- type: input
id: location
attributes:
label: Where?
description: README section, JSDoc on a specific export, or an example file.
placeholder: README → "Query layer" section
validations:
required: true

- type: textarea
id: problem
attributes:
label: What is wrong or missing?
validations:
required: true

- type: textarea
id: suggestion
attributes:
label: Suggested wording
description: A concrete replacement is welcome but not required.
58 changes: 58 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: ✨ Feature Request
description: Suggest a new capability or improvement
title: '[Feature]: '
labels: ['enhancement', 'needs-triage']
body:
- type: markdown
attributes:
value: |
Exostate aims to stay small and dependency-free. Proposals that explain
the concrete problem — rather than only the proposed API — are much
easier to evaluate.

- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: Describe the situation where the current API falls short.
validations:
required: true

- type: textarea
id: proposal
attributes:
label: Proposed API
render: typescript
placeholder: |
const store = createStore({ count: 0 }, { /* … */ })
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives you considered
description: Including how other libraries (Zustand, Jotai, TanStack Query, Nanostores) handle it.

- type: dropdown
id: scope
attributes:
label: Where would this live?
options:
- Core (ships in the main entry)
- Query layer
- A framework adapter
- A separate subpath export
- Not sure
validations:
required: true

- type: checkboxes
id: checks
attributes:
label: Before submitting
options:
- label: I searched existing issues and discussions for this idea
required: true
- label: I am willing to help implement this
required: false
75 changes: 75 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
version: 2

updates:
# ── npm dependencies ─────────────────────────────────────────────
- package-ecosystem: npm
directory: /
schedule:
interval: weekly
day: monday
time: '09:00'
timezone: Asia/Kolkata
open-pull-requests-limit: 10
# Group non-major updates so the queue stays reviewable.
groups:
eslint-and-plugins:
patterns:
- 'eslint*'
- '@eslint/*'
- 'typescript-eslint'
- '@typescript-eslint/*'
- 'eslint-plugin-*'
- 'eslint-config-*'
testing:
patterns:
- 'vitest'
- '@vitest/*'
- 'jsdom'
- '@testing-library/*'
- 'fast-check'
typescript:
patterns:
- 'typescript'
- '@types/*'
frameworks:
patterns:
- 'react'
- 'react-dom'
- 'vue'
- 'svelte'
- 'solid-js'
labels:
- 'dependencies'
- 'automated'
commit-message:
prefix: 'chore'
prefix-development: 'chore'
include: scope
# Framework majors change peer-dependency semantics — review by hand.
ignore:
- dependency-name: 'typescript'
update-types: ['version-update:semver-major']
- dependency-name: 'react'
update-types: ['version-update:semver-major']
- dependency-name: 'vue'
update-types: ['version-update:semver-major']
- dependency-name: 'svelte'
update-types: ['version-update:semver-major']
- dependency-name: 'solid-js'
update-types: ['version-update:semver-major']

# ── GitHub Actions ────────────────────────────────────────────────
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
time: '09:00'
timezone: Asia/Kolkata
open-pull-requests-limit: 5
labels:
- 'github-actions'
- 'automated'
commit-message:
prefix: 'ci'
include: scope
42 changes: 42 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<!--
Thanks for contributing to Exostate!

Commit titles follow Conventional Commits — the release version is derived
from them automatically:
feat: … → minor release
fix: … → patch release
perf: … → patch release
docs: … → patch release
chore: … → no release
feat!: … → major release (or a "BREAKING CHANGE:" footer)
-->

## What does this change?

<!-- A short description of the change and the problem it solves. -->

## Why?

<!-- Link the issue it closes, e.g. "Closes #123", or explain the motivation. -->

## Type of change

- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds capability)
- [ ] Breaking change (existing API behaves differently)
- [ ] Performance improvement
- [ ] Documentation only
- [ ] Internal / tooling

## Checklist

- [ ] `npm run validate` passes locally (build, typecheck, lint, tests)
- [ ] Added or updated tests covering this change
- [ ] Public API changes are documented (JSDoc + README)
- [ ] No new runtime dependency was added (Exostate is dependency-free)
- [ ] The core entry point stays browser-safe (no `node:` builtins outside `src/node/`)
- [ ] Bundle size impact considered (`npm run size`)

## Notes for reviewers

<!-- Anything tricky, intentional trade-offs, or areas you want scrutinised. -->
Loading
Loading