diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 00000000..53b710dd --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,86 @@ +# Lawnchair Website + +Welcome to Lawnchair contributing guidelines, this guide primarily focus on writing blogs/documentations to the website. + +## Prerequisite + +- Node runtime, at least Bun 1.3.0 or at least Node.js 20.19 +- Node dependencies (`npm i` or `npm ci` for CI environment) + +### Write from Markdown to HTML + +1. Setup page directory + Write your blog in markdown with [metadata](#metadata), create a folder inside `blog` and place it there. + +2. Build RSS feeds, sitemap and blog index, and your HTMLified markdown + Run `npm run build` to generate a sitemap, RSS feeds, blog selector and your HTMLified version of your markdown. + +3. Update live information (optional) + If you wish to signal to every Lawnchair client using live information announcement feature, add your entry to `live-information.json`. + +#### Custom components + +Lawnchair markdown renderer extends the current CommonMark specifications with these components: + * Lawnchair frontmatter + * Inline Table of Contents (ToC) at any location with `` (**inline ToC need compatible pages**, user override can disable toc globally by adding `?disabletoc=*` to the url param) + * Admonitions: Quote block starting with `> [!TIP/NOTE/IMPORTANT/WARNING/CAUTION]` [(same as GitHub-flavored alerts)](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts) + +##### Metadata + +###### Frontmatter + +If your markdown has frontmatter with `title` and `description`, they will be automatically used for the page's `` and meta description. Otherwise, `{{title}}` and `{{description}}` placeholders remain for you to fill in manually. + +Blog index, sitemap and RSS feed is automatically updated with blog entries using `last_modified` (default to `first_published`) or `first_published` (default to today) from frontmatter, for RSS feed the `title` and `description` will be omitted if none is specified. + +```yaml +--- +title: strings +description: strings +authors: + - array1 + - array2 +first_published: YYYY-MM-DD +last_modified: YYYY-MM-DD +--- +``` + +> [!NOTE] +> Date is always assumed in Central UTC+0/GMT-0 time + +> [!WARNING] +> The script generates the h1 heading and description paragraph from `title` and `description` for you, +> so you should **not** include a duplicate `# Heading title` in your markdown content. +> +> Authorship cards and `first_published` `last_modified` metadata are positioned below the generated title and description. + +##### Authorship + +Required when you specified an author in Frontmatter. + +```jsonc +{ + "authors": [ + { + "id": "generic", + "name": "Lawnchair Launcher Team", + "role": "Administrator", + "avatar": "/images/lawnchair.png", // Optional, supports URLs and local assets, and will not show an avatar when not specified + "links": { // Optional, will not show any social icon when not specified + "github": "https://github.com/lawnchairlauncher", + "x": "https://x.com/lawnchairapp", + "mastodon": "https://mastodon.social/@lawnchairapp" + /* To add your own socials, + search for iconMap in scripts/components/author-cards.js + and configure it so that icon will render correctly for your socials */ + } + } + ] +} +``` + +#### Testing + +To test the rendering of standards from CommonMark (CM), GitHub-Flavored Markdown (GFM), Lawnchair Frontmatter (LC-FM). + +Copy the `/scripts/test-blog` to `/blog` folder and build the documents to preview suite of test case. diff --git a/.github/README.md b/.github/README.md index 3ace7042..e95b62bd 100644 --- a/.github/README.md +++ b/.github/README.md @@ -9,3 +9,5 @@ If you are experiencing issues relating to Lawnchair or Lawnicons, please create Contributions are always welcome. If you feel inclined to, feel free to submit a pull request. In addition, you can also contribute by submitting issues. Please describe the issue with enough details and it will be solved as soon as possible. + +For more information see [contributing guide](CONTRIBUTING.md) diff --git a/.github/workflows/deploy_website.yml b/.github/workflows/deploy_website.yml index e10547af..e62dd664 100644 --- a/.github/workflows/deploy_website.yml +++ b/.github/workflows/deploy_website.yml @@ -9,11 +9,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out repository - uses: actions/checkout@v3 + uses: actions/checkout@v6.0.2 - name: Deploy website uses: SamKirkland/FTP-Deploy-Action@4.3.0 with: server: ${{ secrets.FTP_SERVER }} username: ${{ secrets.FTP_USERNAME }} password: ${{ secrets.FTP_PASSWORD }} - diff --git a/.gitignore b/.gitignore index 1a981074..8dfc9be8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .vscode/settings.json +node_modules/ +blog/test-blog/ .idea/ diff --git a/assets/common.css b/assets/common.css index f048ca7f..ccadf0eb 100644 --- a/assets/common.css +++ b/assets/common.css @@ -150,3 +150,9 @@ footer a:hover { display: none; } } + +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp { + user-select: none; +} diff --git a/assets/document.css b/assets/document.css index 7a4e36be..b98c7113 100644 --- a/assets/document.css +++ b/assets/document.css @@ -48,6 +48,105 @@ main h2 { border-bottom: 1px solid var(--surface-variant); } +.metadata { + margin-top: 0.25rem; + color: var(--on-surface-variant); + font-style: italic; +} + +.author-cards { + display: flex; + flex-wrap: wrap; + gap: 8px 14px; + margin: 0.25rem 0 6px; + align-items: center; +} + +.author-card { + display: flex; + align-items: flex-start; + gap: 10px; + padding: 0; + border-radius: 0; + background: transparent; + color: var(--on-surface); + box-shadow: none; + border: 0; + min-width: 220px; +} + +.author-avatar { + width: 40px; + height: 40px; + border-radius: 50%; + object-fit: cover; + border: 1px solid var(--outline-variant); + background: var(--surface-container-high); + flex: 0 0 auto; +} + +.author-content { + display: flex; + flex-direction: column; + gap: 2px; + line-height: 1.2; +} + +.author-name { + margin: 0; + font-weight: 600; + font-size: 0.95rem; + color: var(--primary); + line-height: 1.2; +} + +.author-role { + margin: 0; + color: var(--on-surface-variant); + font-size: 0.86rem; + font-weight: 400; + line-height: 1.2; +} + +.author-links { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-top: 2px; +} + +.author-links a { + font-size: 0.8rem; + color: var(--primary); + width: 28px; + height: 28px; + padding: 0; + border-radius: 999px; + background: var(--surface-container-highest); + border: 1px solid var(--outline-variant); + text-decoration: none; + border-bottom: 0; + display: inline-flex; + align-items: center; + justify-content: center; + line-height: 1.1; +} + +.author-links a img { + width: 16px; + height: 16px; + display: block; +} + +.author-name a { + text-decoration: none; +} + +.author-links a:hover { + border-bottom: 0; + filter: brightness(0.98); +} + main h3, main h4 { font-weight: 500; @@ -98,7 +197,196 @@ main a:visited { code { background: var(--surface-variant); + border-radius: var(--shape-m); + padding: 8px; + font-family: 'Google Sans Code', monospace; +} + +:not(pre) > code { border-radius: var(--shape-s); padding: 0 4px; - font-family: 'JetBrains Mono', 'Hack', 'Courier New', Courier, monospace; -} \ No newline at end of file +} + +pre { + background: var(--surface-variant); + border-radius: var(--shape-m); + padding: 16px; + overflow-x: auto; +} + +pre code { + background: transparent; + padding: 0; + font-size: 0.9em; + line-height: 1.5; +} + +blockquote { + background: var(--surface-container-high); + border-radius: var(--shape-s); + border-left: 5px solid var(--outline-variant); + margin: 1.5em 10px; + padding: 0.01em 10px; + margin-inline-start: 0; +} + +/* Highlight.js syntax colors */ +.hljs-keyword, +.hljs-selector-tag, +.hljs-built_in, +.hljs-name, +.hljs-tag { + color: var(--code-keyword); +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-literal, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-addition { + color: var(--code-string); +} + +.hljs-comment, +.hljs-quote, +.hljs-deletion, +.hljs-meta { + color: var(--code-comment); +} + +.hljs-number, +.hljs-regexp, +.hljs-symbol, +.hljs-variable, +.hljs-bullet, +.hljs-link { + color: var(--code-number); +} + +.hljs-attr, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: var(--code-attr); +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.markdown-alert { + background: var(--surface-container-high); + border-radius: var(--shape-s); + padding: 8px 16px; + margin: 10px 0px; +} + +.markdown-alert.markdown-alert-important { + border-left: 8px solid var(--tertiary-container); + color: var(--on-tertiary-container); +} + +.markdown-alert.markdown-alert-note { + border-left: 8px solid var(--secondary-container); + color: var(--on-secondary-container); +} + +.markdown-alert.markdown-alert-tip { + border-left: 8px solid var(--primary-container); + color: var(--on-primary-container); +} + +.markdown-alert.markdown-alert-warning, +.markdown-alert.markdown-alert-caution { + border-left: 8px solid var(--error-container); + color: var(--on-error-container); +} + +.markdown-alert .markdown-alert-title { + display: flex; + align-items: center; + gap: 0.5rem; + font-weight: 600; +} + +.markdown-alert-icon { + display: inline-flex; + align-items: center; + font-size: 1.25rem; +} + +.markdown-alert-note .markdown-alert-title { + color: var(--secondary); +} + +.markdown-alert-tip .markdown-alert-title { + color: var(--primary); +} + +.markdown-alert-important .markdown-alert-title { + color: var(--tertiary); +} + +.markdown-alert-warning .markdown-alert-title, +.markdown-alert-caution .markdown-alert-title { + color: var(--error); +} + +/* Tables */ +main table { + border-collapse: separate; + border-spacing: 0; + margin: 1rem 0; + font-size: 0.95rem; + border-radius: var(--shape-m); + overflow: hidden; + border: 1px solid var(--outline-variant); +} + +main th, +main td { + padding: 0.75rem 1rem; + border-bottom: 1px solid var(--outline-variant); + border-right: 1px solid var(--outline-variant); + text-align: left; +} + +main th:last-child, +main td:last-child { + border-right: none; +} + +main tr:last-child td { + border-bottom: none; +} + +main th { + background: var(--surface-container-high); + font-weight: 600; + color: var(--on-surface); +} + +main td { + background: var(--surface); +} + +main tr:hover td { + background: var(--surface-container); +} + +main th[align="center"], +main td[align="center"] { + text-align: center; +} + +main th[align="right"], +main td[align="right"] { + text-align: right; +} diff --git a/assets/m3/colors.css b/assets/m3/colors.css index bfda7536..e73fa09b 100644 --- a/assets/m3/colors.css +++ b/assets/m3/colors.css @@ -55,6 +55,11 @@ --lawnchair-green-on-color: rgb(255 255 255); --lawnchair-green-color-container: rgb(182 241 187); --lawnchair-green-on-color-container: rgb(0 33 10); + --code-keyword: #0550ae; + --code-string: #0a3069; + --code-comment: #6e7781; + --code-number: #953800; + --code-attr: #116329; } @media screen and (prefers-color-scheme: dark) { @@ -113,5 +118,10 @@ --lawnchair-green-on-color: rgb(0 57 21); --lawnchair-green-color-container: rgb(27 81 41); --lawnchair-green-on-color-container: rgb(182 241 187); + --code-keyword: #ff7b72; + --code-string: #a5d6ff; + --code-comment: #8b949e; + --code-number: #ffa657; + --code-attr: #7ee787; } } diff --git a/blog/blog.css b/blog/blog.css index 6badbe27..df58174d 100644 --- a/blog/blog.css +++ b/blog/blog.css @@ -14,9 +14,101 @@ figure figcaption { figure picture { border-radius: var(--shape-l); + overflow: hidden; } figure img { margin: auto; display: block; + max-height: 100%; + max-width: 100%; + transition: all .3s ease-in-out; +} + +figure img:hover { + transform: scale(1.1); +} + +@media screen and (prefers-color-scheme: dark) { + .dark-invert { + filter: invert(1) + } +} + +.fancy-links { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 6px; + padding: 0; + margin: 0; + margin-block: 0; +} + +.fancy-links li { + list-style: none; +} + +.fancy-link { + transition: filter 0.4s ease, border-radius 0.2s ease; + padding: 10px 16px; + border-radius: var(--shape-m); + width: 100%; + text-decoration: none; + min-width: 300px; + max-width: 300px; + display: flex; + align-items: center; + gap: 14px; +} + +.fancy-link:hover { + filter: brightness(0.9); + border-radius: var(--shape-xl); + border-bottom: 0; +} + +.fancy-link:focus { + filter: brightness(0.8); +} + +.fancy-link img { + width: 30px; + height: 30px; +} + +.fancy-link.mastodon { + background: var(--tertiary-container); + color: var(--on-tertiary-container); +} + +.fancy-link.twitter { + background: var(--secondary-container); + color: var(--on-secondary-container); +} + +.gallery ul { + display: flex; + gap: 1rem; + overflow-x: auto; + padding: 0; + margin: 0; + scroll-behavior: smooth; +} + +.gallery li { + flex: 0 0 auto; + list-style: none; +} + +.gallery img { + height: 300px; + width: auto; + display: block; + object-fit: cover; + border-radius: 8px; +} + +.gallery img:hover { + transform: scale(1.02) } \ No newline at end of file diff --git a/blog/feed.xml b/blog/feed.xml index f08d5632..9c2cfdf8 100644 --- a/blog/feed.xml +++ b/blog/feed.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> - <atom:link href="http://lawnchair.app/blog/rss.xml" rel="self" type="application/rss+xml" /> + <atom:link href="https://lawnchair.app/blog/feed.xml" rel="self" type="application/rss+xml" /> <title>Lawnchair Blogs https://lawnchair.app/blog/ Announcements and related posts by the Lawnchair team. @@ -9,35 +9,35 @@ Tue, 30 Dec 2025 00:00:00 GMT - Lawnchair 14 is here! - https://lawnchair.app/blog/lawnchair-14/ - https://lawnchair.app/blog/lawnchair-14/ - This blog highlights the major new features in Lawnchair 14. - Wed, 03 Apr 2024 08:20:00 GMT + Lawnstate: 2025 Year End Reflection + https://lawnchair.app/blog/lawnstate-2025-reflection/ + https://lawnchair.app/blog/lawnstate-2025-reflection/ + Let's talk about the year's progress and a sneak peek on Lawnchair 16. + Tue, 30 Dec 2025 00:00:00 GMT - - Lawnchair 15 Beta 1 is here! - https://lawnchair.app/blog/lawnchair-15-beta-1/ - https://lawnchair.app/blog/lawnchair-15-beta-1/ - This foundational release brings App Drawer Folders, an Android 15 rebase, and much more. - Mon, 14 Jul 2025 14:00:00 GMT - - Lawnstate: Building Momentum https://lawnchair.app/blog/lawnstate-building-momentum/ https://lawnchair.app/blog/lawnstate-building-momentum/ - The past, present, and future of Lawnchair. + Let's talk about the past, present, and future of Lawnchair. Wed, 23 Jul 2025 00:00:00 GMT - Lawnstate: 2025 Year End Reflection - https://lawnchair.app/blog/lawnstate-2025-reflection/ - https://lawnchair.app/blog/lawnstate-2025-reflection/ - Let's talk about the year's progress and a sneak peek on Lawnchair 16. - Tue, 30 Dec 2025 00:00:00 GMT + Lawnchair 15 Beta 1 is here! + https://lawnchair.app/blog/lawnchair-15-beta-1/ + https://lawnchair.app/blog/lawnchair-15-beta-1/ + This foundational release brings App Drawer Folders, an Android 15 rebase, and much more. + Mon, 14 Jul 2025 00:00:00 GMT + + + + Lawnchair 14 is here! + https://lawnchair.app/blog/lawnchair-14/ + https://lawnchair.app/blog/lawnchair-14/ + This blog highlights the major new features in Lawnchair 14. + Wed, 03 Apr 2024 00:00:00 GMT diff --git a/blog/index.html b/blog/index.html index 3c9247c1..433e01fc 100644 --- a/blog/index.html +++ b/blog/index.html @@ -1,44 +1,36 @@ - - - - - - + + + + Lawnchair Blogs - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -86,16 +43,13 @@ Support
-
- -

