Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign of the Node.js API Docs #52343

Open
ovflowd opened this issue Apr 3, 2024 · 25 comments
Open

Redesign of the Node.js API Docs #52343

ovflowd opened this issue Apr 3, 2024 · 25 comments
Labels
doc Issues and PRs related to the documentations.

Comments

@ovflowd
Copy link
Member

ovflowd commented Apr 3, 2024

Hey, y'all 👋 with the redesign of the Node.js Website done. We're ready to move our efforts into revamping the design of the Node.js API docs and its build process.

We understand this is code owned by Node.js Core, so we're (@nodejs/web-infra) opening an issue here.

Overview

Revamp of Tooling

  • We intend to modernize the current tooling of the Node.js API docs (https://github.com/nodejs/node/tree/main/tools/doc), migrating from the current manual code into something more modern:
    • We intend to transform (in-memory, during build-time, no source change) the raw Markdown into MDX
    • Replace the YAML metadata (in-memory, during build-time, no source change) to references of MDX Metadata
      • This is similar to what we did with an MVP on the nodejs/nodejs.dev repository as seen here and here
    • The MDX gets converted into JSX, allowing us to use React Components on the codebase, such as on the Node.js Website
    • Finally, we use ReactDOM (Server) to compile the JSX into plain HTML (initial rendering), which is then embedded in the HTML templates, making each page an HTML file. (Source MD file -> Target HTML file as it has been done so far)
      • The file names will be the same
      • The JavaScript client-side code is then built for that specific page, tree-shaken, minimized, and stored on a target .js file
        • These JS files have a static filename but are linked within the HTML with a unique query param and hash to signal to the Browser that these are different versions.
      • All these output HTML and JS files are stored in the already defined out folder (as described on the make-doc Makefile step of the Node.js build process)
    • This revamp of the tooling allows more modern frameworks and libraries to be adopted.

Tooling Dependencies

  • We aim to use preact as a JSX library (+ DOM rendering) since it's pretty much React but lightweight, it has pretty much 1:1 to React's API, and since the API docs are extremely simple statically generated page, we don't need anything fancier
  • We aim to use Vite for the build process, transpiling/compilation and output to HTML files, and for the availability of HMR/Dev Server. This will be an experiment.
  • We aim to use MDX to parse and transform the markdown into MDX/JSX.
  • All other old dependencies would be removed/unnecessary. Some other devDependencies, like semver, might be needed.

Revamp of Design

After the revamp of tooling is done, we have a 1:1 feature to the old generation of API docs, and we can generate the same API docs with the same styles, same layout, and same components (the HTML snippets transformed into React Components), we can proceed with the revamp of styles.

This means we would adopt these designs based on the Node.js Website redesign into the API Docs. These designs may still change and are pending @nodejs/tsc approval)

This part is blocked by the monorepo transformation of the Node.js Website repository, which would allow all the existing components to be bundled into a UI components package.

We aim to use Shiki as we use on the Node.js Website for the CodeBoxes and Tailwind and Radix UI for Component tooling and a11y as we've done on the Node.js Website.

This would fundamentally course-correct the current design of the API Docs. Note that we aim to add a Search box (as we've done on the Node.js Website) and restructure the API Docs as described on this initiative of the Next-10 initiative.

It is part of the redesign of the Node.js API Docs:

  • Applying the new styles, components, and UI as envisioned on Figma
  • Better Navigation as envisioned on Figmas, which is doable by the newly revamped tooling (see the nodejs/nodejs.dev tooling attached above as a reference)
  • Search input / Search boxes for the content of the API docs
  • Better Table of Contents and overall reading based on the Figma designs

What is this issue about?

Keeping track of the efforts, communication, feedback, and progress of the revamp of the tooling and redesign of the API Docs is a sort of "Epic" for the whole initiative.

What's next?

Gathering initial feedback, consensus-seeking with Core Collaborators, and starting to delegate work on both fronts. Any support is welcome.

F.A.Q.

Are we going to translate the API docs?

No. It's an impossible and unmaintainable task. There is too much risk and work, and API docs get outdated fast. There is no merit in translating the API docs.

Can I help with the work on the API docs tooling?

Yes and no. We're more than open for feedback, ideas and code review, but the big chunk of work will be done by the Web Infra team which has a good knowledge of the tooling changes needed to be done and a good envisioning of what should be done.

Can I help with the redesign?

Yes! Implementation of components, designs, etc, is more than welcome! The actual components will reside on this repository and the Node.js Website. The API docs will only import the components/use them as the source will be on the Node.js Website repository.

Is there any timeline?

Not yet. We want to reach a consensus first and have a good understanding that the overall community is happy with these proposed changes + the proposed dependencies we want to use, such as MDX.

With MDX are the source files changing?

No. The transform into MDX will happen only in memory during the build time as a build-step. So that we can transform the non-conforming YAML metadata into something React can use. The source files will be untouched.

What are the problems with the current tooling?

  • The current tooling does not support React.
  • It has numerous limitations that hinder the implementation of desired features in the website redesign.
  • The tooling is considered messy to update and not friendly for newcomers.
  • It makes redesigning the API docs unintuitive and almost impossible without encountering significant blockers.
@aduh95

This comment was marked as resolved.

@ovflowd

This comment was marked as resolved.

@aduh95

This comment was marked as resolved.

@ovflowd

This comment was marked as resolved.

@mertcanaltin mertcanaltin added doc Issues and PRs related to the documentations. node-api Issues and PRs related to the Node-API. labels Apr 6, 2024
@joyeecheung
Copy link
Member

joyeecheung commented Apr 8, 2024

Can we move the external dependencies and tools to a different repo, and only keep the markdown documents in this repo? I imagine the new dependencies and build process could make the already flaky CI even more flaky and complicate releases and backports further if they end up in this repo (my brain already starts to hurt when thinking about backporting the tool changes to v18 and then make the addon docs build on SmartOS).

@ovflowd
Copy link
Member Author

ovflowd commented Apr 8, 2024

Can we move the external dependencies and tools to a different repo, and only keep the markdown documents in this repo? I imagine the new dependencies and build process could make the already flaky CI even more flaky and complicate releases and backports further if they end up in this repo (my brain already starts to hurt when thinking about backporting the tool changes to v18 and then make the addon docs build on SmartOS).

That is definitely doable. Didn't add to the initial proposal as Im not sure how the feeling/consensus about this one would be.

But I definitely would say a +1 to have the tooling somewhere else. The only issue is, generating the docs is part of Node.js build process (Makefile) so Im not sure how we should handle that transition? Would node core need to depend on another node repository and add it as part of the build process? That is currently out of my expertise but I can definitely 👀👀 into it!

@AugustinMauroy
Copy link
Member

+1 for proposal
if we do something like node-core-utils but on nodejs.org it's should work ?

@bmuenzenmeyer
Copy link
Contributor

That is currently out of my expertise but I can definitely 👀👀 into it!

this would be possible either with direct github install instructions or npm publication - both pretty strightforward

@joyeecheung
Copy link
Member

But I definitely would say a +1 to have the tooling somewhere else. The only issue is, generating the docs is part of Node.js build process (Makefile) so Im not sure how we should handle that transition? Would node core need to depend on another node repository and add it as part of the build process? That is currently out of my expertise but I can definitely 👀👀 into it!

We can still keep a basic renderer here just to make sure that the docs are parsable, and also we still need to generate addon tests from addons.md.

@mcollina
Copy link
Member

mcollina commented Apr 9, 2024

@ovflowd I think docs must "render" in the browser without JS enabled. Ideally no per-page JS.
(Additional features should use JS, such as search).

@ovflowd
Copy link
Member Author

ovflowd commented Apr 9, 2024

@ovflowd I think docs must "render" in the browser without JS enabled. Ideally no per-page JS. (Additional features should use JS, such as search).

Definitely agreed here, IMO output of both should be a 1:1 match.

@joyeecheung
Copy link
Member

joyeecheung commented Apr 10, 2024

Not sure if this is the right place to mention it, but during the summit I think several people mentioned in different sessions about our docs being too intimidating to beginners - I think by that they mean, API docs are like a dictionary, and you don't learn a language by reading a dictionary. We should have more tutorials in the docs before branching into the API dictionary. Which may affect the redesign because the page layout and information architecture etc. need to consider this.

@ovflowd
Copy link
Member Author

ovflowd commented Apr 10, 2024

Not sure if this is the right place to mention it, but during the summit I think several people mentioned in different sessions about our docs being too intimidating to beginners - I think by that they mean, API docs are like a dictionary, and you don't learn a language by reading a dictionary. We should have more tutorials in the docs before branching into the API dictionary. Which may affect the redesign because the page layout and information architecture etc. need to consider this.

I believe that's why we're cultivating an improved Learn section on nodejs.org :) I believe the API docs should be more an API reference, but agree they could be rewritten, improved, and have more examples... But that's not the scope of this issue.

@richardlau
Copy link
Member

https://documentation.divio.com/ is an interesting POV on documentation -- our API docs fall into "reference". The main point being that there are different types of documentation and documentation is clearer if those are not mixed together.

@legendecas legendecas removed the node-api Issues and PRs related to the Node-API. label Apr 12, 2024
@legendecas
Copy link
Member

(Removing label node-api Issues and PRs related to the Node-API. since this is not specific to the native c api)

@ovflowd
Copy link
Member Author

ovflowd commented Apr 21, 2024

documentation.divio.com is an interesting POV on documentation -- our API docs fall into "reference". The main point being that there are different types of documentation and documentation is clearer if those are not mixed together.

Right, I believe my goal here is just a redesign. I do agree that content-wise our API docs should fall into "Reference" documentation; And we should write Learn material (on the Node.js Website) with actual learning materials for our API Documentation.

This is possibly something we want to invest time into.

For example @JakobJingleheimer was working on learning material for Node.js Loaders :)

@JakobJingleheimer
Copy link
Member

JakobJingleheimer commented Apr 21, 2024

For example @JakobJingleheimer was working on learning material for Node.js Loaders :)

Indeed 🙂 the first draft is nearly ready (have to first write a package to facilitate an important use-case needed in thr article, which is nearly ready).

@ovflowd
Copy link
Member Author

ovflowd commented Apr 27, 2024

Hey, @nodejs/tsc I'd like to pin this issue, due to its high-visibility and impact on the project.

Throughout the years, one of the most common "feedback" factors we've received on social media have been the current state (design) of the API docs; I believe as we're ramping up to work on this enormous piece of work, I'd make sense to highlight the visibility of this issue:

  • Better reach to our outer and inner community
  • Gather feedback fast and make announcements easy for people to follow

@benjamingr
Copy link
Member

Hey, @nodejs/tsc I'd like to pin this issue, due to its high-visibility and impact on the project.

Pins are typically used in order to catch cases we have breakages/bugs in order to prevent users from opening duplicate issues. I'm not sure what pinning would accomplish here?

@ovflowd
Copy link
Member Author

ovflowd commented Jul 6, 2024

We have an update: We finally started the work on the new API Doc Tooling, and it's getting nicely done.

The initial PR (nodejs/api-docs-tooling#33) allows us already to have a fully working parser for the API Docs and will enable us to start the following work to add the HTML and JSON generators.

@ovflowd
Copy link
Member Author

ovflowd commented Jul 19, 2024

We've landed the core of the new API doc tooling and are proceeding with the generators that will allow us to achieve what we need.

@ovflowd
Copy link
Member Author

ovflowd commented Jul 31, 2024

We've landed the CLI pieces of the new API doc tooling. We're moving forward with implementing the generators that allow us to generate the JSON, HTML and whatnot outputs of the API docs.

You can try the CLI already by doing:

npm i -g https://github.com/nodejs/api-docs-tooling/tarball/main

Then clone nodejs/node, (for example gh repo clone nodejs/node);

And then run the api-docs-tooling CLI, for example:

api-docs-tooling -i /path/to/node/node/doc/api/http.md -t json-simple -o .

Note that this is all alpha; there will be many changes yet! Also check api-docs-tooling -h for help :)

@ovflowd
Copy link
Member Author

ovflowd commented Aug 24, 2024

As nodejs/api-docs-tooling#55 is getting closer to land and @flakey5 is going to work on the JSON generator; I believe we should soon start seeing how we'd replace the current code within tool/doc and other places to swap out the existing API doc generator towards the new one.

@ovflowd
Copy link
Member Author

ovflowd commented Aug 24, 2024

FYI the legacy HTML generator for the new API doc tooling is ready and feature complete nodejs/api-docs-tooling#55

@ovflowd
Copy link
Member Author

ovflowd commented Nov 23, 2024

FYI the JSON generation is about to get merged nodejs/api-docs-tooling#142 which was the last blocker.

We can officially start working into sunsetting the current tooling and integrate the new one on nodejs/node.

cc @nodejs/collaborators and @nodejs/tsc for awareness as I'll be possibly soon start drafting a PR that replaces the tooling (and update the contributor docs regarding how to generate docs)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
doc Issues and PRs related to the documentations.
Projects
None yet
Development

No branches or pull requests