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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions components/FfCardPdk.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<!--
Information card

Use to present chunks of short information such as a member profile or project
summary

The card image has to passed as HTML in a named slot due to Vite/Nuxt
limitations, which effectively prevent passing an image name as prop.
See https://github.com/nuxt/nuxt/issues/14766 for a discussion.

Style guide reference: Web components/Cards/Information card
-->
<template>
<div class="max-w-[450px] mx-auto">
<div class="relative mx-auto h-[155px] w-[350px]">
<img :src="img" class="h-[155px] w-[350px] object-contain" />
</div>
<div class="text-center">
<FfH3 class="text-ultraviolet font-black">{{ headline }}</FfH3>
<FfParaExcerpt v-if="subheading" class="mt-10 text-ultraviolet">
{{ subheading }}
</FfParaExcerpt>
<FfParaExcerpt class="text-warm-black mt-10">
<slot></slot>
</FfParaExcerpt>
</div>
</div>
</template>


<script setup lang="ts">
export interface Props {
// Image
img?: string

headline: string
subheading?: string
}

defineProps<Props>()
</script>
43 changes: 43 additions & 0 deletions components/FfCardPlugin.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!--
Signpost card

Use as a signpost to another page or post

Style guide reference: Web components/Cards/Signpost card
-->
<template>
<NuxtLink class="bg-white">
<div :to="linkTo" :title="linkTitle" :target="linkTarget">
<FfH3 class="border-b-4 border-ultraviolet" >
{{ headline }}
</FfH3>
<FfParaExcerpt v-if="subheading" class="mt-10">
{{ subheading }}
</FfParaExcerpt>
<FfParaExcerpt class="text-warm-black mt-10">
<slot></slot>
</FfParaExcerpt>
</div>
</NuxtLink>
</template>

<script setup lang="ts">
export interface Props {
// Image
img?: string
// Make the header image cover the whole image area (unproportional scaling).
imgObjectCover?: boolean

headline: string
subheading?: string

// Link-related properties. No link is set if linkTo is undefined.
linkTo?: string
linkTitle?: string
linkTarget?: string
}

withDefaults(defineProps<Props>(), {
imgObjectCover: true
})
</script>
48 changes: 48 additions & 0 deletions components/FfCardTestimonial.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<!--
Information card

Use to present chunks of short information such as a member profile or project
summary

The card image has to passed as HTML in a named slot due to Vite/Nuxt
limitations, which effectively prevent passing an image name as prop.
See https://github.com/nuxt/nuxt/issues/14766 for a discussion.

Style guide reference: Web components/Cards/Information card
-->
<template>
<NuxtLink :to="linkTo" :title="linkTitle" :target="linkTarget" class="hover:shadow-low bg-white">
<div class="max-w-[350px] mx-auto">
<div class="relative mx-auto h-[155px] w-[350px]">
<img :src="img" class="h-[155px] w-[350px] object-contain" />
</div>
<div class="text-center">
<FfH3 class="text-ultraviolet font-black">{{ headline }}</FfH3>
<FfParaExcerpt v-if="subheading" class="mt-10 text-ultraviolet">
{{ subheading }}
</FfParaExcerpt>
<FfParaExcerpt class="text-warm-black mt-10">
<slot></slot>
</FfParaExcerpt>
</div>
</div>
</NuxtLink>
</template>


<script setup lang="ts">
export interface Props {
// Image
img?: string

headline: string
subheading?: string

// Link-related properties. No link is set if linkTo is undefined.
linkTo?: string
linkTitle?: string
linkTarget?: string
}

defineProps<Props>()
</script>
20 changes: 20 additions & 0 deletions components/FfHeaderLibreLane.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!--
Hero page header

Display only on the homepage

Style guide reference: Web components/Page headers/Hero
-->
<template>
<div class="bg-white bg-cover text-white">
<FfContainer>

<img class="max-w-[1000px]" alt="LibreLane" src="/librelane/images/librelane-logo-full.svg" />
<FfH1 class="max-w-[800px] text-ultraviolet">
A powerful and versatile ASIC infrastructure library
</FfH1>

