Skip to content

docs: Add logo cards for ecosystem projects - #3768

Open
camriddell wants to merge 2 commits into
narwhals-dev:mainfrom
camriddell:enh-more-logos
Open

docs: Add logo cards for ecosystem projects#3768
camriddell wants to merge 2 commits into
narwhals-dev:mainfrom
camriddell:enh-more-logos

Conversation

@camriddell

Copy link
Copy Markdown
Member

Description

Wanted to get a "good enough" PR up, let me know what you think!

Summary:

  • Adds project logo cards for each of the projects in our "ecosystem"
  • Consolidates docs metadata for downstream projects (our users), upstream (DataFrame libs), and plugins

TO Do/Discuss:

  • Is there a preference between storing logos in our GH repo, or just serving them from the project GH (current)?
    • Consider that a project may move their logo within their own repo, and now that logo no longer renders correctly
  • Any preference on how to present/organize the upstream projects vs plugins?

Screenshots

3.5k px width

image

2k px width

image

Standard Mobile Device (Iphone SE; 375px width)

image

What type of PR is this? (check all applicable)

  • 💾 Refactor
  • ✨ Feature
  • 🐛 Bug Fix
  • 🔧 Optimization
  • 📝 Documentation
  • ✅ Test
  • 🐳 Other

Related issues

  • Related issue N/A
  • Closes N/A

AI assistance

  • No AI tools were used for this PR.
  • AI tools were used. (I don't like writing CSS that looks decent)

Checklist

  • Code follows style guide (ruff)

  • Tests added

  • Documented the changes

  • If this is your first PR to narwhals, attach a screenshot of pytest passing locally (not CI):

    PYTEST_ADDOPTS="--numprocesses=logical" \
    make run-ci DEPS="--extra pandas --extra dask --group core-tests --group sklearn --group plugins" \
    CMD="pytest tests --cov=src --cov=tests --runslow --constructors=pandas,pandas[nullable],pandas[pyarrow],pyarrow,polars[eager],polars[lazy],dask,duckdb,sqlframe"

@camriddell
camriddell requested review from FBruzzesi and MarcoGorelli and removed request for FBruzzesi July 9, 2026 18:25
@MarcoGorelli

Copy link
Copy Markdown
Member

pretty neat, nice!

@dangotbanned dangotbanned added the documentation Improvements or additions to documentation label Jul 18, 2026
@dangotbanned dangotbanned changed the title add project logo cards for upstream/downstream projects docs: Add logo cards for ecosystem projects Jul 18, 2026
@dangotbanned
dangotbanned self-requested a review July 18, 2026 10:15

@dangotbanned dangotbanned left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really appreciate this, thanks @camriddell

spinny hands narwhal

Comment thread docs/ecosystem.md
the [plugins system](/narwhals/extending/)

The following is a non-exhaustive list of libraries and tools that choose to use Narwhals
## Narwhals is Used by

@dangotbanned dangotbanned Jul 18, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: I liked Used By.
I would hope that being on our website was enough context 😉


More useful: is there anything we can do to make the one on the README prettier?

I'm guessing we'd have less choices with than zensical, but a grid would be nice there too

Is there a preference between storing logos in our GH repo, or just serving them from the project GH (current)?

I imagine at least having the links centralized would help with using them here

Long list

image

Consider that a project may move their logo within their own repo, and now that logo no longer renders correctly

I think t There are linters you can run in ci for dead links in docs (can't recall any though 🫣)

Updated: found the one I was thinking of (https://github.com/lycheeverse/lychee/)!

Comment thread docs/data/projects.yml
Comment on lines +2 to +4
- name: Altair
homepage: https://narwhals-dev.github.io/narwhals/
logo: https://altair-viz.github.io/_static/altair-logo-light.png

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We were one of the first big projects to adopt Narwhals.
But I'm pretty sure there wasn't a reverse hostile takeover

Suggested change
- name: Altair
homepage: https://narwhals-dev.github.io/narwhals/
logo: https://altair-viz.github.io/_static/altair-logo-light.png
- name: Altair
homepage: https://altair-viz.github.io/
logo: https://altair-viz.github.io/_static/altair-logo-light.png

Comment thread docs/css/cards.css
margin: 0.75rem auto 1rem;
border: 0;
border-top: 1px solid var(--md-default-fg-color--light);
opacity: 0.6;}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was a format on save for me, but why not make it a suggestion instead?

Suggested change
opacity: 0.6;}
opacity: 0.6;
}

