A Tauri + Next.js (SSG) template, with TailwindCSS, opinionated linting, and GitHub Actions preconfigured

Overview

Tauri + Next.js Template

Tauri window screenshot

This is a Tauri project template using Next.js, bootstrapped by combining create-next-app and create tauri-app.

This template uses yarn as the Node.js dependency manager.

Template Features

  • TypeScript frontend using Next.js React framework
  • TailwindCSS as a utility-first atomic CSS framework
    • The example page in this template app has been updated to use only TailwindCSS
    • While not included by default, consider using HeadlessUI components for completely unstyled and fully accessible UI components, which integrate nicely with TailwindCSS
  • Opinionated formatting and linting already setup and enabled
  • GitHub Actions to check code formatting and linting for both TypeScript and Rust

Getting Started

Running development server and use Tauri window

To develop and run the frontend in a Tauri window:

yarn dev

This will load the Next.js frontend directly in a Tauri webview window, in addition to starting a development server on localhost:3000.

Building for release

To export the Next.js frontend via SSG and build the Tauri application for release:

yarn build

Please remember to change the bundle identifier in tauri.conf.json > tauri > bundle > identifier, as the default value will yield an error that prevents you from building the application for release.

Source structure

Next.js frontend source files are located in src/ and Tauri Rust application source files are located in src-tauri/. Please consult the Next.js and Tauri documentation respectively for questions pertaining to either technology.

Caveats

Static Site Generation / Pre-rendering

Next.js is a great React frontend framework which supports server-side rendering (SSR) as well as static site generation (SSG or pre-rendering). For the purposes of creating a Tauri frontend, only SSG can be used since SSR requires an active Node.js server.

Using Next.js and SSG helps to provide a quick and performant single-page-application (SPA) frontend experience. More information regarding this can be found here: https://nextjs.org/docs/basic-features/pages#pre-rendering

next/image

The next/image component is an enhancement over the regular <img> HTML element with additional optimizations built in. However, because we are not deploying the frontend onto Vercel directly, some optimizations must be disabled to properly build and export the frontend via SSG. As such, the unoptimized property is set to true for the next/image component in the next.config.js configuration. This will allow the image to be served as-is from source, without changes to its quality, size, or format.

error[E0554]: #![feature] may not be used on the stable release channel

If you are getting this issue when trying to run yarn tauri dev, it may be that you have a newer version of a Rust dependency that uses an unstable feature. yarn tauri build should still work for production builds, but to get the dev command working, either downgrade the dependency or use Rust nightly via rustup override set nightly.

ReferenceError: navigator is not defined

If you are using Tauri's invoke function or any OS related Tauri function from within JavaScript, you may encounter this error when importing the function in a global, non-browser context. This is due to the nature of Next.js' dev server effectively running a Node.js server for SSR and hot module replacement (HMR), and Node.js does not have a notion of window or navigator.

Solution 1 - Dependency Injection (may not always work)

Make sure that you are calling these functions within the browser context, e.g. within a React component inside a useEffect hook when the DOM actually exists by then. If you are trying to use a Tauri function in a generalized utility source file, a workaround is to use dependency injection for the function itself to delay the actual importing of the real function (see example below for more info).

Example using Tauri's invoke function:

src/lib/some_tauri_functions.ts (problematic)

// Generalized file containing all the invoke functions we need to fetch data from Rust
import { invoke } from "@tauri-apps/api/tauri"

const loadFoo = (): Promise<string> => {
  return invoke<string>("invoke_handler_foo")
}

const loadBar = (): Promise<string> => {
  return invoke<string>("invoke_handler_bar")
}

const loadBaz = (): Promise<string> => {
  return invoke<string>("invoke_handler_baz")
}

// and so on ...

src/lib/some_tauri_functions.ts (fixed)

// Generalized file containing all the invoke functions we need to fetch data from Rust
//
// We apply the idea of dependency injection to use a supplied invoke function as a
// function argument, rather than directly referencing the Tauri invoke function.
// Hence, don't import invoke globally in this file.
//
// import { invoke } from "@tauri-apps/api/tauri"  <-- remove this!
//

import { InvokeArgs } from "@tauri-apps/api/tauri"
type InvokeFunction = <T>(cmd: string, args?: InvokeArgs | undefined) => Promise<T>

const loadFoo = (invoke: InvokeFunction): Promise<string> => {
  return invoke<string>("invoke_handler_foo")
}

const loadBar = (invoke: InvokeFunction): Promise<string> => {
  return invoke<string>("invoke_handler_bar")
}

const loadBaz = (invoke: InvokeFunction): Promise<string> => {
  return invoke<string>("invoke_handler_baz")
}

// and so on ...

Then, when using loadFoo/loadBar/loadBaz within your React components, import the invoke function from @tauri-apps/api and pass invoke into the loadXXX function as the InvokeFunction argument. This should allow the actual Tauri API to be bundled only within the context of a React component, so it should not be loaded by Next.js upon initial startup until the browser has finished loading the page.

Solution 2: Wrap Tauri API behind dynamic import()

Since the Tauri API needs to read from the browser's window and navigator object, this data does not exist in a Node.js and hence SSR environment. One can create an exported function that wraps the Tauri API behind a dynamic runtime import() call.

Example: create a src/lib/tauri.ts to re-export invoke

import type { InvokeArgs } from "@tauri-apps/api/tauri"

const isNode = (): boolean =>
  Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) ===
  "[object process]"

export async function invoke<T>(
  cmd: string,
  args?: InvokeArgs | undefined,
): Promise<T> {
  if (isNode()) {
    // This shouldn't ever happen when React fully loads
    return Promise.resolve(undefined as unknown as T)
  }
  const tauriAppsApi = await import("@tauri-apps/api")
  const tauriInvoke = tauriAppsApi.invoke
  return tauriInvoke(cmd, args)
}

Then, instead of importing import { invoke } from "@tauri-apps/api/tauri", use invoke from import { invoke } from "@/lib/tauri".

Learn More

To learn more about Next.js, take a look at the following resources:

And to learn more about Tauri, take a look at the following resources:

Comments
  • Bump @typescript-eslint/parser from 5.36.1 to 5.36.2

    Bump @typescript-eslint/parser from 5.36.1 to 5.36.2

    Bumps @typescript-eslint/parser from 5.36.1 to 5.36.2.

    Release notes

    Sourced from @​typescript-eslint/parser's releases.

    v5.36.2

    5.36.2 (2022-09-05)

    Bug Fixes

    • eslint-plugin: [no-extra-parens] handle generic ts array type. (#5550) (0d6a190)
    • scope-manager: correct handling for class static blocks (#5580) (35bb8dd)
    • typescript-estree: don't double add decorators to a parameter property's parameter (#5582) (863694c)
    Changelog

    Sourced from @​typescript-eslint/parser's changelog.

    5.36.2 (2022-09-05)

    Note: Version bump only for package @​typescript-eslint/parser

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • Bump @types/jest from 27.5.2 to 28.1.8

    Bump @types/jest from 27.5.2 to 28.1.8

    Bumps @types/jest from 27.5.2 to 28.1.8.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once CI passes on it, as requested by @kvnxiao.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • Bump @testing-library/user-event from 13.5.0 to 14.4.3

    Bump @testing-library/user-event from 13.5.0 to 14.4.3

    Bumps @testing-library/user-event from 13.5.0 to 14.4.3.

    Release notes

    Sourced from @​testing-library/user-event's releases.

    v14.4.3

    14.4.3 (2022-08-09)

    Bug Fixes

    v14.4.2

    14.4.2 (2022-08-04)

    Bug Fixes

    v14.4.1

    14.4.1 (2022-08-02)

    Bug Fixes

    v14.4.0

    14.4.0 (2022-08-02)

    Features

    Bug Fixes

    • event: be robust against incomplete event implementations (#1009) (289828b)
    • upload: be robust against missing FileList implementation (#1007) (a46b4d7)
    • keyboard: switch modifier state of lock keys on the correct event (#1003) (2852509)
    • keyboard: remove platform-specific additional key events for Control on AltGraph (#1003) (2852509)
    • pointer: dispatch contextmenu events with detail: 0 (#1003) (2852509)
    • pointer: always set PointerEvent.isPrimary (#1003) (2852509)
    • pointer: set button property on pointer events separately from legacy mouse events (#1003) (2852509)
    • pointer: click closest common ancestor if mousedown and mouseup happen on different elements (#1003) (2852509)
    • pointer: omit click event on release if another button is released first (#1003) (2852509)
    • pointer: dispatch mouseover, mouseenter and mousemove on disabled elements (#1003) (2852509)
    • pointer: prevent mouse* events per pointerdown event handler (#1003) (2852509)
    • pointer: dispatch *out and *over events when moving into / out of nested elements (#1003) (2852509)
    • pointer: dispatch *enter and *leave events on ancestors (#1003) (2852509)

    v14.3.0

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once CI passes on it, as requested by @kvnxiao.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • Bump eslint-config-next from 12.2.2 to 12.2.5

    Bump eslint-config-next from 12.2.2 to 12.2.5

    Bumps eslint-config-next from 12.2.2 to 12.2.5.

    Release notes

    Sourced from eslint-config-next's releases.

    v12.2.5

    Core Changes

    • Change invalid internal upstream image error code: #39334
    • Hoist styles for Route Announcer: #39331
    • fix: wrong reference url for disableStaticImages: #39362
    • fix: skip resizing image if it's animated: #39325
    • Fix catchall rewrites for _next/data routes: #39370
    • Fix next/future/image alt text: #39366
    • refactor: add named export in next/server: #39381
    • fix(ts): More strict Redirect type: #38277
    • fix(next): dev server starting when importing a file using get-projec…: #38274
    • Add runtime to PageConfig type: #37453
    • fix: improve logging for _devPagesManifest.json loading failures: #38046
    • Allow custom path for preview mode cookies: #38313
    • Fix removing whitespacing in dev overlay: #28277
    • Fix emotion labelFormat and sourcemap options: #39389
    • Fix emotion shouldForwardProp options breaks component selectors: #39390
    • next/image imgix loader can use multiple auto params: #34808
    • Adds eslint-plugin-eslint-plugin to ensure eslint-plugin-next rules follow ESLint rule best practices along with enforcing some consistency.: #37920
    • [ESLint] Adds --output-file flag: #36420
    • Update polyfill for eslint no-unwanted-polyfillio rule: #33170
    • fix(ts): Middleware type tweaks: #38625
    • Fix Link generation for SSG pages if locale domains are used: #36818
    • Setup require hook in next-server for styled-jsx resolving: #39305
    • fix: ensure trailing slash on registry URL when fetching wasm fallback: #39427
    • typing: upgrade styled-jsx to remove workaround in build script: #39408
    • Extract redirect utils into a separate file: #39433
    • Ensure locale redirects are not applied in minimal mode: #39436
    • feat(middleware): augments / matcher with /index: #39397
    • Bump edge-runtime packages: #39450
    • Ensure default _app is used when falling back to default _error: #39467
    • Handle rewriting WebSocket requests: #39463
    • App Build Stats: #38884
    • Tweak styled-jsx type declarations: #39474
    • FIX GAUSSIAN BLUR IN FUTURE\IMAGE: #39190
    • Add hot-reloading for env file changes: #38483
    • feat(next-swc/modularize_imports): Add Kebab case: #38583
    • Make dev watch ignore more specific: #39504
    • Bump styled-jsx and remove manual types creation: #39506
    • Add position styling to future fill images: #39438
    • fix: ensure hidden iframe apps render in development mode: #39514
    • Enable @​typescript-eslint/no-use-before-define variables,enums,typedefs for core files: #39511
    • Re-add styled-jsx as a normal dependency: #39518

    Documentation Changes

    • docs: update When section of getStaticProps page: #39393
    • Update script.md: #39400
    • API Routes Request Helpers docs.: #39407

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once CI passes on it, as requested by @kvnxiao.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • Bump serde from 1.0.143 to 1.0.144 in /src-tauri

    Bump serde from 1.0.143 to 1.0.144 in /src-tauri

    Bumps serde from 1.0.143 to 1.0.144.

    Release notes

    Sourced from serde's releases.

    v1.0.144

    • Change atomic ordering used by Serialize impl of atomic types to match ordering used by Debug impl of those same types (#2263, thanks @​taiki-e)
    Commits
    • f52d134 Release 1.0.144
    • 6660676 Merge pull request #2263 from taiki-e/ordering
    • 1d42d35 Relax orderings of Serialize impl for atomic types to match the latest stable
    • ebd06ee Link to apache-avro crate's published docs
    • f198582 Merge pull request #2258 from Mottl/patch-1
    • 60e4092 Fixes link to Apache Avro in documentation
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once CI passes on it, as requested by @kvnxiao.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Bump serde_json from 1.0.83 to 1.0.85 in /src-tauri

    Bump serde_json from 1.0.83 to 1.0.85 in /src-tauri

    Bumps serde_json from 1.0.83 to 1.0.85.

    Release notes

    Sourced from serde_json's releases.

    v1.0.85

    • Make Display for Number produce the same representation as serializing (#919)

    v1.0.84

    • Make Debug impl of serde_json::Value more compact (#918)
    Commits
    • 44d9c53 Release 1.0.85
    • 2c8e2b0 Merge pull request #919 from serde-rs/displaynum
    • cb2515b Make Display for Number produce the same representation as serializing
    • 8ba8541 Preserve '.0' when Displaying Number
    • de251c8 Add test of Display for Number containing float
    • 6b8b073 Release 1.0.84
    • 9e9b2b7 Revert "Avoid cargo 1.45–1.50 in GitHub Actions"
    • a685113 Merge pull request #918 from serde-rs/debug
    • dd6a86d Reduce unneeded parens and newlines in Debug for Value
    • de62e3e Make Debug test compatible with preserve_order
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Bump tailwindcss from 3.2.1 to 3.2.4

    Bump tailwindcss from 3.2.1 to 3.2.4

    Bumps tailwindcss from 3.2.1 to 3.2.4.

    Release notes

    Sourced from tailwindcss's releases.

    v3.2.4

    Added

    • Add blocklist option to prevent generating unwanted CSS (#9812)

    Fixed

    • Fix watching of files on Linux when renames are involved (#9796)
    • Make sure errors are always displayed when watching for changes (#9810)

    v3.2.3

    Fixed

    • Fixed use of raw content in the CLI (#9773)
    • Pick up changes from files that are both context and content deps (#9787)
    • Sort pseudo-elements ONLY after classes when using variants and @apply (#9765)
    • Support important utilities in the safelist (pattern must include a !) (#9791)

    v3.2.2

    Fixed

    • Escape special characters in resolved content base paths (#9650)
    • Don't reuse container for array returning variant functions (#9644)
    • Exclude non-relevant selectors when generating rules with the important modifier (#9677)
    • Fix merging of arrays during config resolution (#9706)
    • Ensure configured font-feature-settings are included in Preflight (#9707)
    • Fix fractional values not being parsed properly inside arbitrary properties (#9705)
    • Fix incorrect selectors when using @apply in selectors with combinators and pseudos (#9722)
    • Fix cannot read properties of undefined (reading 'modifier') (#9656, aa979d6)
    Changelog

    Sourced from tailwindcss's changelog.

    [3.2.4] - 2022-11-11

    Added

    • Add blocklist option to prevent generating unwanted CSS (#9812)

    Fixed

    • Fix watching of files on Linux when renames are involved (#9796)
    • Make sure errors are always displayed when watching for changes (#9810)

    [3.2.3] - 2022-11-09

    Fixed

    • Fixed use of raw content in the CLI (#9773)
    • Pick up changes from files that are both context and content deps (#9787)
    • Sort pseudo-elements ONLY after classes when using variants and @apply (#9765)
    • Support important utilities in the safelist (pattern must include a !) (#9791)

    [3.2.2] - 2022-11-04

    Fixed

    • Escape special characters in resolved content base paths (#9650)
    • Don't reuse container for array returning variant functions (#9644)
    • Exclude non-relevant selectors when generating rules with the important modifier (#9677)
    • Fix merging of arrays during config resolution (#9706)
    • Ensure configured font-feature-settings are included in Preflight (#9707)
    • Fix fractional values not being parsed properly inside arbitrary properties (#9705)
    • Fix incorrect selectors when using @apply in selectors with combinators and pseudos (#9722)
    • Fix cannot read properties of undefined (reading 'modifier') (#9656, aa979d6)
    Commits
    • f2f1ee9 3.2.4
    • 13eb1e2 update changelog
    • 22d45dd Update CHANGELOG.md
    • 602101d Allow users to block generation of certain utilities (#9812)
    • 4ccc0fa Make sure errors are always displayed when watching for changes (#9810)
    • 1482c75 Fix watching of files on Linux when renames are involved (#9796)
    • 757a8d6 update changelog
    • 6166e59 3.2.3
    • 8a2f9ed Fix !important selectors not being classified as valid class inside safelist ...
    • 6bd9912 Only sort pseudo elements after classes when using @apply and variants (#9765)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump postcss from 8.4.18 to 8.4.19

    Bump postcss from 8.4.18 to 8.4.19

    Bumps postcss from 8.4.18 to 8.4.19.

    Release notes

    Sourced from postcss's releases.

    8.4.19

    • Fixed whitespace preserving after AST transformations (by @​romainmenke).
    Changelog

    Sourced from postcss's changelog.

    8.4.19

    • Fixed whitespace preserving after AST transformations (by Romain Menke).
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump eslint-config-next from 13.0.1 to 13.0.5

    Bump eslint-config-next from 13.0.1 to 13.0.5

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps eslint-config-next from 13.0.1 to 13.0.5.

    Release notes

    Sourced from eslint-config-next's releases.

    v13.0.5

    Core Changes

    • Remove unnecessary async function when preloading async components: #42957
    • Add force-static handling for app dir: #43061
    • Add experimental outputFileTracingIgnores config: #43103
    • Leverage outputFileTracingIgnores for next-server trace as well: #43108
    • Remove unstable_revalidate: #43119
    • types: better type definition for internal utils: #43070
    • Eagerly build swc binaries on change: #43142
    • chore: Update swc_core to v0.43.23: #42977
    • fix(next-swc/relay): make pages directory optional: #43116
    • Remove the timestamp query for CSS resources: #43185
    • Update experimental skipTrailingSlashRedirect handling: #43201
    • Avoid bundling appDir rendering into pages edge SSR bundle: #43184
    • Alias esm next document to avoid mismatch react context: #43192
    • Fix middleware not executed when pages directory is empty: #43205
    • Remove app routes from _devPagesManifest: #43188
    • Fix HMR error: "Cannot read properties of null (reading 'length')": #43145
    • fix(ts): re-export PageComponent and LayoutComponent types: #43226
    • Fix app routes are not correctly matched when src directory is used: #43234
    • chore: add firebase-admin to default serverComponentsExternalPackages list: #43249
    • Fix React.cache() in layout/page file: #43187
    • build(cargo): bump up turbopack: #43273
    • fix(next-swc): aarch64 build: #43275
    • Add fallback aliases for React: #43203
    • fix: apply default export interop to next/error: #43238
    • Remove unused use-sync-external-store dependency: #43281
    • Imageloader: collect images serverside to include images from staticp…: #41554
    • Update precompiled react: #43288
    • Resolve next api for layouts to esm for edge runtime: #43302
    • Refactor code: #43291
    • Show error for invalid page props in the TS plugin: #43300
    • docs: add error link when missing appDir: true: #43293

    Documentation Changes

    • Add note in next/link docs about anchor props: #43064
    • Remove unneeded async in docs.: #43161
    • Add JWT example to error page.: #43162
    • Updated typo in the documentation: #43160
    • Add missing quote in next/script example: #43196
    • Add a note about the auto-created empty directory: #43219
    • docs: Add default browserslist configuration as a starting point: #43260

    Example Changes

    • chore: Updating Tigris example to use stable release: #43058
    • examples(with-ant-design): bump antd v5.0.0: #43062
    • fix: Wrong link to source in "responsive" image example: #43081

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump cssnano from 5.1.13 to 5.1.14

    Bump cssnano from 5.1.13 to 5.1.14

    Bumps cssnano from 5.1.13 to 5.1.14.

    Release notes

    Sourced from cssnano's releases.

    v5.1.14

    Bug Fixes

    • fix: update autoprefixer and browserslist
    • fix(postcss-reduce-initial): improve initial properties data
    Commits
    • 9edbfa0 Publish cssnano 5.1.14
    • b56d337 fix: update initial property values
    • 2bc6580 chore: use native fetch in scripts
    • 336304b chore: update browserslist, autoprefixer and css-declaration-sorter (#1444)
    • d0e3654 chore: update dev dependencies
    • 14262f2 chore: fix script that regenerates CSS fixtures
    • 393de13 chore: update GitHub actions
    • 208e9e5 chore: update development dependencies
    • 8cf3be3 chore: update eslint
    • 7de4268 chore: update TypeScript
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump @types/node from 18.7.23 to 18.11.10

    Bump @types/node from 18.7.23 to 18.11.10

    Bumps @types/node from 18.7.23 to 18.11.10.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 0
Owner
Kevin Xiao
@uWaterloo alumnus for Computer Engineering
Kevin Xiao
Minimal framework for SSG (WIP, PoC)

Frostleaf https://zenn.dev/0918nobita/scraps/64a268583b8463 Development Install tools asdf plugin-add nodejs asdf plugin-add pnpm asdf install Install

0918nobita 7 Jun 4, 2022
Remix Stack for deploying to Vercel with remix-auth, Planetscale, Radix UI, TailwindCSS, formatting, linting etc. Written in Typescript.

Remix Synthwave Stack Learn more about Remix Stacks. npx create-remix --template ilangorajagopal/synthwave-stack What's in the stack Vercel deploymen

Ilango 56 Dec 25, 2022
NoExGen is a node.js express application generator with modern folder structure, namespace/project mapping and much more! It contains preconfigured Settings and Routing files, ready to be used in any project.

Installation $ npm install -g noexgen Quick Start You can use Node Package Execution to create your node-express application as shown below: Create th

Souvik Sen 7 Oct 8, 2022
Deploys a AWS Bastion Host preconfigured for Tailscale access.

cdk-tailscale-bastion This packages creates an AWS Bastion configured for Tailscale. This covers steps 1,2 & 4 of the Tailscale RDS guide. You may fin

JT 10 Dec 3, 2022
Sveltekit + Tauri Template

Skitty Template for building SvelteKit + Tauri (Skitty) Warning This project is supposed to be used temporary only (until svelte-add tauri has finishe

null 6 Jul 25, 2022
🚀 Battle-tested Next.js TypeScript Prisma template with an opinionated architecture. 🔋 Included ™️

?? The Ultimate Next.js Starter Pack Next.js ^12 + TypeScript + Prisma + Chakra UI starter packed with useful development features. I've adopted indus

Nam 7 Dec 10, 2022
Create a badge using GitHub Actions and GitHub Workflow CPU time

Generated Badges Create a badge using GitHub Actions and GitHub Workflow CPU time (no 3rd parties servers) Install $ npm i generated-badges -g Command

小弟调调™ 9 Dec 30, 2022
A Docusaurus website deployed to GitHub Pages using GitHub Actions.

Deploy Docusaurus website to GitHub Pages using GitHub Actions This repository is an example of deploying a Docusaurus website to GitHub Pages using G

Lars Gyrup Brink Nielsen 18 Dec 26, 2022
Stablo is a minimal blog website template built with Next.js, TailwindCSS & Sanity CMS

Stablo Blog Template - Next.js & Sanity CMS Stablo is a JAMStack Starter template built with Next.js, Tailwind CSS & Sanity CMS by Web3Templates. Clic

Web3Templates 159 Dec 30, 2022
An App for backing up and better displaying Onetab data Powered by Tauri.

Onetab Re 『Data is Priceless』 Onetab Re 是一款用于备份并原样展示Onetab数据的应用,基于 Tauri 跨平台构建,支持 Windows macOS Linux. 备份脚本使用方法 请先确认已经正确安装node.js 安装后打开软件的scripts目录, 为

ziyu 9 Nov 12, 2022
A toolkit to rapidly scaffold out a new tauri-apps project using the framework of their choice.

create-tauri-app Component Version create-tauri-app About Tauri Tauri is a polyglot and generic system that is very composable and allows engineers to

Tauri 408 Jan 4, 2023
A dockerfile to build ARM cross-compiler for Tauri (React Typescript)

tauri-arm A dockerfile to build a ARM cross-compiler for Tauri(React Typescript Template). MacOS Windows 10 Linux Setup $ yarn Installation Please bu

Shih-Cheng Huang 10 Sep 6, 2022
A Tauri update server, hosted as a Cloudflare edge function

Tauri Update Server: Cloudflare One-Click Deploy Click the button above, let Cloudflare walk you through: it's easy! Go to your forked repository, edi

KilleenCode 33 Dec 14, 2022
Markdown note maker (with Git sync) using Tauri.

Mediocre Markdown note maker (with Git sync) using Tauri. Screens Tech Stack Frontend Monaco Editor for the editor interface Chakra UI library Redux T

Nilay Savant 14 Dec 6, 2022
A Bilibili Cross-Platform Desktop Client Powered By Tauri

BBHouse 取自常见的『我在B站买了房』的评论 BBHouse 是一款 哔哩哔哩 的第三方应用,基于 Tauri 跨平台构建,支持 Windows macOS Linux. 核心功能 一个支持对视频动态分区展示的首页, 去除了B博和推荐流 一个支持无限添加的 (临时的) 稍后播放列表与配套的播放

ziyu 151 Dec 26, 2022
An opinionated template for creating a custom element.

<custom-element> element An opinionated template for creating a custom element. Installation You can install <custom-element> with npm, Yarn or pnpm.

Ryan Murphy 7 Jul 29, 2022
A highly opinionated and complete starter for Next.js projects ready to production

The aim for this starter is to give you a starting point with everything ready to work and launch to production. Web Vitals with 100% by default. Folder structure ready. Tooling ready. SEO ready. SSR ready.

Fukuro Studio 28 Nov 27, 2022
Opinionated Next.JS Boilerplate with TypeScript and Material-UI

Next.JS Boilerplate This is an opinionated Next.js boilerplate, with: Fully typed with TypeScript. Style/Theme engine and Icons from Material UI. Code

Rethunk.Tech, LLC. 4 Jun 28, 2022
An opinionated Next.js + Chakra + TypeScript starter

Nextjs + Chakra + Typescript Starter ✨ An opinionated Next.js + Chakra + TypeScript starter packed with: ⚡️ Next.js 12 ⚛️ React 18 ✨ TypeScript ?? Cha

jaclyn 3 Sep 17, 2022