Lawnchair 15 Beta 1 is here!

-

Yes, that's right. After months of hard work, we're thrilled to release Lawnchair 15 Beta 1! You can download it today from our GitHub Releases page.

+

Lawnchair 15 Beta 1 is here!

This foundational release brings App Drawer Folders, an Android 15 rebase, and much more.

Lawnchair Launcher Team

Lawnchair Launcher Team

Organization

Yes, that's right. After months of hard work, we're thrilled to release Lawnchair 15 Beta 1! You can download it today from our GitHub Releases page.

This is a foundational release, bringing Lawnchair up to date with Android 15 and introducing some of our most requested features ever.

A Note on this beta

-

While this is a Beta release and stable enough for general use, you may still encounter some issues. We've documented the major known regressions (like Icon Badges) in the full changelog. If you see something wrong, please report it on our GitHub.

+

While this is a Beta release and stable enough for general use, you may still encounter some issues. We've documented the major known regressions (like Icon Badges) in the full changelog. If you see something wrong, please report it on our GitHub.

Highlights

Your app drawer, organized your way

-

This is the big one. We've finally added App Drawer Folders! You now have two powerful ways to organize your apps:

+

This is the big one. We've finally added App Drawer Folders! You now have two powerful ways to organize your apps:

+
+ - + - - \ No newline at end of file + + + \ No newline at end of file diff --git a/blog/lawnchair-15-beta-1/index.md b/blog/lawnchair-15-beta-1/index.md new file mode 100644 index 00000000..184a05ca --- /dev/null +++ b/blog/lawnchair-15-beta-1/index.md @@ -0,0 +1,86 @@ +--- +title: "Lawnchair 15 Beta 1 is here!" +description: "This foundational release brings App Drawer Folders, an Android 15 rebase, and much more." +authors: + - generic +first_published: 2025-07-14 +--- + +Yes, that's right. After months of hard work, we're thrilled to release **Lawnchair 15 Beta 1**! You can download it today from our [GitHub Releases page](https://github.com/LawnchairLauncher/lawnchair/releases/tag/v15.0.0-beta1). + +This is a foundational release, bringing Lawnchair up to date with Android 15 and introducing some of our most requested features ever. + +## A Note on this beta + +While this is a Beta release and stable enough for general use, you may still encounter some issues. We've documented the major known regressions (like Icon Badges) in the full changelog. If you see something wrong, please report it on our [GitHub](https://github.com/LawnchairLauncher/lawnchair/issues). + +## Highlights + +### Your app drawer, organized your way + +This is the big one. We've finally added **App Drawer Folders**! You now have two powerful ways to organize your apps: + +- **Manual Folders:** Create your own folders, name them whatever you want, and reorder them to create the perfect layout. +- **Caddy (Experimental):** For those who want a bit of magic, you can enable Caddy to automatically categorize your entire app drawer for you. + +
+ + Watch a video of App Drawer Folders in action + +
+ +
Example video of app drawer folder customization
+
+
+ +### Android 15 and a Modern Core + +A huge amount of effort went into rebasing Lawnchair on Launcher3 from Android 15. This brings a more stable, secure, and performant foundation to the launcher. It also means we're ready for core Android 15 features like Private Space and App Archiving. + +### A More Powerful Dock + +The dock gets a major upgrade in this release. You can now: + +- Add a background color and adjust its corner radius. +- Place widgets directly in the dock alongside your app icons. +- Enable icon labels for apps in the dock. + +
+ + + The dock with a custom green background, a widget, and a custom search bar. + +
Example image of dock customization
+
+ +### Expanded Search Options + +Search is now more flexible than ever. We've added support for custom web search engines in the app drawer, and added a host of new built-in providers, including Ecosia, Kagi, Firefox, and more. + +## The Road Ahead + +We're not stopping here. Now that the A15 rebase is complete, our next priorities will be tackling the known regressions (getting Icon Badges working again is at the top of the list, alongside other bugs relating to app drawer folders) and working through the feature requests that our new Triage Team is helping to organize. + +## Thanks + +This release was a massive effort, and it wouldn't be possible without the whole community. + +First, a huge thank you to our new **Lawnchair Triage Team**. In just a few days, this group of volunteers has already started to make a massive difference in helping us manage feedback. Their work is fundamentally changing how quickly we can develop. + +And as always, thanks to our core team members (TheSuperDragon, Yasan, MrSluffy, and Goooler), all our code contributors, our translators on Crowdin, and everyone who supports us on Open Collective. + +We can't wait to hear what you think of Lawnchair 15! + +Published by the Lawnchair Team on July 14, 2025 | 14:00 UTC diff --git a/blog/lawnstate-2025-reflection/index.html b/blog/lawnstate-2025-reflection/index.html index bca18bd2..74a4b3de 100644 --- a/blog/lawnstate-2025-reflection/index.html +++ b/blog/lawnstate-2025-reflection/index.html @@ -1,154 +1,39 @@ - - - - - - + + + + Lawnstate: 2025 Year End Reflection | Lawnchair Blogs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
@@ -158,130 +43,120 @@ Support
-
-

Lawnstate: Year End Reflection

-

Welcome back to Lawnstate! Happy holidays and advance happy new year as well from the team!

-

It's been a while since the last post, so we've got a lot to cover. We'll look at what we've accomplished and then take a peek at what's coming next.

-

Looking back on the years' achievements

-

This year was really about laying the groundwork for the future. We started things off with the release of Lawnchair 15 Beta 1, an important step in modernizing our codebase. The feedback from that release then directly lead us to the work that led to release we had a few days ago: Lawnchair 15 Beta 2.

-

This new beta is a stability-focused update. It's packed with bug fixes that address a lot of the common issues from Beta 1, while improving under-the-hood functionality to make things more stable and extensible. The goal is to provide a much more solid foundation for everyone.

-

A sneak peek on Lawnchair 16

-

While we've been polishing Lawnchair 15, a massive effort has been happening in the background on the 16-dev branch. Thanks to our new contributor and now core team member, @nullcube, we've completed the initial rebase of Lawnchair onto both the Android 16 and the QPR1 codebase. In other words, we're now working on Lawnchair 16!

-

This is a huge, complex job. For those that are tech-savvy, this is basically similar to upgrading an out-of-date Linux installation with the newest versions. For those that aren't, let's just say that, we replace the older, slightly dusty car engine with the very latest from the manufacturer (aka AOSP).

-

This also allows us to actually implement proper foldable and tablet support in the launcher!

-

Now, pictures describe a lot more than words, so below is a gallery describing some of the upcoming features of Lawnchair 16:

- - - -

If you're brave enough to test, you can download these builds right now from the GitHub Actions tab on our repository. As stated before, this is a completely new foundation and things there can become very unstable, so test at your own discretion.

-

Across the ecosystem

-

Now, Lawnchair doesn't exist in a vacuum. We have other related projects that have seen excellent progress.

-

Lawnicons

-

Thanks to @x9136's work and community contributions, we were able to increase the icon count from 6700 icons to 7581 icons in the latest release! That's a lot of icons over a span of around five months.

-

Alongside that, we are now launching a beta version of the new Lawnicons request dashboard! This will make things significantly easier for contributors to view the list of unthemed icons and help grow the icon pack even faster.

- -
- - - Screenshot of the Lawnicons request dashboard - -
The Lawnicons requests dashboard! Click the image to check it out!
-
-
-

Social media

-

Yes, that's right. We plan on being more active again on our social media. Starting next year, we plan to be more active on our X (Twitter) and our newly created Mastodon account! Go give us a follow if you haven't already.

- -

Regarding support

-

Now, we are well aware that support regarding certain issues in the launcher can be a bit... inconsistent, to say the least. As such, we're taking a few steps to professionalize the project and make this better:

- -

This is one of the few steps we are taking to professionalize the project. Stay tuned over at our social media to find out more!

-

Thank you to everyone!

-

As always, a huge thank you to everyone, including:

- -

Even simply sharing your home screen setups and spreading word about Lawnchair helps make our community grow!

-

Once again, advance Happy New Year from the Lawnchair team!

-

— TheSuperDragon, from the Lawnchair team

-

Published on December 30, 2025

-
+

Lawnstate: 2025 Year End Reflection

Let's talk about the year's progress and a sneak peek on Lawnchair 16.

First published: December 30, 2025

TheSuperDragon

Lawnchair developer

Welcome back to Lawnstate! Happy holidays and advance happy new year as well from the team!

+

It's been a while since the last post, so we've got a lot to cover. We'll look at what we've accomplished and then take a peek at what's coming next.

+

Looking back on the years' achievements

+

This year was really about laying the groundwork for the future. We started things off with the release of Lawnchair 15 Beta 1, an important step in modernizing our codebase. The feedback from that release then directly lead us to the work that led to release we had a few days ago: Lawnchair 15 Beta 2.

+

This new beta is a stability-focused update. It's packed with bug fixes that address a lot of the common issues from Beta 1, while improving under-the-hood functionality to make things more stable and extensible. The goal is to provide a much more solid foundation for everyone.

+

A sneak peek on Lawnchair 16

+

While we've been polishing Lawnchair 15, a massive effort has been happening in the background on the 16-dev branch. Thanks to our new contributor and now core team member, @nullcube, we've completed the initial rebase of Lawnchair onto both the Android 16 and the QPR1 codebase. In other words, we're now working on Lawnchair 16!

+

This is a huge, complex job. For those that are tech-savvy, this is basically similar to upgrading an out-of-date Linux installation with the newest versions. For those that aren't, let's just say that, we replace the older, slightly dusty car engine with the very latest from the manufacturer (aka AOSP).

+

This also allows us to actually implement proper foldable and tablet support in the launcher!

+

Now, pictures describe a lot more than words, so below is a gallery describing some of the upcoming features of Lawnchair 16:

+ + +

If you're brave enough to test, you can download these builds right now from the GitHub Actions tab on our repository. As stated before, this is a completely new foundation and things there can become very unstable, so test at your own discretion.

+

Across the ecosystem

+

Now, Lawnchair doesn't exist in a vacuum. We have other related projects that have seen excellent progress.

+

Lawnicons

+

Thanks to @x9136's work and community contributions, we were able to increase the icon count from 6700 icons to 7581 icons in the latest release! That's a lot of icons over a span of around five months.

+

Alongside that, we are now launching a beta version of the new Lawnicons request dashboard! This will make things significantly easier for contributors to view the list of unthemed icons and help grow the icon pack even faster.

+ +
+ + + Screenshot of the Lawnicons request dashboard + +
The Lawnicons requests dashboard! Click the image to check it out!
+
+
+ +

Social media

+

Yes, that's right. We plan on being more active again on our social media. Starting next year, we plan to be more active on our X (Twitter) and our newly created Mastodon account! Go give us a follow if you haven't already.

+ + +

Regarding support

+

Now, we are well aware that support regarding certain issues in the launcher can be a bit... inconsistent, to say the least. As such, we're taking a few steps to professionalize the project and make this better:

+ +

This is one of the few steps we are taking to professionalize the project. Stay tuned over at our social media to find out more!

+

Thank you to everyone!

+

As always, a huge thank you to everyone, including:

+ +

Even simply sharing your home screen setups and spreading word about Lawnchair helps make our community grow!

+

Once again, advance Happy New Year from the Lawnchair team!

+
- + + + - - + + + \ No newline at end of file diff --git a/blog/lawnstate-2025-reflection/index.md b/blog/lawnstate-2025-reflection/index.md new file mode 100644 index 00000000..ed706df0 --- /dev/null +++ b/blog/lawnstate-2025-reflection/index.md @@ -0,0 +1,130 @@ +--- +title: "Lawnstate: 2025 Year End Reflection" +description: "Let's talk about the year's progress and a sneak peek on Lawnchair 16." +authors: + - TheSuperDragon +first_published: 2025-12-30 +--- + +Welcome back to Lawnstate! Happy holidays and advance happy new year as well from the team! + +It's been a while since the last post, so we've got a lot to cover. We'll look at what we've accomplished and then take a peek at what's coming next. + +## Looking back on the years' achievements + +This year was really about laying the groundwork for the future. We started things off with the release of Lawnchair 15 Beta 1, an important step in modernizing our codebase. The feedback from that release then directly lead us to the work that led to release we had a few days ago: **[Lawnchair 15 Beta 2](https://github.com/LawnchairLauncher/lawnchair/releases/tag/v15.0.0-beta2)**. + +This new beta is a stability-focused update. It's packed with bug fixes that address a lot of the common issues from Beta 1, while improving under-the-hood functionality to make things more stable and extensible. The goal is to provide a much more solid foundation for everyone. + +## A sneak peek on Lawnchair 16 + +While we've been polishing Lawnchair 15, a massive effort has been happening in the background on the `16-dev` branch. Thanks to our new contributor and now core team member, [@nullcube](https://github.com/validcube), we've completed the initial rebase of Lawnchair onto both the Android 16 *and* the QPR1 codebase. In other words, we're now working on **Lawnchair 16**! + +This is a huge, complex job. For those that are tech-savvy, this is basically similar to upgrading an out-of-date Linux installation with the newest versions. For those that aren't, let's just say that, we replace the older, slightly dusty car engine with the very latest from the manufacturer (aka AOSP). + +This also allows us to actually implement proper foldable and tablet support in the launcher! + +Now, pictures describe a lot more than words, so below is a gallery describing some of the upcoming features of Lawnchair 16: + + + +If you're brave enough to test, you can download these builds right now from the GitHub Actions tab on our repository. As stated before, this is a completely new foundation and things there can become *very unstable*, so test at your own discretion. + +## Across the ecosystem + +Now, Lawnchair doesn't exist in a vacuum. We have other related projects that have seen excellent progress. + +### Lawnicons + +Thanks to [@x9136](https://github.com/x9136)'s work and community contributions, we were able to increase the icon count from 6700 icons to **7581 icons** in the latest release! That's a *lot* of icons over a span of around five months. + +Alongside that, we are now launching a beta version of the new **Lawnicons request dashboard!** This will make things significantly easier for contributors to view the list of unthemed icons and help grow the icon pack even faster. + + +
+ + + Screenshot of the Lawnicons request dashboard + +
The Lawnicons requests dashboard! Click the image to check it out!
+
+
+ +### Social media + +Yes, that's right. We plan on being more active again on our social media. Starting next year, we plan to be more active on our X (Twitter) and our newly created Mastodon account! Go give us a follow if you haven't already. + + + +### Regarding support + +Now, we are well aware that support regarding certain issues in the launcher can be a bit... *inconsistent*, to say the least. As such, we're taking a few steps to professionalize the project and make this better: + +- If you haven't noticed in the navigation bar above, we now have [a support page](/support) to centralize support requests! +- Regarding [the FAQ](/faq), we will slowly update its contents and add a few QoL features to improve its usability. +- We are also re-evaluating the effectiveness of our triage team to manage the huge number of issues and discussions on GitHub. + +This is one of the few steps we are taking to professionalize the project. Stay tuned over at our social media to find out more! + +### Thank you to everyone! + +As always, a huge thank you to everyone, including: + +- our [code contributors at GitHub](https://github.com/LawnchairLauncher/lawnchair) who implemented new features and fixed bugs; +- our [translators at Crowdin](https://lawnchair.crowdin.com/) who helped make Lawnchair more accessible to everyone, and; +- our [donors at Open Collective](https://opencollective.com/lawnchair) who directly help us fund hardware investments and contributor grants. + +Even simply sharing your home screen setups and spreading word about Lawnchair helps make our community grow! + +Once again, advance Happy New Year from the Lawnchair team! diff --git a/blog/lawnstate-building-momentum/index.html b/blog/lawnstate-building-momentum/index.html index 17c21f34..9e4ed907 100644 --- a/blog/lawnstate-building-momentum/index.html +++ b/blog/lawnstate-building-momentum/index.html @@ -1,53 +1,39 @@ - - - - - - + + + + - Lawnstate: Building momentum | Lawnchair Blogs - - - - - - - + Lawnstate: Building Momentum | Lawnchair Blogs + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + +
@@ -57,21 +43,19 @@ Support
-
-

Lawnstate: Building Momentum

-

Hello everyone.

-

For a while, the project felt stagnant. Progress was slow, and it often felt like we were waiting for something to happen. That's changing. In the last few weeks, we’ve taken more active leadership to inject new energy into Lawnchair, and the release of Lawnchair 15 Beta 1 is just the first step.

+

Lawnstate: Building Momentum

Let's talk about the past, present, and future of Lawnchair.

TheSuperDragon

Lawnchair developer

Hello everyone.

+

For a while, the project felt stagnant. Progress was slow, and it often felt like we were waiting for something to happen. That's changing. In the last few weeks, we’ve taken more active leadership to inject new energy into Lawnchair, and the release of Lawnchair 15 Beta 1 is just the first step.

Welcome to Lawnstate, a blog that will now be a regular check-in on our progress, our challenges, and our path forward. No more long silences.

The Release: Lawnchair 15 Beta 1 is Here

-

Our first priority was to get L15B1 out the door. It’s a massive update, built on the Android 15 codebase, and it lays the foundation for everything that comes next. We focused on core features you've been asking for, like creating folders directly in the app drawer and adding new customization options for the dock.

+

Our first priority was to get L15B1 out the door. It’s a massive update, built on the Android 15 codebase, and it lays the foundation for everything that comes next. We focused on core features you've been asking for, like creating folders directly in the app drawer and adding new customization options for the dock.

Crucially, this release was the first major test of our new Lawnchair Triage Team. By efficiently managing the influx of reports on GitHub, they are clearing out duplicate issues and ensuring community feedback gets to the right place. This foundation is critical for allowing us to move faster.

The Ecosystem: Lawnicons, Funding, and Our Strategy

-

Lawnchair doesn't exist in a vacuum. The health of our entire ecosystem is key to our success.

+

Lawnchair doesn't exist in a vacuum. The health of our entire ecosystem is key to our success.

Lawnicons

Our companion icon pack, Lawnicons, continues its active development. The latest release, v2.14.1, redesigned the app to use Material 3 Expressive and brought our total icon count to over 6,700. The team (particularly x9136) is taking a short, well-deserved break and will resume accepting contributions in August while we investigate some minor stability issues in the app.

Our Financial Strategy

-

Thanks to your incredible generosity, our Open Collective now has a healthy balance of over $1,700 USD. We've finalized our strategy for these funds, focusing on transparency and impact.

-

Our first principle is prudence. We will cover all operational costs, like web hosting, to ensure sustainability. Beyond that, our strategy is to reinvest directly into the project's velocity.

+

Thanks to your incredible generosity, our Open Collective now has a healthy balance of over $1,700 USD. We've finalized our strategy for these funds, focusing on transparency and impact.

+

Our first principle is prudence. We will cover all operational costs, like web hosting, to ensure sustainability. Beyond that, our strategy is to reinvest directly into the project's velocity.

We will be running small, transparent experiments to see how we can best use funds to remove development bottlenecks. This could mean investing in a piece of hardware that demonstrably cuts down build times, or acquiring specific devices for testing. Every strategic expense will be discussed internally and its results shared with the community.

We believe this approach—investing in our own infrastructure—delivers more value than a simple bounty system, which we will not be pursuing. Our goal is to turn your contributions into faster, better releases.

The Road Ahead

@@ -80,29 +64,20 @@

The Road Ahead

In parallel, we are supporting our core contributors who are tackling the deeper, long-term challenges, such as the future Android 16 rebase. This division of labor allows us to make progress on all fronts simultaneously, ensuring the next Lawnchair release is a major step forward in both stability and features.


Thank you for being here and for believing in the project.

-

— TheSuperDragon, from the Lawnchair team

-

Published on July 23, 2025

-
+
- + + + - - + + + \ No newline at end of file diff --git a/blog/lawnstate-building-momentum/index.md b/blog/lawnstate-building-momentum/index.md new file mode 100644 index 00000000..72893c0a --- /dev/null +++ b/blog/lawnstate-building-momentum/index.md @@ -0,0 +1,49 @@ +--- +title: "Lawnstate: Building Momentum" +description: "Let's talk about the past, present, and future of Lawnchair." +authors: + - TheSuperDragon +last_modified: 2025-07-23 +--- + +Hello everyone. + +For a while, the project felt stagnant. Progress was slow, and it often felt like we were waiting for something to happen. That's changing. In the last few weeks, we’ve taken more active leadership to inject new energy into Lawnchair, and the release of Lawnchair 15 Beta 1 is just the first step. + +Welcome to Lawnstate, a blog that will now be a regular check-in on our progress, our challenges, and our path forward. No more long silences. + +## The Release: Lawnchair 15 Beta 1 is Here + +Our first priority was to get L15B1 out the door. It’s a massive update, built on the Android 15 codebase, and it lays the foundation for everything that comes next. We focused on core features you've been asking for, like creating folders directly in the app drawer and adding new customization options for the dock. + +Crucially, this release was the first major test of our new Lawnchair Triage Team. By efficiently managing the influx of reports on GitHub, they are clearing out duplicate issues and ensuring community feedback gets to the right place. This foundation is critical for allowing us to move faster. + +## The Ecosystem: Lawnicons, Funding, and Our Strategy + +Lawnchair doesn't exist in a vacuum. The health of our entire ecosystem is key to our success. + +### Lawnicons + +Our companion icon pack, Lawnicons, continues its active development. The latest release, **v2.14.1**, redesigned the app to use Material 3 Expressive and brought our total icon count to over 6,700. The team (particularly [x9136](https://github.com/x9136)) is taking a short, well-deserved break and will resume accepting contributions in August while we investigate some minor stability issues in the app. + +### Our Financial Strategy + +Thanks to your incredible generosity, our Open Collective now has a healthy balance of over **$1,700 USD**. We've finalized our strategy for these funds, focusing on transparency and impact. + +Our first principle is **prudence**. We will cover all operational costs, like web hosting, to ensure sustainability. Beyond that, our strategy is to **reinvest directly into the project's velocity**. + +We will be running small, transparent experiments to see how we can best use funds to remove development bottlenecks. This could mean investing in a piece of hardware that demonstrably cuts down build times, or acquiring specific devices for testing. Every strategic expense will be discussed internally and its results shared with the community. + +We believe this approach—investing in our own infrastructure—delivers more value than a simple bounty system, which we will not be pursuing. Our goal is to turn your contributions into faster, better releases. + +## The Road Ahead + +Our development path is clear and focused on building significant new value. While the current Beta is stable, we know there are bugs and regressions to address. These fixes will be bundled into our next major update. + +Our main effort is a **User Experience Overhaul.** This is where I'll be focusing my development time. The work involves a deep architectural refactor of core systems like **Search** to make them faster and more extensible, and a major push to improve the UI/UX of our settings and other interfaces. + +In parallel, we are supporting our core contributors who are tackling the deeper, long-term challenges, such as the future **Android 16** rebase. This division of labor allows us to make progress on all fronts simultaneously, ensuring the next Lawnchair release is a major step forward in both stability and features. + +--- + +Thank you for being here and for believing in the project. diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000..8fe06a2f --- /dev/null +++ b/bun.lock @@ -0,0 +1,128 @@ +{ + "lockfileVersion": 1, + "configVersion": 0, + "workspaces": { + "": { + "name": "lawnchair-site", + "dependencies": { + "highlight.js": "^11.11.1", + "jsdom": "^27.0.0", + "marked": "^17.0.1", + "marked-footnote": "^1.4.0", + "marked-highlight": "^2.2.3", + "yaml-front-matter": "^4.1.1", + }, + }, + }, + "packages": { + "@acemir/cssom": ["@acemir/cssom@0.9.31", "", {}, "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA=="], + + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@4.1.1", "", { "dependencies": { "@csstools/css-calc": "^2.1.4", "@csstools/css-color-parser": "^3.1.0", "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4", "lru-cache": "^11.2.4" } }, "sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ=="], + + "@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@6.7.7", "", { "dependencies": { "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.1.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.2.5" } }, "sha512-8CO/UQ4tzDd7ula+/CVimJIVWez99UJlbMyIgk8xOnhAVPKLnBZmUFYVgugS441v2ZqUq5EnSh6B0Ua0liSFAA=="], + + "@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="], + + "@csstools/color-helpers": ["@csstools/color-helpers@5.1.0", "", {}, "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA=="], + + "@csstools/css-calc": ["@csstools/css-calc@2.1.4", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@3.1.0", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "@csstools/css-calc": "^2.1.4" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA=="], + + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.5", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ=="], + + "@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.0.26", "", {}, "sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA=="], + + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], + + "@exodus/bytes": ["@exodus/bytes@1.10.0", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-tf8YdcbirXdPnJ+Nd4UN1EXnz+IP2DI45YVEr3vvzcVTOyrApkmIB4zvOQVd3XPr7RXnfBtAx+PXImXOIU0Ajg=="], + + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + + "commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + + "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], + + "cssstyle": ["cssstyle@5.3.7", "", { "dependencies": { "@asamuzakjp/css-color": "^4.1.1", "@csstools/css-syntax-patches-for-csstree": "^1.0.21", "css-tree": "^3.1.0", "lru-cache": "^11.2.4" } }, "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ=="], + + "data-urls": ["data-urls@6.0.1", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^15.1.0" } }, "sha512-euIQENZg6x8mj3fO6o9+fOW8MimUI4PpD/fZBhJfeioZVy9TUpM4UY7KjQNVZFlqwJ0UdzRDzkycB997HEq1BQ=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="], + + "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + + "js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": "bin/js-yaml.js" }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + + "jsdom": ["jsdom@27.4.0", "", { "dependencies": { "@acemir/cssom": "^0.9.28", "@asamuzakjp/dom-selector": "^6.7.6", "@exodus/bytes": "^1.6.0", "cssstyle": "^5.3.4", "data-urls": "^6.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "parse5": "^8.0.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.0", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^15.1.0", "ws": "^8.18.3", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ=="], + + "lru-cache": ["lru-cache@11.2.5", "", {}, "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw=="], + + "marked": ["marked@17.0.1", "", { "bin": "bin/marked.js" }, "sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg=="], + + "marked-footnote": ["marked-footnote@1.4.0", "", { "peerDependencies": { "marked": ">=7.0.0" } }, "sha512-fZTxAhI1TcLEs5UOjCfYfTHpyKGaWQevbxaGTEA68B51l7i87SctPFtHETYqPkEN0ka5opvy4Dy1l/yXVC+hmg=="], + + "marked-highlight": ["marked-highlight@2.2.3", "", { "peerDependencies": { "marked": ">=4 <18" } }, "sha512-FCfZRxW/msZAiasCML4isYpxyQWKEEx44vOgdn5Kloae+Qc3q4XR7WjpKKf8oMLk7JP9ZCRd2vhtclJFdwxlWQ=="], + + "mdn-data": ["mdn-data@2.12.2", "", {}, "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + + "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + + "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + + "tldts": ["tldts@7.0.19", "", { "dependencies": { "tldts-core": "^7.0.19" }, "bin": "bin/cli.js" }, "sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA=="], + + "tldts-core": ["tldts-core@7.0.19", "", {}, "sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A=="], + + "tough-cookie": ["tough-cookie@6.0.0", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w=="], + + "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], + + "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], + + "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], + + "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + + "whatwg-url": ["whatwg-url@15.1.0", "", { "dependencies": { "tr46": "^6.0.0", "webidl-conversions": "^8.0.0" } }, "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g=="], + + "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + + "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], + + "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + + "yaml-front-matter": ["yaml-front-matter@4.1.1", "", { "dependencies": { "commander": "^6.2.0", "js-yaml": "^3.14.1" }, "bin": "bin/js-yaml-front.js" }, "sha512-ULGbghCLsN8Hs8vfExlqrJIe8Hl2TUjD7/zsIGMP8U+dgRXEsDXk4yydxeZJgdGiimP1XB7zhmhOB4/HyfqOyQ=="], + + "data-urls/whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], + } +} diff --git a/faq/faq.md b/faq/faq.md index f8db5acb..01c1eac6 100644 --- a/faq/faq.md +++ b/faq/faq.md @@ -1,8 +1,12 @@ +--- +last_modified: 2025-07-14 +--- + # Lawnchair FAQ Welcome to the Lawnchair FAQ! This page provides answers to frequently asked questions about projects relating to Lawnchair, including Lawnicons. -Last updated: July 14, 2025 + ## Getting started diff --git a/faq/index.html b/faq/index.html index fb74b07a..b5beb064 100644 --- a/faq/index.html +++ b/faq/index.html @@ -1,42 +1,37 @@ - - - - - - - - - + + + + + + Lawnchair FAQ - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - + - - - - - - - + + + + + + +