Skip to content

Commit 85ec8ef

Browse files
authored
Merge branch 'master' into under
2 parents 10ac538 + d11d764 commit 85ec8ef

File tree

112 files changed

+9759
-3368
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+9759
-3368
lines changed

.all-contributorsrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"login": "sergeysova",
88
"name": "Sergey Sova",
99
"avatar_url": "https://avatars.githubusercontent.com/u/5620073?v=4",
10-
"profile": "https://sova.dev/",
10+
"profile": "https://sergeysova.com/",
1111
"contributions": [
1212
"blog",
1313
"doc",

.stylelintrc.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
module.exports = {
22
extends: [
3-
"stylelint-config-standard-scss",
43
"stylelint-config-recommended",
4+
"stylelint-config-standard-scss",
55
"stylelint-config-recess-order",
66
],
77
rules: {
88
"color-hex-length": "long",
9-
"at-rule-no-unknown": true,
109
"selector-class-pattern": null,
1110
},
1211
};

CHANGELOG.md

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,66 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [Since last release][since-last-release]
8+
<!-- ## [Since last release][since-last-release] -->
99

10-
### Added
10+
## [2.1.0] - 2024-10-31
11+
12+
The new revision of Feature-Sliced Design is here! The main difference with FSD 2.0 is the new approach to decomposition — “pages first”.
13+
14+
### What's “pages-first”?
15+
16+
You do “pages first” by keeping more code in pages. For example, large blocks of UI, forms and data logic that are not reused on other pages should now stay in the slice of the page that they are used in. The division by segments (`ui`, `api`, `model`, etc.) still applies to all this code, and we encourage you to further split and organize code into folders inside of segments — don't just pile all the code into a single file.
17+
18+
In the same way, widgets are no longer just a compositional layer, instead they should also store code that isn't currently needed outside of that widget, including its own stores, business logic, and API interactions.
19+
20+
When you have a need to reuse code in several widgets or pages, consider putting it in Shared. If that code involves business logic (i. e. managing specific modal dialogs), consider breaking it up into infrastructural code, like the modal manager, and the business code, like the content of the modals. The infrastructure can then go to Shared, and the content can stay in the pages that use this infrastructure.
21+
22+
### How is it different?
23+
24+
In FSD 2.0 we explained how to identify entities and features in your application, and then combine them in widgets and pages. Over time we started disliking this approach, mostly for the following reasons:
25+
26+
- Code cohesion is much worse in this approach
27+
- You need to jump around several folders just to make changes to a single user flow
28+
- Unused code is harder to delete because it's somewhere else
29+
- Finding entities and features is still an advanced skill that needs to be developed over time
30+
- It requires understanding of the business context, which not all developers want to bother with
31+
- On the other hand, splitting by pages is natural and requires little training
32+
- Different developers have different understandings of these concepts, which leads to everyone having their own idea of FSD, which causes conflict and misunderstanding
33+
34+
### Is it hard to migrate from FSD 2.0?
35+
36+
This is a non-breaking change, so you don’t even necessarily need to migrate your current FSD projects to FSD 2.1, but we still think the new way of thinking will lead to a more cohesive and less opinionated structure. We’ve compiled a few steps you can take in [the migration guide](https://feature-sliced.design/docs/guides/migration/from-v2-0).
1137

12-
- New article about how to use FSD with Next.js (#644).
38+
### What else happened since the last release?
39+
40+
The cross-import notation (`@x`) that was an experimental proposal for a long time has now been standardized! Its official name is **Public API for cross-imports**. You can use it to create explicit connections between entities. There's [a new section in our documentation all about this new notation](https://feature-sliced.design/docs/reference/public-api#public-api-for-cross-imports).
41+
42+
Another exciting new thing in the FSD ecosystem is our architectural linter, [Steiger](https://github.com/feature-sliced/steiger). It's still in active development, but it is production-ready.
43+
44+
A couple more minor clarifications to the docs were made as well:
45+
46+
1. Application-aware things like the route constants, the API calls, or company logo, are now explicitly allowed in Shared. Business logic is still not allowed, but these things are not considered to be business logic.
47+
2. Imports between segments in App and Shared were always allowed, but it's been made explicit too.
48+
49+
And here's what happened to the documentation website:
50+
51+
#### Added
52+
53+
- Slightly rewritten and expanded overview page to give some details about FSD right away (#685).
54+
- New partial translations: Korean (#739, #736, #735, #742, #732, #730, #715), Japanese (#728).
1355
- The tutorial was rewritten. Technical details were stripped out, more FSD theory has been added (#665).
56+
- Guides on how to deal with common frontend issues like page layouts (#708), types (#701), authentication (#693).
57+
- Guides on how to use FSD with Nuxt (#710, #689, #683, #679), SvelteKit (#698), Next.js (#699, #664, #644), and TanStack Query (#673).
58+
- A new feedback widget, powered by PushFeedback! Go give it a try and let us know what you think of the new pages (#695).
59+
- Comparison of FSD with Atomic Design (#671).
60+
61+
#### Changed
62+
63+
- The migration guide from a custom architecture (formerly known as "from legacy") has been actualized (#725).
64+
65+
#### Removed
66+
67+
- The decomposition cheatsheet is now unlisted for an undefined period of time. It proved to be more harmful than useful, but maybe it can be saved later (#649).
1468

1569
## [2.0.0] - 2023-10-01
1670

@@ -41,5 +95,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4195
- The overview page has been rewritten to be more concise and informative (#512, #515, #516).
4296
- FSD has updated its branding, and there are now guidelines to the brand usage. The standard spelling of the name is now "Feature-Sliced Design" (#496, #499, #500, #465).
4397

44-
[since-last-release]: https://github.com/feature-sliced/documentation/compare/v2.0.0...HEAD
98+
[since-last-release]: https://github.com/feature-sliced/documentation/compare/v2.1.0...HEAD
99+
[2.1.0]: https://github.com/feature-sliced/documentation/releases/tag/v2.1.0
45100
[2.0.0]: https://github.com/feature-sliced/documentation/releases/tag/v2.0.0

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2018-2023 Feature-Sliced Design core-team
3+
Copyright (c) 2018-2025 Feature-Sliced Design core-team
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
112112
<table>
113113
<tbody>
114114
<tr>
115-
<td align="center" valign="top" width="20%"><a href="https://sova.dev/"><img src="https://avatars.githubusercontent.com/u/5620073?v=4?s=100" width="100px;" alt="Sergey Sova"/><br /><sub><b>Sergey Sova</b></sub></a><br /><a href="#blog-sergeysova" title="Blogposts">📝</a> <a href="https://github.com/feature-sliced/documentation/commits?author=sergeysova" title="Documentation">📖</a> <a href="#example-sergeysova" title="Examples">💡</a> <a href="#ideas-sergeysova" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-sergeysova" title="Project Management">📆</a> <a href="#question-sergeysova" title="Answering Questions">💬</a> <a href="#infra-sergeysova" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#research-sergeysova" title="Research">🔬</a> <a href="#eventOrganizing-sergeysova" title="Event Organizing">📋</a> <a href="#tutorial-sergeysova" title="Tutorials">✅</a> <a href="#talk-sergeysova" title="Talks">📢</a> <a href="#maintenance-sergeysova" title="Maintenance">🚧</a></td>
115+
<td align="center" valign="top" width="20%"><a href="https://sergeysova.com/"><img src="https://avatars.githubusercontent.com/u/5620073?v=4?s=100" width="100px;" alt="Sergey Sova"/><br /><sub><b>Sergey Sova</b></sub></a><br /><a href="#blog-sergeysova" title="Blogposts">📝</a> <a href="https://github.com/feature-sliced/documentation/commits?author=sergeysova" title="Documentation">📖</a> <a href="#example-sergeysova" title="Examples">💡</a> <a href="#ideas-sergeysova" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-sergeysova" title="Project Management">📆</a> <a href="#question-sergeysova" title="Answering Questions">💬</a> <a href="#infra-sergeysova" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#research-sergeysova" title="Research">🔬</a> <a href="#eventOrganizing-sergeysova" title="Event Organizing">📋</a> <a href="#tutorial-sergeysova" title="Tutorials">✅</a> <a href="#talk-sergeysova" title="Talks">📢</a> <a href="#maintenance-sergeysova" title="Maintenance">🚧</a></td>
116116
<td align="center" valign="top" width="20%"><a href="https://t.me/ilya_azin"><img src="https://avatars.githubusercontent.com/u/42924400?v=4?s=100" width="100px;" alt="Ilya Azin"/><br /><sub><b>Ilya Azin</b></sub></a><br /><a href="https://github.com/feature-sliced/documentation/commits?author=azinit" title="Documentation">📖</a> <a href="#example-azinit" title="Examples">💡</a> <a href="#ideas-azinit" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-azinit" title="Project Management">📆</a> <a href="#question-azinit" title="Answering Questions">💬</a> <a href="https://github.com/feature-sliced/documentation/pulls?q=is%3Apr+reviewed-by%3Aazinit" title="Reviewed Pull Requests">👀</a> <a href="#infra-azinit" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#userTesting-azinit" title="User Testing">📓</a> <a href="#design-azinit" title="Design">🎨</a> <a href="#tutorial-azinit" title="Tutorials">✅</a> <a href="#talk-azinit" title="Talks">📢</a> <a href="#maintenance-azinit" title="Maintenance">🚧</a></td>
117117
<td align="center" valign="top" width="20%"><a href="https://github.com/Rin-Akaia-eth"><img src="https://avatars.githubusercontent.com/u/8805308?v=4?s=100" width="100px;" alt="Rin 🦊🪐😈 Akaia"/><br /><sub><b>Rin 🦊🪐😈 Akaia</b></sub></a><br /><a href="https://github.com/feature-sliced/documentation/commits?author=Rin-Akaia-eth" title="Documentation">📖</a> <a href="#content-Rin-Akaia-eth" title="Content">🖋</a> <a href="#ideas-Rin-Akaia-eth" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-Rin-Akaia-eth" title="Answering Questions">💬</a> <a href="#translation-Rin-Akaia-eth" title="Translation">🌍</a> <a href="#talk-Rin-Akaia-eth" title="Talks">📢</a> <a href="#maintenance-Rin-Akaia-eth" title="Maintenance">🚧</a> <a href="#research-Rin-Akaia-eth" title="Research">🔬</a></td>
118118
<td align="center" valign="top" width="20%"><a href="https://github.com/AlexandrHoroshih"><img src="https://avatars.githubusercontent.com/u/32790736?v=4?s=100" width="100px;" alt="Alexander Khoroshikh"/><br /><sub><b>Alexander Khoroshikh</b></sub></a><br /><a href="https://github.com/feature-sliced/documentation/commits?author=AlexandrHoroshih" title="Documentation">📖</a> <a href="#ideas-AlexandrHoroshih" title="Ideas, Planning, & Feedback">🤔</a> <a href="#question-AlexandrHoroshih" title="Answering Questions">💬</a> <a href="https://github.com/feature-sliced/documentation/pulls?q=is%3Apr+reviewed-by%3AAlexandrHoroshih" title="Reviewed Pull Requests">👀</a> <a href="#tool-AlexandrHoroshih" title="Tools">🔧</a> <a href="#security-AlexandrHoroshih" title="Security">🛡️</a> <a href="#talk-AlexandrHoroshih" title="Talks">📢</a> <a href="#tutorial-AlexandrHoroshih" title="Tutorials">✅</a> <a href="#maintenance-AlexandrHoroshih" title="Maintenance">🚧</a></td>

babel.config.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

config/docusaurus/extensions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const presets = [
4343
showLastUpdateTime: true,
4444
versions: {
4545
current: {
46-
label: `v2.0.0 🍰`,
46+
label: `v2.1`,
4747
},
4848
},
4949
sidebarItemsGenerator,

config/docusaurus/routes.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,17 @@ const LEGACY_ROUTES = [
109109
{
110110
title: "Decouple of entities",
111111
from: "/docs/concepts/decouple-entities",
112-
to: "/docs/reference/isolation/decouple-entities",
112+
to: "/docs/reference/layers#import-rule-on-layers",
113113
},
114114
{
115115
title: "Low Coupling & High Cohesion",
116116
from: "/docs/concepts/low-coupling",
117-
to: "/docs/reference/isolation/coupling-cohesion",
117+
to: "/docs/reference/slices-segments#zero-coupling-high-cohesion",
118118
},
119119
{
120120
title: "Cross-communication",
121121
from: "/docs/concepts/cross-communication",
122-
to: "/docs/reference/isolation",
122+
to: "/docs/reference/layers#import-rule-on-layers",
123123
},
124124
{
125125
title: "App splitting",
@@ -276,6 +276,18 @@ const LEGACY_ROUTES = [
276276
},
277277
],
278278
},
279+
{
280+
group: "Deduplication of Reference",
281+
details:
282+
"Cleaned up the Reference section and deduplicated the material",
283+
children: [
284+
{
285+
title: "Isolation of modules",
286+
from: "/docs/reference/isolation",
287+
to: "/docs/reference/layers#import-rule-on-layers",
288+
},
289+
],
290+
},
279291
];
280292

281293
// @returns { from, to }[]

docusaurus.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ module.exports = {
5757
darkTheme: prismThemes.oneDark,
5858
},
5959
},
60+
future: {
61+
experimental_faster: true,
62+
},
6063
};
6164

6265
// Remove configs if there are not secrets passed

i18n/en/docusaurus-plugin-content-docs/current.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"version.label": {
3-
"message": "v2.0.0 🍰",
3+
"message": "v2.1",
44
"description": "The label for version current"
55
},
66
"sidebar.getstartedSidebar.category.Tutorials": {

0 commit comments

Comments
 (0)