diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..324db26
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: [marcreichel]
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..1dd0607
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,44 @@
+name: Publish
+
+on:
+ release:
+ types: [published]
+
+jobs:
+ publish-npm:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: ^16.0.0
+ registry-url: https://registry.npmjs.org/
+ - name: Check package version
+ uses: technote-space/package-version-check-action@v1
+ with:
+ COMMIT_DISABLED: 1
+ - run: npm ci
+ - run: npm run build
+ - run: npm publish --access public
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.npm_token }}
+ publish-github:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v1
+ with:
+ node-version: ^16.0.0
+ - name: Check package version
+ uses: technote-space/package-version-check-action@v1
+ with:
+ COMMIT_DISABLED: 1
+ - run: npm ci
+ - run: npm run build
+ - uses: actions/setup-node@v2
+ with:
+ node-version: ^16.0.0
+ registry-url: 'https://npm.pkg.github.com'
+ - run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a0f2b01
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/node_modules
+/.idea
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f030842
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Marc Reichel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7242a50
--- /dev/null
+++ b/README.md
@@ -0,0 +1,49 @@
+# Alpine Autosize
+
+![version](https://img.shields.io/github/v/tag/marcreichel/alpine-autosize?label=version)
+
+Automatically resize a `textarea` to fit its content.
+
+## Installation
+
+### CDN
+
+Include the following `
+```
+
+### NPM
+
+```shell
+npm install @marcreichel/alpine-autosize
+```
+
+Add the `x-autosize` directive to your project by importing the package **before** Alpine.js.
+
+```js
+import Alpine from 'alpinejs';
+import Autosize from '@marcreichel/alpine-autosize';
+
+Alpine.plugin(Autosize);
+
+window.Alpine = Alpine;
+window.Alpine.start();
+```
+
+## Usage
+
+To let the `textarea` automatically resize, add the `x-data` and `x-autosize` directives to the `