</FfContainer>
</div>
</template>

38 changes: 38 additions & 0 deletions components/FfLibreLane.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<!--
LibreLane
-->
<template>
<!--
Signpost with large icon.
https://fossi-foundation.zeroheight.com/styleguide/s/72268/p/53507c-signposts
-->

<FfContainer>

<div class="flex flex-col mb-32 tablet:flex-row my-24 tablet:my-48 desktop:my-64">
<div class="basis-1/2">
<IconPhCpu class="text-ultraviolet mx-auto text-[100px] tablet:text-[150px]" />
</div>
<div class="basis-1/2">
<FfH3>
Chip design is hard. LibreLane makes it easy.
</FfH3>
<FfPara>
LibreLane enables educators, researchers, hobbyists, and industry professionals alike to create manufacturable chips.

Be a part of ... join today!
</FfPara>
<FfBtnCta linkTo="https://librelane.readthedocs.io/en/stable/installation/index.html">Install LibreLane Now</FfBtnCta>
</div>
</div>

</FfContainer>

</template>

<script setup>
import IconPhPolygon from '~icons/ph/polygon-bold'
import IconPhUsersThree from '~icons/ph/users-three-bold'
import IconPhChatsCircle from '~icons/ph/chats-circle-bold'
import IconPhCpu from '~icons/ph/cpu-bold'
</script>
31 changes: 31 additions & 0 deletions components/FfLibreLaneNews.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!--
Homepage
-->
<template>

<!--
News
-->
<div class="bg-pastel-grey">
<FfContainer class="py-32 bg-pastel-grey">
<FfH3 class="text-warm-black text-center mx-auto mb-32">
Latest LibreLane News
</FfH3>

<FfCards>
<FfBlogPostCard v-for="post in blogPosts" :post="post" />
</FfCards>
</FfContainer>
</div>

</template>

<script setup>
// Get the three most recent blog posts
const blogPosts = await queryContent('/librelane/blog')
.sort({date: -1 }) // show latest articles first
.where({_partial: false })
.where({ _id: { $ne: 'content:librelane:blog:index.md' } }) // Filter out the blog overview page.
.limit(3)
.find()
</script>
58 changes: 58 additions & 0 deletions components/FfLibreLaneNewsOverview.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<!--
News homepage (blog overview)

TODO:
- Instead of showing all blog posts as cards, show only a subset and link to
an archive or a way to load more posts.
- Highlight blog posts in various categories, e.g., ECL posts.
-->
<template>
<!-- Latest (featured) blog post, shown large, if available -->
<div v-if="featuredBlogPost" class="bg-pastel-grey">
<FfContainer>
<ContentRenderer :value="featuredBlogPost" :excerpt="true">
<!-- Using the Content blocks/Image & text component. -->
<div class="flex flex-col tablet:flex-row my-auto py-24 tablet:py-64">
<div class="flex-auto">
<FfH3>Latest news</FfH3>
<NuxtLink :to="featuredBlogPost._path">
<FfH2 :href="featuredBlogPost._path">{{ featuredBlogPost.title }}</FfH2>
<ContentRendererMarkdown :value="featuredBlogPost" :excerpt="true" />
</NuxtLink>
<p>
<FfLinkUnderline v-if="featuredBlogPost._path" :to="featuredBlogPost._path">Read more ...</FfLinkUnderline>
</p>
</div>
<div class="flex-none max-w-[344px] order-first tablet:order-none">
<NuxtLink :to="featuredBlogPost._path">
<NuxtImg class="w-max" v-if="featuredBlogPost.coverImage" :src="featuredBlogPost.coverImage"/>
<NuxtImg class="w-max" v-else src="/images/pattern-guardianship.png"/>
</NuxtLink>
</div>
</div>
</ContentRenderer>
</FfContainer>
</div>

<FfContainer>
<!-- A selection of blog posts posts displayed as cards -->
<FfCards>
<FfBlogPostCard v-for="post in blogPosts" :post="post" />
</FfCards>
</FfContainer>
</template>

<script setup lang="ts">
// Get all blog posts.
const blogPosts = await queryContent('librelane/blog')
.sort({ date: -1 }) // show latest articles first
.where({ _partial: false })
.where({ _id: { $ne: 'content:librelane:blog:index.md' } }) // Filter out this page.
.only(["title", "excerpt", "coverImage", "_path"])
.find()

// Designate the most recent blog post as "featured", remove it from the list
// of posts.
const featuredBlogPost = blogPosts.shift()

</script>
9 changes: 9 additions & 0 deletions content/about-us/people/_people.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,15 @@ people:
email: dan@fossi-foundation.org
linkedInUrl: https://www.linkedin.com/in/danpetrisko/

- name: Leo Moser
subheading:
img: /about-us/people/LeoMoser.jpg
about: "Leo Moser is an open source silicon advocate and aspiring chip designer. He is a LibreLane developer and has contributed to several of the open source PDKs. He has also designed several open-source chips himself, including Greyhound: a RISC-V SoC with embedded FPGA."
socialLinks:
email: leo@fossi-foundation.org
linkedInUrl: https://www.linkedin.com/in/leo-moser
githubUrl: https://github.com/mole99/

- name: Matt Venn
subheading: Director
img: /about-us/people/MattVenn.jpg
Expand Down
20 changes: 20 additions & 0 deletions content/librelane/blog/2026-02-26-welcome.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
layout: post
title: "Welcome to LibreLane"
description: ""
category:
tags: []
author: Leo Moser & Mohamed 'Donn' Gaber
date: 2026-02-26
---

**Welcome to LibreLane.**

We are proud to announce the launch of the [LibreLane website](https://librelane.org), which showcases the principles and capabilities of LibreLane to the world.
This marks the moment when we have truly settled into the new development environment with community contributors and maintainers under the umbrella of the FOSSi Foundation.

It has been [a long journey](/blog/2025-08-17-librelane/). From the shutdown of Efabless. to forking of OpenLane 2, to setting up all of the development infrastructure, until we finally could work on new LibreLane features and improvements again. And we have been busy...

Along with this website, we are releasing **LibreLane 3.0**!

Read more about it here: [LibreLane 3.0 Release](/librelane/blog/2026-02-27-release-3-0/)
37 changes: 37 additions & 0 deletions content/librelane/blog/2026-02-27-release-3-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
layout: post
title: "LibreLane 3.0 Release"
description: ""
category:
tags: []
author: Leo Moser & Mohammed 'Donn' Gaber
date: 2026-02-27
---

<img src="/librelane/blog/2026-02-27-release-3-0/chips.png" style="max-width:100%" />

We are proud to finally release **LibreLane 3.0**.

This release has been in development for quite some time and is packed with features.
In addition to distributing LibreLane via Docker and Nix, we now also offer a LibreLane AppImage.

The most noteworthy features are:

- Support for the [ihp-sg13](https://github.com/IHP-GmbH/IHP-Open-PDK) PDK family.
- A new "Chip" flow for pad ring generation.
- New steps: "KLayout.Filler", "KLayout.SealRing", "KLayout.Density", and more.
- SystemVerilog support through [yosys-slang](https://github.com/povik/yosys-slang).
- Automatic clock gating through Yosys.
- Much better antenna violation repair.
- Many of the tools were updated.
- Better coverage in our CI.

But there are many small improvements as well, such as improved rendering of the chip layout, support for non-default rules, reduced file size of both magic and KLayout GDS, better subprocess formatting, and many more improvements and bug fixes.

See the full release notes here: TODO

</br>

::ff-btn-cta{linkTo="https://librelane.readthedocs.io/en/latest/" class="my-20"}
Install LibreLane today.
::
8 changes: 8 additions & 0 deletions content/librelane/blog/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
title: News
layout: default
header: News from LibreLane
---

::ff-libre-lane-news-overview
::
Loading