Only this pageAll pages
Powered by GitBook
1 of 21

Contributing

Loading...

Hacktoberfest 2024

Loading...

Documentation

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Umbraco-CMS

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

UI Library

Loading...

Contributing to Umbraco

There are many ways to contribute to Umbraco. The Contribution Documentation will show you where and how.

Whether you're a seasoned developer, a creative designer, or a passionate user, there are countless ways to contribute to the Umbraco project. From coding and bug reporting to sharing your insights and creating tutorials, your input helps us shape a better experience for everyone.

Why contribute to an open-source project?

There are plenty of great reasons to get involved in open-source projects, and when it comes to Umbraco, the benefits are even greater! Here’s why you should consider contributing:

  • Expand your skill set: Gain valuable experience and learn new technologies.

  • Boost your career: Enhance your public résumé.

  • Build your network: Connect with fellow Umbraco enthusiasts and team members.

  • Learn and unlearn: Discover new insights and challenge your existing knowledge.

  • Make an impact: Your contributions can help thousands of users. Imagine saying, "I helped fix that bug!" 😎

  • Impact the planet: We plant a tree for each accepted contribution 🌳

  • Support the community: Help the hundreds of thousands of Umbraco users benefit from your efforts.

  • Give back: Contribute to the software you love or tackle that feature you've always wished was different!

So, let’s get those contribution hats on!

Where to contribute

Discover where you can make an impact and start contributing.

Documentation

First off, there's a lot of documentation, and it's not always easy to keep it updated or know if we covered all the details you need to know to follow them. We would love your help to verify the documentation. That is, to follow the docs to the letter and see if you’re successful or missing anything.

Find detailed instructions on how to contribute to the docs directly on the documentation site. Here, we have outlined the steps involved with testing and checking the articles against our style guide. In the same article, you can also learn much more about the rules we’re checking the docs against.

Head on over to the contributing guide for Documentation for the full details.

Umbraco CMS

There are plenty of up-for-grabs issues to look at - a great starting point if you’re not quite sure where to start.

We're also happy for you to work on translations or other problems you might know of that are not on the issue tracker yet.

Head on over to the contributing guide for Umbraco-CMS for the full details.

UI Library

The UI library contains all the UI elements for the backoffice. These are self-contained components that can be used in any project that needs a UI.

Head on over to the contributing guide for Umbraco.UI for the full details.

Documentation

Umbraco-CMS

UI Library

Contributing to Hacktoberfest

We have general contribution guidelines available for Umbraco-CMS, the backoffice project, the UI library and documentation.

Specificially for Hacktoberfest, we have a lot more things you can get involved in!

Umbraco 15 release candidate testing

One of our main focus areas for 2024 is to deeply test out the major new features of Umbraco v15. The release candidate for the upcoming Umbraco v15 is available now and we encourage you to test the main new features, namely:

  • The new rich text editor (RTE)

    • Migrating existing RTEs to the new RTE datatype

    • Working with the new RTE

    • Extending the new RTE

  • Lazy-loaded content, which is replacing the main caching mechanism

    • Upgrading existing sites and making sure everything still works on the frontend

    • If you have any custom routing or controllers in place, do they still work as expected

    • Try out the new ISeedKeyProvider, IDocumentServices and IDistributedCache

  • Block-level variants

    • Making sure all of your existing blocks work after an upgrade

    • If you have a very large block-based site, it is interesting to see if the upgrade doesn't take too long

    • Add variants to your existing or new blocks and start using them: edit, save, publish, etc

Once you have done a round of thorough testing, please make sure to report any issues on the tracker as usual.

Making it count for Hacktoberfest

We really appreciate your help in testing this release. Please make sure to describe to us in a bit of detail what you've tried, let us know a bit about the scale of project you're testing on, etc.

If everything "just" worked (🤞) then describe that as well! Let us know exactly what you focused on that worked well.

You can do this by heading to the HacktoberfestActivityLog repository and adding your name to the list in the "Low code/no code" section.

An example of a participation entry is:

- 2024-10-04 - Paula Philips - Umbraco 15 Release Candidate testing - Details in the PR description

In the description of the pull request to get your name added, please put your test results as described above and link to any issues you've created if things didn't work as expected.

This would be a great use of the Draft pull request feature on GitHub, so you can work on testing and keep updating the description with your test results until you're done and ready to submit your final PR.

Packages

Packages are back on the menu - and yes, they also count as a contribution to Umbraco!

Here are some specific details on this:

  • Only contributions made to open-source Umbraco packages added to the Hacktoberfest Package repo list counts

  • Follow the contribution guidelines provided by the package creator

  • Look for the "help wanted" label on the issue tracker associated with the package you want to help out with

  • Read much more about how this works, and guidelines on adding your own package repo to the list on the Umbraco Packages Hacktoberfest homepage.

Please note: Package contributions eligibility for swag differ slightly from those used for all contributions. Read more on the Packages Hacktoberfest guidelines to learn more about how a contribution is marked as "swag-eligible".

Creating a brand-new package

Publishing a brand new package to the Umbraco Marketplace will also count towards both DigitalOcean's and Umbraco's Hacktoberfest contributions ⭐🤩

Packages for Umbraco 14 and up are eligible by default, even if the equivalent package already exists for older Umbraco versions.

Check out Lee Kelleher’s list of potential new package ideas!

Low-code / no-code contributions

Back, by popular demand, we will also be rewarding contributions that are either low-code and more importantly: no-code!

Eligible contributions according to the Hacktoberfest guidelines include:

  • Verifying documentation

  • Copy editing

  • User experience testing

  • Talks or presentations

  • Blog posts

  • Podcasts

  • Case studies

  • Organizing Hacktoberfest events

We have set up a special GitHub repository for you to record your contributions that are not a pull request.

In order to record your journey of verifying documentation (like related blog post(s) in October, events organized), please edit the README.md file and add your activity at the end in the recommended format and submit that as a pull request. We’ll take it from there!

The teams at Skrift and 24 days in Umbraco are always looking for new articles. Finish your application October to make it count! We'll ask the Skrift/24 days teams to verify your application to write an article.

Sponsor an Umbraco-related GitHub repository

To appreciate people who maintain open-source projects for the Umbraco ecosystem, an easy way to help contribute is to give them some money! We’d suggest you have a look at your favorite packages and see if their repo/maintainer is accepting sponsorship.

We suggest you scroll through the list of topics on GitHub, filtered by Umbraco, and see if your favorite packages/authors are open to sponsorship. Look for the heart icon.

Screenshot that shows the Sponsor heart option

If you're in doubt if your chosen sponsorship would count, then feel free to first create an issue on the Hacktoberfest Activity Log repository, or ask on Discord in the #contributing channel.

Umbraco HQ sponsors 4 different projects at the moment, at $100 per month. These are excellent projects that could always use more sponsorships, but make sure to also consider other repositories, there are many great ones out there!

And the good news is: yes, you will be able to earn Umbraco swag, proportionate to your sponsorship amount.

How we judge a Hacktoberfest-eligible contribution

We use the Hacktoberfest participation rules to qualify, so any contributions that do not follow these standards will also not count towards Umbraco swag. These rules are to ensure we get quality contributions and that the right efforts get rewarded 🙌

If you’re contributing to one of the open-source Umbraco Packages, please check the Packages Hacktoberfest guidelines to learn more about how a contribution is marked as "swag-eligible".

Any questions?

In order to help you succeed we at HQ are trying to be available as much as possible during the month of October on Discord in the #contributing channel.

Whether you need some inspiration, guidance, help getting things to build, and so on - we’re there to support and guide you, together with the Core Collaborators team.

Screenshot that shows the Discord #contributing channel

So come join us and the other 1500+ people already on the Umbraco Discord server!

Happy Hacktoberfest! 🎃

Unwanted changes

While most changes are welcome, there are certain types of changes that are discouraged and might get your pull request refused. Of course this will depend heavily on the specific change, but please take the following examples in mind.

  • Breaking changes (code and/or behavioral) 💥 - sometimes it can be a bit hard to know if a change is breaking or not. Fortunately, if it relates to code, the build will fail and warn you.

  • Large refactors 🤯 - the larger the refactor, the larger the probability of introducing new bugs/issues.

  • Changes to obsolete code and/or property editors ✍️

  • Adding new config options 🦾 - while having more flexibility is (most of the times) better, having too many options can also become overwhelming/confusing, especially if there are other (good/simple) ways to achieve it.

  • Whitespace changes 🫥 - while some of our files might not follow the formatting/whitespace rules (mostly old ones), changing several of them in one go would cause major merge conflicts with open pull requests or other work in progress. Do feel free to fix these when you are working on another issue/feature and end up "touching" those files!

  • Adding new extension/helper methods ✋ - keep in mind that more code also means more to maintain, so if a helper is only meaningful for a few, it might not be worth adding it to the core.

  • Adding new dependencies 🔒 - if you are in need of adding a new dependency for Umbraco CMS to take on, this should be discussed first; dependencies need to be updated and can lead to unwanted security issues, so we only take on what is absolutely necessary.

While these are only a few examples, it is important to ask yourself these questions before making a pull request:

  • How many will benefit from this change?

  • Are there other ways to achieve this? And if so, how do they compare?

  • How maintainable is the change?

  • What would be the effort to test it properly?

  • Do the benefits outweigh the risks?

Other ways to contribute

This document covers contributing to the codebase of the CMS but the community site has plenty of inspiration for other ways to get involved.

If you don't feel you'd like to make code changes here, you can visit our documentation repository and use your experience to contribute to making the docs we have, even better.

We also encourage community members to feel free to comment on others' pull requests and issues - the expertise we have is not limited to the Core Collaborators and HQ. So, if you see something on the issue tracker or pull requests you feel you can add to, please don't be shy.

How to contribute

👍🎉 First off, thanks for taking the time to contribute! 🎉👍

These contribution guidelines are mostly just that - guidelines, not rules. This is what we've found to work best over the years, but if you choose to ignore them, we still love you! 💖 Use your best judgement, and feel free to propose changes to this document in a pull request.

Getting Started

We have a guide on and more detailed guides at the end of this article.

The following steps are a quick-start guide:

  1. Fork

    Create a fork of

  1. Clone When GitHub has created your fork, you can clone it in your favorite Git tool or on the command line with git clone https://github.com/[YourUsername]/Umbraco-CMS.

  1. Switch to the correct branch Switch to the main branch

  2. Build

    Build your fork of Umbraco locally as shown in the video below. You can build with any IDE that supports dotnet or the command line.

  1. Branch Create a new branch now and name it after the issue you're fixing, we usually follow the format: temp/12345. This means it's a temporary branch for the particular issue you're working on, in this case issue number 12345. Don't commit to main, create a new branch first.

  2. Change

    Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will .

  3. Commit and push

    Done? Yay! 🎉

    Remember to commit to your new temp branch, and don't commit to main. Then you can push the changes up to your fork on GitHub.

  4. Create pull request

    On GitHub, in your forked repository (https://github.com/[YourUsername]/Umbraco-CMS) you will see a banner saying that you pushed a new branch and a button to make a pull request. Tap the button and follow the instructions.

    Want to read further? .

If you encounter errors while building the project, make sure you're using the latest supported versions of Node.js and npm.

Further contribution guides

Before you start

Code of Conduct

This project and everyone participating in it, is governed by the [our Code of Conduct][code of conduct].

What can I contribute?

We categorise pull requests (PRs) into two categories:

PR type
Definition

Small PRs

Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files.

Large PRs

New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGet’s packages.config, NPM’s packages.json, etc.).

We’re usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly [as per the described process][review process].

We would love to follow the same process for larger PRs but this is not always possible due to time limitations and priorities that need to be aligned. We don’t want to put up any barriers, but this document should set the correct expectations.

Not all changes are wanted, so on occasion we might close a PR without merging it but if we do, we will give you feedback why we can't accept your changes. So make sure to talk to us before making large changes, so we can ensure that you don't put all your hard work into something we would not be able to merge.

Making larger changes

Please make sure to describe your larger ideas in an issue (bugs) or discussion (new features), it helps to put in mock up screenshots or videos. If the change makes sense for HQ to include in Umbraco CMS we will leave you some feedback on how we’d like to see it being implemented.

If a larger pull request is encouraged by Umbraco HQ, the process will be similar to what is described in the small PRs process above, we strive to feedback within 14 days. Finalizing and merging the PR might take longer though as it will likely need to be picked up by the development team to make sure everything is in order. We’ll keep you posted on the progress.

Pull request or package?

If you're unsure about whether your changes belong in the core Umbraco CMS or if you should turn your idea into a package instead, make sure to talk to us.

If it doesn’t fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and fix bugs. Eventually, a package could "graduate" to be included in the CMS.

Ownership and copyright

It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.

Similarly, if your contribution is copied or adapted from somewhere else, make sure that the license allows you to reuse that for a contribution to Umbraco-CMS.

If you're not sure, leave a note on your contribution and we will be happy to guide you.

When your contribution has been accepted, it will be MIT licensed from that time onwards.

File Names and Structure

Learn how to structure files and images when working with the Umbraco Documentation.

When contributing to the Umbraco documentation, it is useful to know how to structure directories, files, and images.

In this article, you'll get an overview of the file structure and learn about the naming conventions used for elements in the structure.

File names

How files, directories, and images are named is important for consistency, but also for ensuring continuous compatibility with GitBook, where the Documentation sites are hosted.

  • All file and directory names must use lowercase.

    • Exception: Name all parent articles README.md, and name the surrounding directory using the title of the README.md file.

  • Use hyphens (-) instead of spaces.

  • Use the title of the article when naming the associated file.

  • Give images descriptive names matching the content associated with them.

File structure

The overall structure of the Umbraco documentation is divided by version and product. Each Umbraco version has its own directory, and in those, each product has its own directories with articles and images.

Diving one step deeper, each individual topic is contained in its own directory.

Each directory must have a README.md file which will act as a landing page for that directory and a parent page to all other articles added within.

When images are used, they must be in an images directory next to the .md file referencing them using relative paths.

  • /topic (directory)

    • README.md (landing page/parent article)

    • another-article.md

    • /images (directory)

      • images.png

    • /subtopic (directory)

      • README.md (landing page/parent article)

      • article.md

      • another-article.md

      • /images (directory)

Documentation Navigation

Independent of how the files are structured in the directories, it is the SUMMARY.md file that ultimately determines how the documentation navigation is displayed.

Each product directory has a SUMMARY.md file wherein all articles related to that product are listed.

It is possible to add groups to separate the article into sections. This is done using two # symbols followed by the section name: ## Fundamentals .

An article is not available on the public documentation site unless it is listed within the SUMMARY.md file.

Structural Changes

These changes include moving an article to a different section, renaming or deleting an article as well as adding a new article.

When either of the actions above occurs, it needs to be tracked in two files: .gitbook.yaml and SUMMARY.md.

Moving an article

When an article is moved to a different section/directory, follow these steps:

  1. Update the relative path to the file in the closest SUMMARY.md file.

  2. Move the article link in the SUMMARY.md file to the correct section.

  3. Add a redirect to the redirects section of the closest .gitbook.yaml file.

    1. Example: relative/path/to/current/location: relative/path/to/new/location.md

Renaming an article

When an article is renamed, follow these steps to track the changes:

  1. Update the Title and the relative path to the file in the closest SUMMARY.md file.

  2. Add a redirect to the redirects section of the closest .gitbook.yaml file.

    1. Example: path/to/current-name: path/to/new-name.md

Deleting an article

When an article is deleted from the documentation, follow these steps to avoid broken links:

  1. Remove the file from the closest SUMMARY.md file.

  2. Add a redirect to the redirects section of the closest .gitbook.yaml file.

    1. Point to either the article's replacement or to the parent article.

    2. Example: path/to/article: path/to/new-article-or-parent.md

Adding a new article

When a new article is added, it must also be added to the SUMMARY.md file to show up in the published documentation:

  1. Add the article to the SUMMARY.md file like this:

    • Example: * [Article Title](path/to/article.md)

what to consider before you start
Umbraco-CMS on GitHub
happily give feedback
Creating a pull request and what happens next
Before you start
Finding your first issue: Up for grabs
Unwanted changes
Other ways to contribute
Fork the repository
Clone the fork

Create a New Version of an Article

Learn how to create and add new material to the Umbraco Documentation, including updated material for upcoming releases.

There are 2 common scenarios where you might want to add a new article to the Umbraco Documentation:

  1. You are adding new material to the documentation site.

    1. This includes topics or tutorials not previously covered..

  2. You are updating an existing article for an Upcoming major version of a product.

Add New Material to the Documentation

When you are adding a brand new article to the Umbraco Documentation, there are a few questions that we recommend asking yourself before getting started:

What type of article are you going to be writing?

It could be a tutorial, a guide on how to solve something specific, or an article detailing a specific concept or workflow.

The type of article you are writing will determine the content and sometimes also the structure of the material.

Who is the audience of the article?

C# developers, newcomers to Umbraco, and content editors each have different approaches and prerequisites to using Umbraco and reading the documentation.

Knowing your audience will enable you to write in a manner that fits that particular group. It will also give you some pointers on what should be your focus.

Where does the article fit into the existing structure?

Depending on which product you are adding new material for, the structure of the existing documentation will differ. We recommend browsing the existing material to figure out which section will be the best fit for your new article.

If you have doubts about where to place your article, the team at Umbraco HQ can help you out. In this case, add a note in the description when submitting the PR, letting us know that you need help placing the article.

The steps to create, write, and add a new article to the Umbraco Documentation are outlined below:

  1. Access the UmbracoDocs GitHub repository.

  2. Fork the repository.

  3. Clone your fork to your local machine.

  4. Create a new branch using the following naming convention: productname/topic

    • Branch name example: cms/new-content-app-tutorial

  5. Locate the section or folder in the existing structure where your article fits.

  6. Create a new .md file and name it using the title you will give the article.

    • The file name needs to be in small caps and use hyphens instead of spaces.

    • File name example: statistics-content-app-tutorial.md.

  7. Write the article following:

    1. Umbraco Style Guide

    2. Markdown Conventions.

  8. Add your new article to the file so it appears in the documentation navigation.

  9. Commit and push your changes to your forked repository.

  10. Submit a PR to the official UmbracoDocs repository.

Update an Article for an Upcoming Major Version

The documentation is versioned using directories in the root of the repository. The major Umbraco CMS version number is used to name the directories, and you will find documentation for each versioned Umbraco product within them.

The documentation follows the Long Term Support (LTS) strategy for Umbraco CMS. This means that whenever a major version is End of Life (EOL), documentation for that version will be moved to GitHub.

Read the Versioning Strategy article to learn more about how to handle documentation for the different versions.

The following sections of the Umbraco Documentation follow the versioning strategy:

  • Umbraco CMS

  • Umbraco Forms

  • Umbraco Deploy

  • Umbraco Workflow

  • Umbraco Commerce

  • Umbraco UI Builder

  • Umbraco Engage

The documentation site for a new major version is publicly available around the Release Candidate (RC) phase. The structure is set up typically 3-4 weeks before the final release.

Once the RC is released, you can find the associated documentation using the version drop-down on the Documentation site.

Update an article for the upcoming release

  1. Access the UmbracoDocs GitHub repository.

  2. Fork the repository.

  3. Clone your fork to your local machine.

  4. Create a new branch using the following naming convention: productnameXX/topic

    • Branch name example: cms15/configuration

  5. Locate the article you need to make changes to.

  6. Make the necessary changes to the article.

  7. Add and commit the changes.

  8. Push the branch to your forked repository.

  9. Submit a PR to the official UmbracoDocs repository.

Finding your first issue: Up for grabs

Finding your first issue: Up for grabs

Umbraco HQ will regularly mark newly created issues on the issue tracker with the community/up-for-grabs tag. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. We encourage anyone to pick them up and help out.

If you do start working on something, make sure to leave a small comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has.

Making your changes

Great question! The short version goes like this:

  1. Fork

    Create a fork of Umbraco-CMS on GitHub

    Fork the repository
  2. Clone

    When GitHub has created your fork, you can clone it in your favorite Git tool

    Clone the fork
  3. Switch to the correct branch

    Switch to the main branch

  4. Build

    Build your fork of Umbraco locally as described in the build documentation: you can debug with Visual Studio Code or with Visual Studio.

  5. Branch

    Create a new branch now and name it after the issue you're fixing, we usually follow the format: temp-12345. This means it's a temporary branch for the particular issue you're working on, in this case issue number 12345. Don't commit to main, create a new branch first.

  6. Change

    Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will happily give feedback.

  7. Commit and push

    Done? Yay! 🎉

    Remember to commit to your new temp branch, and don't commit to main. Then you can push the changes up to your fork on GitHub.

Keeping your Umbraco fork in sync with the main repository

Once you've already got a fork and cloned your fork locally, you can skip steps 1 and 2 going forward. Just remember to keep your fork up to date before making further changes.

To sync your fork with this original one, you'll have to add the upstream url. You only have to do this once:

git remote add upstream https://github.com/umbraco/Umbraco-CMS.git

Then when you want to get the changes from the main repository:

git fetch upstream
git rebase upstream/main

In this command we're syncing with the main branch, but you can choose another one if needed.

More information on how this works can be found on the thoughtbot blog.

Style guide

To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up.

That said, the Umbraco development team likes to follow the hints that ReSharper gives us (no problem if you don't have this installed) and we've added a .editorconfig file so that Visual Studio knows what to do with whitespace, line endings, etc.

Questions?

You can get in touch with [the core contributors team][core collabs] in multiple ways; we love open conversations and we are a friendly bunch. No question you have is stupid. Any question you have usually helps out multiple people with the same question. Ask away:

  • If there's an existing issue on the issue tracker then that's a good place to leave questions and discuss how to start or move forward.

  • If you want to ask questions on some code you've already written you can create a draft pull request, detailed in a GitHub blog post.

  • Unsure where to start? Did something not work as expected? Try leaving a note in the "Contributing to Umbraco" forum. The team monitors that one closely, so one of us will be on hand and ready to point you in the right direction.

Markdown Conventions

Learn how to use Markdown to write articles for the Umbraco Documentation.

The Umbraco Documentation is written in Markdown.

In this article, you can learn how Markdown is used for adding different elements to the articles.

Headings

To create a heading, add between one to four # symbols before your heading text. The number of # you use will determine the hierarchy level and size of the heading.

# Article Title
## Heading 1
### Heading 2
#### Heading 3
How the different levels of headings are diplayed on the Documentation site.

The Article Title (#) must be used only once. All other headings should follow the correct hierarchical order.

When two or more headings are used in an article, they will be used to generate a table of contents on the right side of the article. Heading 3 will not be shown in the table of contents.

A simplified example of a table of contents added based on headings in an article.

Styling text

Style
Syntax
Example
Output

Bold

** ** or __ __

This is **bold**.

This is bold.

Italic

* * or _ _

This is *italic*.

This is italic.

Links

In the following, you will find a few examples of different links.

External links

Include either the complete URL using the following syntax:

[yahoo something](https://yahoo.com/something)

All external links open in a new browser tab.

Internal links

When linking between pages in the documentation, use relative paths.

Link to an article in the same directory as the current article:

[Article Title](article.md)

Link to an article in a different directory than the current article:

[Article Title](../../reference/article.md)

Page Links

It is possible to add a page link that spans the entire width of the page. This is generally used for linking to a new subject related to the article at hand.

The following is a page link that links to the "Submit Feedback" article:

{% content-ref url="issues.md" %}

[Article Title](issues.md)

{% endcontent-ref %}

Link Text

Use the title of the article that is linked to as the link text. This is done to tell the reader what they will find on the other end.

Do not use "here" or "link" as the link text, as this provides no information about the destination.

⛔ Learn more about Document Types here.

✅ Learn more about Document Types in the Defining Content article.

Images

Images used in documentation articles must always be added to the repository as well. Learn more about where to add the images in the File Names and Structure article.

Use relative paths when referencing images in an article.

Use descriptive alt text and captions to enhance accessibility and Search Engine Optimization (SEO) benefits.

// Block with Caption

![This is a sample Caption](images/sample.png)

// Block with Alt text

<figure><img src="images/sample.png" alt="This is a sample Alt text"></figure>

// Block with Caption and Alt text

<figure>
  <img src="images/sample.png" alt="This is a sample Alt text">
  <figcaption>
    <p>This is a sample Caption</p>
  </figcaption>
</figure>

Always provide an alt text or a caption to describe the image’s purpose and content.

Best practices when working with images

  • Use clear and relevant filenames. Example: dashboard-view.png instead of image1.png.

  • Avoid placing large amounts of text in images. If text is required, provide it in the article instead.

  • Use SVG format for diagrams and icons where possible to ensure scalability.

Notes and Warnings

Four types of hints can be added to our documentation: info, success, warning, and danger.

Learn more about how to use hints in the GitBook Docs.

Advanced Blocks

It is possible to add more advanced elements such as Expandables and Tabs. These are created using specific GitBook syntax

Learn more about how to work with these elements on the official GitBook documentation:

  • Expandables

  • Tabs

Avoid editing the HTML used to generate Cards on landing pages in the Umbraco Documentation.

To request changes, contact the Umbraco HQ Documentation Team.

Submit a Pull Request

Learn the two different ways to submit a PR to the Umbraco Documentation.

You can contribute to the Umbraco Documentation by submitting a Pull Request (PR). A PR is a way to suggest changes to an open-source project, such as fixing errors, improving readability, or adding new content.

There are two ways to create a PR:

  1. Edit a file directly on GitHub.

  2. Create a fork of the GitHub repository.

You need a GitHub account to create a Pull Request.

Option 1: Creating a PR directly on GitHub

You can submit a PR directly from our . You can also use the button on the right side of every article title. This allows you to jump straight into the file on GitHub and suggest your changes.

Following the approach is recommended for changes such as:

  • Fixing typos or grammar mistakes.

  • Changes that are confined to a single article.

  • Updating code snippets.

  1. Navigate to the article you want to edit.

  2. Select "Edit on GitHub" from the right side of the article.

  3. Select the 🖊️ icon to start editing the article.

  4. Make the changes.

  5. Add a commit message describing what you changed.

  6. Select Propose changes.

  7. Fill in the required information in the PR description.

  8. Select Create pull request to submit the PR.

Are you working on a larger update that includes pictures and editing multiple files? Create a fork and follow the approach outlined in .

Option 2: Creating a PR through a Fork

The second option to submit a PR is by using a fork of the Umbraco Documentation repository. This method requires more initial setup but lets you reuse your fork for future contributions.

Following the approach is recommended for changes such as:

  • Writing new articles or guides.

  • Adding updates that affect multiple articles.

  • Applying an update that needs to be added to multiple versions.

There are a lot of great tutorials available online on .

If you do not have Git installed on your machine, follow before moving on.

Step 1: Creating a Fork

  1. Ensure Git is installed on your machine.

  2. Go to the .

  3. Select Fork in the top-right corner to create a personal copy of the repository.

Once the fork is created:

  1. Clone your fork to your local machine.

  2. Make your changes in a local branch.

  3. If you add a new article, update the SUMMARY.md file to include it in the documentation navigation.

  4. Sync your changes back to your fork.

If you’ve had your fork for a while, sync it with the original repository before starting new changes. This process is called rebasing.

To sync via command line:

  • Set the original repository (UmbracoDocs) as an upstream to sync from.

  • Fetch the updates.

  • Update your own fork.

To sync via GitHub:

  • Use the Sync fork option when your fork is behind the original repository.

Step 2: Creating a PR

Once you have made changes and are happy with the result, you can create a PR.

  1. Navigate to the Code section of your fork.

  2. Select Contribute > Open pull request.

  1. Add a title and description explaining your changes.

  2. Select Create pull request to submit a PR to the original repository.

Step 3: The Review Process

Your PR will be reviewed by the documentation team at Umbraco HQ.

Review times can vary based on the size and complexity of the contribution—from a few minutes to several weeks.

git remote add upstream https://github.com/umbraco/UmbracoDocs/
git fetch upstream
git rebase upstream/main
repository
Option 2: Creating a PR through a fork
how to fork a repository (GitHub)
these instructions
Umbraco Documentation repository
Highlighting the GitHub Edit button
Highlighting the Edit on GitHub button.
Creating a fork
Fork of documentation
Highlight option to contribute directly from fork to original repository.
Submit Feedback

How to contribute

Contributing to Umbraco UI

Please review this document to help to streamline the process and save everyone's precious time.

This repo uses nodejs, so you should install nodejs as the package manager. See installation guide.

Guidelines for contributions that we welcome

Not all changes are wanted, so on occasion we might close a PR without merging it. We will give you feedback why we can't accept your changes and we'll be nice about it, thanking you for spending your valuable time.

Remember, it is always worth working on an issue from the Up-for-grabs list or even asking for some feedback before you send us a PR. This way, your PR will not be closed as unwanted.

Feature requests or ideas should be submitted as a discussion first and may then later be converted into an issue.

Ownership and copyright

It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.

Similarly, if your contribution is copied or adapted from somewhere else, make sure that the license allows you to reuse that for a contribution to Umbraco.UI and Umbraco-CMS.

If you're not sure, leave a note on your contribution and we will be happy to guide you.

When your contribution has been accepted, it will be MIT licensed from that time onwards.

What can I start with?

Unsure where to begin contributing to the Umbraco UI library? You can start by looking through these Up-for-grabs issues

Pull Requests (PRs)

We welcome all contributions. There are many ways you can help us. This is few of those ways:

Before you submit a new PR, make sure you run npm run test. PR must pass all the tests before it can get merged.

Reviewing PRs

As a PR submitter, you should reference the issue if there is one, include a short description of what you contributed and, if it is a code change, instructions for how to manually test out the change.

Please follow the pull request template you get provided when creating a pull request.

NOTE: Although the latest released version of Umbraco UI corresponds to the main branch, then development happens in the dev branch. If you submit a PR, branch off dev and target your PR to dev.

Development Guide

The UI Library components are web components built with Lit and Typescript. Lit is a light-weight base class that makes development of web components easier and handles all the necessary things, attaching shadow root, reactivity, attribute reflection etc. We strongly encourage you to take a look at Lit documentation before starting development.

Using Typescript is mandatory when contributing to this repository, although it is not necessary to use it when consuming the components.

How to get started

  1. Make sure you have the recommended version of node.js and npm installed

    1. Currently we use node.js v16 and npm v8

  2. Run npm install

  3. Run npm run storybook to start the storybook server, which we also use for development

New component

You can create a new component and that way contribute to the UI library. But before you do that, go to the packages folder and check if it's not already there. You can also look at the Components list for an inspiration, where you can check what component is in what stage.

Package anatomy

Each component is a separate npm package and has a fixed file structure that looks as follows:

  • packages

    • new-component-name

      • lib

        • index.ts

        • new-component-name.element.ts

        • new-component-name.test.ts

        • new-component-name.story.ts

      • package.json

      • README.md

      • rollup.config.js

      • tsconfig.json

To scaffold these files run:

npm run new-package
npm i

tsconfig.json file is generated automatically when the postinstall script runs.

Properties and attributes

Reactive properties are what creates the component's public api API. They all have corresponding attribute, through which the property can be initialized when the custom element gets instantiated and connected to the DOM. By default the property is not reflected to the attribute, meaning if property value changes the attribute in the markup will keep its initial value, but it will stay observed - changing its value wil change the property. Attributes can also be reflected, and used for styling purposes for example.

Each property you create should be documented with a jsdoc snippet. You can see an example of a property below.

  /**
   * Disables the button, changes the looks of it and prevents if from emitting the click event
   * @type {boolean}
   * @attr
   * @default false
   */
  @property({ type: Boolean, reflect: true })
  disabled = false;

Best practices for contributing to this library

  • Properties should only use attr-reflection for styling - don’t map component-state to classes - use attr-reflection!

  • New dependencies can only be added by HQ-team and only after scrutinizing debate (to keep size down)

  • Components versions can only be bumped by HQ-team

  • Components can’t assume Umbraco context

  • Elements shouldn’t depend on TagNames - their own or children - instead use :host or this and use classes/id’s for selection

  • Elements always use a shadow-root (shadowDOM - for encapsulation)

  • Styles should have as simple rules as possible

  • UI-events should be unique types that extend from our UUIEvent (see uui-base package) (for typing reasons)

  • When applicable, elements should follow aria accessibility patterns

Before a new element can me merged

  • Element name must be prefixed with “UUI-”.

  • Element must have tests and pass them.

  • Element must pass basic Accessibility tests.

  • Element must have a storybook setup.

  • Source-code must follow the ES-lint rules.

Have A Question?

A feature suggestion? Or maybe you think we could do something in other way? Start by filing an issue.

Building the codebase

Are you sure?

In order to use Umbraco as a CMS and build your website with it, you should not build it yourself. If you're reading this then you're trying to contribute to Umbraco or you're debugging a complex issue.

  • Are you about to ?

  • Are you trying to get to the bottom of a problem in your existing Umbraco installation?

If the answer is yes, please read on. Otherwise, make sure to head on over and start using Umbraco CMS as intended.

Getting Started

To run umbraco, we first need to initialize the client git submodule:

  • Execute git submodule update --init to get the files into \src\Umbraco.Web.UI.Client folder.

    • This can be executed in the root folder of your cloned repository.

  • If you are going to run Umbraco for testing, execute dotnet run inside the \src\Umbraco.Web.UI folder.

  • If you are going to work on the Backoffice, you can either go to the \src\Umbraco.Web.UI.Client folder and check out a new branch or set it up in your IDE, which will allow you to commit to each repository simultaneously:

    • Rider: Preferences -> Version Control -> Directory Mappings -> Click the '+' sign

  • If you get a white page, delete \src\Umbraco.Cms.StaticAssets\wwwroot\umbraco folder and run npm ci && npm run build:for:cms inside the src\Umbraco.Web.UI.Client folder to clear out any leftover files from older versions.

Latest version

  • If you want to get the latest changes from the client repository, run git submodule update again which will pull the latest main branch.

Debugging source locally

Did you read ?

If you want to run a build without debugging, see below. This runs the build in the same way it is run on our build servers.

Debugging with VS Code

In order to build the Umbraco source code locally with Visual Studio Code, first make sure you have the following installed.

  • npm v7+ (installed with Node.js)

Open the root folder of the repository in Visual Studio Code.

To build the front end you'll need to open the command pallet (Ctrl + Shift + P) and run >Tasks: Run Task followed by Client Watch and then run the Client Build task in the same way.

You can also run the tasks manually on the command line:

If you just want to build the UI Client to Umbraco.Web.UI then instead of running dev, you can do: npm run build.

The login screen is a different frontend build, for that one you can run it as follows:

If you just want to build the Login screen to Umbraco.Web.UI then instead of running dev, you can do: npm run build.

The initial Gulp build might take a long time - don't worry, this will be faster on subsequent runs.

You might run into .

The caching for the back office has been described as 'aggressive' so we often find it's best when making back office changes to to help you to see the changes you're making.

To run the C# portion of the project, either hit F5 to begin debugging, or manually using the command line:

The initial C# build might take a _really_** long time (seriously, go and make a cup of coffee!) - but don't worry, this will be faster on subsequent runs.**

When the page eventually loads in your web browser, you can follow the installer to set up a database for debugging. You may also wish to install a to ease your debugging.

Debugging with Visual Studio

In order to build the Umbraco source code locally with Visual Studio, first make sure you have the following installed.

  • ( for you to use to contribute to Open Source projects)

  • npm v7+ (installed with Node.js)

The easiest way to get started is to open umbraco.sln in Visual Studio.

To build the front end, you'll first need to run cd src\Umbraco.Web.UI.Client && npm install in the command line (or cd src\Umbraco.Web.UI.Client; npm install in PowerShell). Then find the Task Runner Explorer (View → Other Windows → Task Runner Explorer) and run the build task under Gulpfile.js. You may need to refresh the Task Runner Explorer before the tasks load.

If you're working on the backoffice, you may wish to run the dev command instead while you're working with it, so changes are copied over to the appropriate directories and you can refresh your browser to view the results of your changes.

The initial Gulp build might take a long time - don't worry, this will be faster on subsequent runs.

You might run into .

The caching for the back office has been described as 'aggressive' so we often find it's best when making back office changes to to help you to see the changes you're making.

"The rest" is a C# based codebase, which is mostly ASP.NET Core MVC based. You can make changes, build them in Visual Studio, and hit F5 to see the result.

The initial C# build might take a _really_** long time (seriously, go and make a cup of coffee!) - but don't worry, this will be faster on subsequent runs.**

When the page eventually loads in your web browser, you can follow the installer to set up a database for debugging. You may also wish to install a to ease your debugging.

Building from source

Did you read ?

Do note that this is only required if you want to test out your custom changes in a separate site (not the one in the Umbraco.Web.UI), if you just want to test your changes you can run the included test site using: dotnet run from src/Umbraco.Web.UI/

You may want to build a set of NuGet packages with your changes, this can be done using the dotnet pack command.

First enter the root of the project in a command line environment, and then use the following command to build the NuGet packages:

dotnet pack -c Release -o Build.Out

This will restore and build the project using the release configuration, and put all the outputted files in a folder called Build.Out

You can then add these as a local NuGet feed using the following command:

dotnet nuget add source <Path to Build.Out folder> -n MyLocalFeed

This will add a local nuget feed with the name "MyLocalFeed" and you'll now be able to use your custom built NuGet packages.

Cleaning up

Once the solution has been used to run a site, one may want to "reset" the solution in order to run a fresh new site again.

The easiest way to do this by deleting the following files and folders:

  • src/Umbraco.Web.UI/appsettings.json

  • src/Umbraco.Web.UI/umbraco/Data

You only have to remove the connection strings from the appsettings, but removing the data folder ensures that the sqlite database gets deleted too.

Next time you run a build the appsettings.json file will be re-created in its default state.

This will leave media files and views around, but in most cases, it will be enough.

To perform a more complete clear, you will want to also delete the content of the media, views, scripts... directories.

The following command will force remove all untracked files and directories, whether they are ignored by Git or not. Combined with git reset it can recreate a pristine working directory.

For git documentation see:

  • git

  • git

Azure DevOps

Umbraco uses Azure DevOps for continuous integration, nightly builds and release builds. The Umbraco CMS project on DevOps ..

The produced artifacts are published in a container that can be downloaded from DevOps called "nupkg" which contains all the NuGet packages that got built.

Quirks

Git Quirks

Git might have issues dealing with long file paths during build. You may want/need to enable core.longpaths support (see for details).

Gulp Quirks

You may need to run the following commands to set up gulp properly:

cd src\Umbraco.Web.UI.Client
npm i
npm run dev
cd src\Umbraco.Web.UI.Login
npm i
npm run dev
dotnet watch --project .\src\Umbraco.Web.UI\Umbraco.Web.UI.csproj
git clean -xdf .
npm cache clean --force
npm ci
npm run build
create a pull request for Umbraco
to the download page
"Are you sure"
More details about contributing to Umbraco and how to use the GitHub tooling can be found in our guide to contributing.
Building from source
Visual Studio Code
dotnet SDK v7+
Node.js v14+
Git command line
Gulp quirks
disable caching in the browser (check "Disable cache" on the "Network" tab of developer tools)
starter kit
Visual Studio 2022 v17+ with .NET 7+
the community edition is free
Node.js v14+
Git command line
Gulp quirks
disable caching in the browser (check "Disable cache" on the "Network" tab of developer tools)
starter kit
"Are you sure"
clean
reset
is available for anonymous users
this page

Code Samples

When adding code snippets to the Umbraco documentation, refer to this article for tips on how to improve the samples.

The articles in the Umbraco Documentation can, in most cases, benefit from relevant code samples to support the written text.

This article provides guidelines for formatting and using code samples in the Umbraco Documentation.. You will find definitions and examples of the most commonly used types of code samples.

Example

HomePageView.cshtml
@if (Model.ColorTheme != null)
{
    var value = Model.ColorTheme;
    <p>@value</p>
}

Markdown

{% code caption="HomePageTemplate.cshtml %}

```csharp
@if (Model.HasValue("colorTheme"))
{
    var value = Model.Value("colorTheme");
    <p>@value</p>
}
```

{% endcode %}

Good practices

To ensure quality and consistent code samples, follow these best practices when adding code snippets:

  • Define the context

  • Add a Caption (file name)

  • Use code comments in longer code snippets

  • Use real-life samples

  • Add correct syntax highlighting

  • Add only complete compilable samples

  • Check for syntax errors

  • Use File-Scoped Namespaces

  • Use line numbers only when relevant

Each guideline is explained in more detail below.

Define the context

Code samples without context, explanations, and instructions can lead to issues when used.

Always add a clear description of what the code sample showcases when adding a snippet to an article. It should be clear where and when the snippet can be used.

Add a Caption (file name)

Inform the reader which file or file type a code snippet should be added to.

Aside from mentioning this in the description of the code snippet, it is also recommended to add the file name as a caption.

If the code snippet is from a .cs file, add fileName.cs as the caption.

Example:

Screenshots of a code snippet where the file name is defined using the caption.

Markdown example:

{% code caption="ErrorController.cs" %}

```csharp

...
```

{% endcode %}

Use code comments

When adding code samples that contain more than a single feature or method, it is recommended to add inline comments.

By adding inline comments, you avoid having too much text surrounding the code sample. You also help readers understand the code snippet in detail.

Use real-life samples

The documentation often aims to explain complex scenarios and concepts within Umbraco. Code samples can be useful to improve understanding. The code samples should, where possible, be real-life examples.

For example, using variables such as foo and bar can distract from the intent of the example. Aim to use an example that would make sense to add to a production environment.

To keep the code sample as neutral and general as possible, make it a habit to use placeholders for names, methods, and the like.

With Umbraco, there are often more than one way to achieve a result. It depends on context and the skillset of the development team. Providing multiple examples can help prevent readers from mixing techniques in their solution. An example could be providing a Models Builder version and a non-Models Builder version when documenting Templates.

Add correct syntax highlighting

When you add code blocks to an article, make sure to add the correct syntax highlighting. This will "prettify" the code in the sample based on which language is used.

Syntax highlighting makes the code snippet easier to read, as it allows the reader to distinguish between the different code elements.

Example:

Example of a code snippet that uses the correct syntax highlighting.
Example of a code snippet that is missing syntax highlighting.

Markdown example:

{% code caption="ErrorController.cs" %}

```csharp
using Microsoft.AspNetCore.Mvc;

namespace YourProjectNamespace.Controllers;

...
```

{% endcode %}

If the language used in a snippet isn't supported, use none.

Add only complete compilable samples

A reader of the Umbraco Documentation should be able to grab code samples in the articles and apply them directly to their solution. The code in the sample should compile.

Include any relevant Using statements for namespaces that provide 'extension' methods and key functionality.

Check for syntax errors

When reading any piece of text, it can be frustrating to run into spelling and syntax errors. This also applies to code samples.

Any code that is added to articles in the documentation should be double-checked for syntax errors and typos.

Use File-Scoped Namespaces

The use of file-scoped namespaces improves the readability of the code samples. Use file-scoped namespaces in the examples. Below is an example of how to use file-scoped namespaces:

With File-Scoped Namespace

namespace MyProject;

public class Umbraco
{
}

Without File-Scoped Namespace

namespace MyProject
{
    public class Umbraco
    {
    }
}

Use line numbers only when relevant

It is recommended to use line numbers only when you will be adding text that references specific lines and elements in a larger code snippet.

Example:

An image of a code samples that uses line numbers.

Markdown example:

{% code title="UmbracoAppAuthenticatorComposer.cs" lineNumbers="true" %}

```csharp
namespace My.Website;

...
```

{% endcode %}

When to use code samples

Code samples are relevant for most types of articles. Potentially, any topic covered could benefit from a real-life code sample to support the article content.

In most cases, you will want to base an article on a single code sample. If you're describing a flow or feature, you will, however, want to add smaller code snippets to highlight specific points.

Types of samples

The Umbraco Documentation operates with three types of code samples.

Inline code

Use inline code when:

  • Referencing methods.

  • Using the names of certain code elements.

  • Highlighting a certain value.

Example:

Each item is treated as a standard `IPublishedElement` entity, which means you can use all the value converters you are used to using.

The markdown above will output the following:

Example of inline code

Smaller code snippets

As part of longer articles or tutorials, use smaller code snippets to highlight what must be implemented.

These snippets can be added between sections anywhere in an article without breaking focus from the main topic. Keep in mind that adding too many snippets in quick succession can confuse the flow of the article.

Example:

@{
    // Perform an null-check on the field with alias 'pageTitle'
    if (Model.HasValue("pageTitle")){
        // Print the value of the field with alias 'pageTitle'
        <p>@(Model.Value("pageTitle"))</p>
    }
}

The Razor snippet above will output the following:

Example of smaller code snippet

Large code samples

As part of tutorials and longer articles covering a specific workflow, it might make sense to add longer code snippets or even entire files.

It is recommended to add longer code snippets into Expandables using the file name as the title. When adding code snippets into expandables, the reader can expand the code only when they are ready.

It is highly recommended to use line numbers in large code samples. This will make it easier to reference certain parts of the sample in the surrounding text.

Style Guide

Keep the Umbraco documentation accessible, consistent, and readable by following the style guide defined in this article.

To ensure that the documentation is readable and has a similar style throughout, follow the guidelines outlined in this article. A GitHub bot will check PRs for broken rules and advise you on what to change.

Text Formatting

Below you will find a description of each rule the Umbraco Documentation follows.

Avoid Punctuation in Headings

Don't use punctuation in headings and headlines. These should act as titles, and no punctuation is necessary.

For consistency, this rule will give a warning if you end headings with either of these punctuation symbols:

  • ?

  • :

  • .

Avoid Double spacing

To ensure readability and consistency, this rule will warn you if you have more than one space in a row in your text.

Use Lists when Listing more than 2 Items/Steps

There are two types of commonly used lists in the Umbraco documentation: ordered lists and unordered lists.

  • Use ordered lists for sequential task steps.

  • Use unordered lists for sets of options, notes, criteria, and the like.

  • Start lists with capital letters.

    • An exception to this rule would be when listing method names that use camelcase. In this case, highlight the names using in-line code formatting.

Ordered lists

To keep ordered lists short and to the point, follow these guidelines:

  • Start each item on the list with the action word.

    • ⛔ The next thing to do, is to navigate to the Content section.

    • ✅ Navigate to the Content section.

  • Add a maximum of two actions per list item.

  • Keep each list item short and to the point.

    • Add additional information in one or more sub-list items.

Language

Write in the second person

Address the reader directly using "you".

⛔ The user should add the Document Type by clicking the Add button.

✅ You can add the Document Type by clicking…

Use the present tense and active voice

Use the present tense for statements that describe general behavior that's not associated with a particular time.

⛔ The Document Type was added…

✅ The Document Type is added...

Avoid Editorializing

The words in the list below will cause a warning when included in your contribution.

Avoid using the following words, as they are often opinionated. What may be 'easy' for you might not be easy for another user reading the article.

In most cases, these words can be removed entirely, whereas a rephrasing might be necessary in other cases.

  • Simple

  • Simply

  • Just

  • Easily

  • Actually

Avoid Long sentences

This rule flags any sentence longer than 25 words. Shorter sentences improve clarity and readability.

The rule is added to improve the readability of the documentation. When a sentence is longer than 25 words, the readability is degraded. This is especially true for technical content that is meant to be instructional.

Avoid using "it" or "this" as references

To avoid confusion, don't use "it" or "this" to refer to an action or item referenced at an earlier point. The only exception to this rule is when used within the same sentence.

⛔ This can now be configured.

✅ The Document Type can now be configured.

Terms and Names

Terms (general)

This rule flags any use of discouraged terms in the Umbraco Documentation.

Example: The term blacklist must be avoided and replaced with deny list.

For a full list of terms, please check the style rule.

Umbraco Terms

This rule is added to ensure that Umbraco-specific terms and names are spelled and used consistently throughout the documentation.

The list of Umbraco Terms includes, but is not limited to Umbraco, backoffice, Document Type, and Umbraco Forms.

Acronyms

All first-time uses of an acronym in an article need to be accompanied by a definition of that acronym. If an acronym is not defined on its first use in an article, the checker will give a warning.

Acronyms are defined using either a parenthesis or a colon followed by the definition.

Examples of the use of acronyms:

⛔ Members will only have access to CDN endpoints.

✅ Members will only have access to Content Delivery Network (CDN) endpoints.

⛔ YSOD (.Net error page)

✅ YSOD: Yellow Screen of Death, .NET error page

Names

To ensure that markup languages and other names are capitalized correctly, a rule has been added to check for this.

The rule will ensure that instances of HTML and CSS are always written using only capital letters. It will also check whether JavaScript is written in full.

Brands

In some cases, throughout the documentation, other software providers or brands are referenced. This rule is added to ensure that the most commonly used brand names are spelled and capitalized correctly.

The rule will, as an example, ensure that the names Microsoft and Slack are always capitalized.


Test the documentation yourself

One of the big strengths of Vale is that it is possible for a contributor to run the tests locally before creating a PR. Below are a couple of options on how to test the documentation.

Visual Studio Code extension

There is an extension for Visual Studio Code that allows you to use Vale as you are writing documentation. It can also be used to run checks on existing articles and find where potential changes are needed.

The extension is called vale-vscode and can be downloaded via the Visual Studio Code Marketplace in your editor.

To use it, you will still have to install a Vale Server on your computer. For more information, see the official Vale installation article.

Once the tools have been installed, a check of the complete repository of articles can be done using the terminal within Visual Studio Code.

Run the following command:

vale --glob='*.md' .

The Vale extension will also run automatically when you are viewing Markdown files. It will present warnings directly in the document as you write, based on the style rules set for the project. It will look similar to this:

Example of the extension
Use Vale locally

The first step to running Vale locally is to install it following Vale's Installation documentation.

Next, you can open a command line tool in the documentation repository and run the following command:

vale --glob='*.md' .

This tells Vale to test all markdown files (.md) in the current directory (.). The output will look something like this:

Vale Output

It will show you what file has issues. In the case above the v8documentation.md the article broke the HeadingsPunctuation rule, and it did so in the following places:

  • Line 15, column 36

  • Line 59, column 15

  • Line 64, column 12

When the check has run you will get the total amount of errors, warnings, and suggestions including how many files have been checked.

Submit Feedback

Learn how to provide feedback on the Umbraco Documentation.

There are different ways to submit feedback on the Umbraco Documentation, whether it's about a single article or the platform as a whole. Your input helps us improve and prioritize what matters most to the community.

This article gives you an overview of the different feedback channels and how to use them.

Submit Feedback on an Article

On the right-hand side of every article, you'll find an option to submit feedback directly related to that article.

Rate the documentation by sharing whether an article was helpful.

Sharing your feedback helps the team at Umbraco HQ provide better material across the products.

The feedback is used when determining which articles need to be reviewed by the documentation team at Umbraco HQ.

Submit a GitHub Issue

The Issue Tracker is a way to keep track of ideas, issues with wrong or outdated documentation, and discussions with contributors.

Here are a few examples of when to create an issue:

  • You are looking for a specific piece of information, but can't find it.

  • You've found a broken link in one of the articles, but don't know how to fix it.

  • An article contains outdated or incorrect information, and you don't have time or knowledge to submit a PR.

  • You would like to propose a new section or discuss improvements to existing documentation.

Creating an Issue

  1. Go to the Issue Tracker on GitHub.

  2. Select New Issue.

New issue on GitHub
  1. Fill out the form, answering the questions to explain your suggestion or problem clearly.

  2. Submit the issue.

How to Contribute

Whether you've found a broken link or want to add a new article, this guide will help you contribute to the Umbraco documentation.

The Umbraco Documentation is presented here on GitBook. The documentation is also available as a GitHub repository and is open-source, just like the Umbraco CMS.

You can contribute to the documentation if something is missing or outdated. A GitHub account and a fork of the UmbracoDocs GitHub repository are required.

How to Get Started

There are many ways in which you can contribute to the Umbraco Documentation. The approach you choose to take depends on what you want to achieve with your contribution.

  • Request a quick/minor change to an article by submitting a Pull Request.

  • Submit a more extensive update or change by forking the Documentation repository.

  • Raise a question, start a discussion, or report an issue on the Issue Tracker.

  • Help improve the readability of the documentation by verifying articles against our Style Guide.

Style guide

Consistency and readability are important when writing and reading documentation. When you contribute, follow the style guidelines and rules outlined in the Style Guide.

Markdown and formatting

The Umbraco Documentation is written using the Markdown markup language.

File names and structure

Learn how we structure and name files in the Umbraco documentation.

Writing documentation locally

Use a text editor like Visual Studio Code to make changes to the documentation locally. Although it is possible, it is not recommended to use an Integrated Development Environment (IDE) like Visual Studio for making changes to the documentation on your local machine. This is because the IDE may create files in the project that are not needed for the document changes to be implemented.

Multi-version documentation

Whenever a new version of an Umbraco product is released, the previous way of doing things may change. This means that multiple versions of our documentation must exist.

Versioning is done via the file structure, where all versioned products are located under a folder named by the major version of Umbraco.

For example, version folders such as '10' and '11' contain documentation specific to those product versions.

An overview of the file structure in the UmbracoDocs GitHub repository.

Umbraco Cloud and Umbraco Heartcore are not documented by version, which is why they are separate from this structure.

Learn more about how versioning is managed in the Documenting multiple versions and products article.

Labels

On both Issues and Pull Requests, labels are used to categorize the requests and submissions.

Here's a quick explanation of the labels (colors):

  • Category

    • category/missing-documentation

    • category/umbraco-cloud

    • category/pending-release

  • Community

    • community/pr

    • help wanted

  • State

    • state/hq-discussion

  • Status

    • status/awaiting-feedback

    • status/idea

  • Type

    • type/bug

  • Internal Review

    • review/docsteam

    • review/developer

Labels are added during the initial review of your pull request or issue.