Comment thread docs/css/cards.css
@@ -0,0 +1,74 @@
.project-grid {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't worked out where we put it yet, but we need to make some changes for dark mode

Show dark mode

image

These are some examples of how you can do that generally

/* Dark mode adjustments */
[data-md-color-scheme="slate"] .column-selector-dropdown {
background: var(--md-default-bg-color, #1e1e1e);
border-color: var(--md-default-fg-color--lighter, #444);
}
[data-md-color-scheme="slate"] .column-selector-button {
background: var(--md-primary-fg-color, #5d6cc0);
}
[data-md-color-scheme="slate"] .column-selector-button:hover {
background: var(--md-primary-fg-color--dark, #4051b5) !important;
}
[data-md-color-scheme="slate"] {
/* Code highlighting syntax color shades
https://github.com/zensical/ui/blob/c5152dee833503b1a80dee997073d13712b3861f/src/assets/stylesheets/modern/main/_colors.scss#L75-L107
https://github.com/zensical/ui/blob/c5152dee833503b1a80dee997073d13712b3861f/src/assets/stylesheets/modern/main/extensions/pymdownx/_highlight.scss#L26-L169
*/
/* Mostly tried to recreate a [VSCode theme], but pygments doesn't understand enough of the symbols [mkdocstrings/griffe#254].
[VSCode theme]: https://github.com/thowitz/dark-plus-python-theme/blob/99ece7cb5ac540cbb28447d401b316fd44230d26/themes/dark-plus-python-theme.json
[mkdocstrings/griffe#254]: https://github.com/mkdocstrings/griffe/issues/254
*/
--md-code-hl-string-color: #CE9178;
--md-code-hl-number-color: #B5CEA8;
--md-code-hl-comment-color: #6A9955;
--md-code-hl-function-color: #DCDCAA;
.highlight {
/* Use the same color for all regular strings */
.se {
color: var(--md-code-hl-string-color);
}
.kn {
/* keyword, namespace ('from', 'import') */
color: #C586C0;
}
:is(.kc, .k) {
/*
keyword, constant ('True', 'False', 'None')
keyword, other
*/
color: #569CD6;
}
/* Overrides `--md-code-hl-function-color` for things that are not functions:
.nc = Name, class
.ne = Name, exception
.nn = Name, namespace
*/
:is(.nc, .ne, .nn) {
color: #4EC9B0;
}
/* Generic, prompt ('>>>', '...') */
.gp {
color: var(--md-code-hl-keyword-color);
font-weight: bold;
}
/* The color of the error type in traceback */
.gr {
color: #CD3131;
}
}
}

But finding the right one requires some homework:

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I played around with the css and there isn't a universal solution. Instead, I think I will check if the project has a "dark-mode" logo and set up some JS to toggle between to the correct image.

If a project doesn't have a dark-mode logo counterpart then we'll get as far as possible with some css.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dangotbanned how is this looking now? I grabbed dark-mode logos where available and for any projects that did not have one, I gave them a slightly lighter background when dark mode was toggled on.

image image

Comment thread zensical.toml
Comment on lines +162 to +166
[project.markdown_extensions.zensical.extensions.macros]
include_dir = "docs/includes"

[project.markdown_extensions.zensical.extensions.macros.include_yaml]
projects = "docs/data/projects.yml"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a little grouping together.

It wasn't obvious to me before that this was a fancy zensical extension

Suggested change
[project.markdown_extensions.zensical.extensions.macros]
include_dir = "docs/includes"
[project.markdown_extensions.zensical.extensions.macros.include_yaml]
projects = "docs/data/projects.yml"
[project.markdown_extensions.zensical.extensions]
macros = { include_dir = "docs/includes", include_yaml = { projects = "docs/data/projects.yml" } }

Comment thread docs/ecosystem.md
If you would like to chat with us, or if you need any support, please [join our Discord server](https://discord.gg/V3PqtB4VA4).

## Related projects
## Directly Supported Tabular Data Packages

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just pinging @FBruzzesi, as this reminded me of (#3794 (comment))

Directly Supported Tabular Data Packages

Nothing about this is wrong or inaccurate.
But I do think it is helpful when we use consistent terms 🙂

A future PR could Add a glossary - which is something I really like about the python docs.
In this PR, what do you think about referring to these as backends?

Side note

I've been using Plugin and Builtin as the names of protocols here

This isn't a 1-to-1 with main, nor a suggestion - just giving an example 😅

class Builtin(Plugin[CB, DF, LF, S], Protocol[CB, DF, LF, S]):
"""Backends defined inside of narwhals are plugins too.
`[CB, DF, LF, S]`.
The main difference is that a `Builtin` is **required** to support the [Perfect backwards compatibility policy](/backcompat/).
"""

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this, changed to ## Builtins: Directly Supported Tabular Data Packages and ## Plugins: Externally Supported Tabular Data Packages

Also contemplating swapping the phrasing "Tabular Data Packages" for "Tabular Data Tools"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants