Blog / How to Create a Parametric Mesh Railing in Revit

How to Create a Parametric Mesh Railing in Revit

Build a parametric wire mesh railing in Revit from a duplicated system type: a custom circular profile family, stacked rails, baluster patterns and posts, with video timestamps.

M
Manish Simon
· 18 min read

Go deeper with Archgyan Academy

Structured BIM and Revit learning paths for architects and students.

Explore Academy →

A balcony, a stair or a terrace edge reaches the detail stage and the architect asks for a fine wire mesh infill instead of the vertical balusters the default Revit railing gives you. The temptation is to draw it as a flat panel, or to leave the out of the box type in place and fix it on the drawings. Both choices cost you later. A flat panel does not schedule or cut correctly in section, and a placeholder type means every elevation, every section and every rendering shows something that is not what will be built.

The Revit railing system can build a proper mesh. It takes a duplicated system type, a small profile family, a stack of horizontal rails and a repeating baluster pattern. Once the type exists, it is reusable across every railing sketch and every stair in the project, and it flexes when the specification changes. The whole thing takes about fifteen minutes.

The walkthrough below follows a recorded build from the Archgyan Revit channel. Every step described in the main sections is a step demonstrated in the video, with links to the exact moment. The sections on standards, team conventions and QA are the parts a fourteen minute recording cannot fit, and they are labelled as such.

Set the units before you touch a railing

The build starts in a fresh project on the architectural template, and the first action is not the railing tool. It is the UN shortcut, to check project units. The template opens in millimetres and the demonstration switches the length unit to metres at 0:18 because the rail structure and baluster placement dialogs are about to take a lot of typed values, and 0.1 is faster to enter ten times than 100.

This matters more than it sounds. Every value you type into the rail structure table, the baluster spacing fields and the profile family is interpreted in the project’s current length unit. If you switch units halfway through, nothing breaks, but the numbers you wrote down in your notes stop matching what you see on screen. Pick a unit at the start and keep it for the whole session. Office standards usually fix this in the project template, so on a live job you should not need to change anything; in a scratch file like this one, check it first.

Sketch a simple railing and duplicate its type

With the units settled, the demonstration goes to Architecture, Railing, uses the Line tool and sketches an L-shaped path at 0:34, then finishes with the green tick. The type in use is the default 1100 mm railing, which in 3D is a handrail on top with evenly spaced vertical balusters below. It is deliberately plain. The point is to have a host sketch that the new type can be developed against, so you can see each change as you make it.

Then comes the step that protects the rest of the project. The railing is selected, Edit Type is opened, and before any value changes the type is duplicated and named Mesh Railing at 1:06. Railings are system families, so the type you edit is shared by every railing instance that uses it. Editing the stock 1100 mm type in place would silently change every railing in the model that already uses it. Duplicate first, every time, and name the copy for what it is.

The first edit on the new type is the height. The Railing Height parameter is changed from 1.1 m to 1.2 m at 1:23, and because the Top Rail is switched on, the top rail height updates with it. On a real project this value comes from the building code for the location and the fall height, not from preference. 1.1 m is a common minimum for balconies in many European codes, and higher values apply where the drop is large or the use is public. Check the applicable standard before you set it.

Insert the horizontal rails in the rail structure

The mesh is built as two families of members: horizontal wires from the Rail Structure, and vertical wires from Baluster Placement. The horizontals come first.

In the type properties, Rail Structure (Non-Continuous) has an Edit button. The table opens blank, which is why the stock railing shows only balusters and a top rail. The demonstration inserts ten rails at 1:44 and sets their heights at 0.1, 0.2, 0.3 and so on up to 1.0 m, a 100 mm pitch from the host up to one metre. Each row in this table is one continuous horizontal member that follows the railing path. The columns that matter are the height, the lateral offset, the profile and the material.

Apply at this stage and the result is correct in principle but wrong to look at: the default profile assigned to each rail is far too heavy, so the infill reads as a stack of thick bars at 2:30. The rail structure is doing its job. The profile is the problem, and that needs its own family.

Build a circular profile family for the wire

Profiles in Revit are small 2D families. The rail structure sweeps a profile along the railing path, so whatever closed loop you draw in the profile family becomes the cross section of the wire.

The demonstration goes to File, New, Family and opens the Metric Profile template at 2:38. There is also a Metric Profile-Rail template; the general profile works for this purpose and is what the video uses. In the template, the Create tab’s Line tool has a circle option, and a circle with a 2 mm radius is placed at 2:56. A 4 mm wire diameter is a plausible mesh gauge, and because the radius is about to become a parameter, the exact value is easy to change.

Two small habits in this step separate a profile that behaves from one that drifts:

  1. Lock the circle to the reference planes. With the circle selected, the Center Mark Visible option in the properties exposes the centre point, and the demonstration snaps that centre to the intersection of the two reference planes at 3:11. Without this, the profile’s origin is wherever you happened to click, and the wire sits off its intended line when it is swept. You can switch the centre mark off again once it is constrained.
  2. Make the radius a parameter. Clicking the temporary dimension makes it permanent, and with the dimension selected the Label dropdown lets you add a new parameter called Radius at 3:39. The circle now flexes from the family types dialog. The video also scales the dimension style down to 1:1 because the default annotation size dwarfs a 2 mm circle, which is cosmetic but makes the family readable.

Save the family into your office library with a descriptive name. The demonstration uses a name along the lines of Profile Circle Parametric and sets the number of backups to one at 4:47, which keeps the library folder clean of .0001.rfa clutter.

Set the profile usage to Railing before you load

This is the step that, if missed, makes the new profile invisible in the railing dialog, and it is easy to miss because the family already looks finished.

In the profile family, open Family Category and Parameters. The category is already Profile, but the family parameter Profile Usage defaults to a generic value. The demonstration changes Profile Usage to Railing at 5:00. Revit filters the profile dropdowns in the rail structure table by this usage, so a profile left on the default usage simply does not appear in the list, and nothing tells you why. Set it, click OK, then Load into Project and Close, and save the family.

Back in the project, open the rail structure again and assign the new profile at 5:27. With ten rows to change, the fast way shown is to select the profile name in one row, copy it, and paste it into the profile cell of each other row; the dropdown works too, it is just slower. Each row also has a material field if the wire needs to differ from the frame. Apply, and the stack of thick bars becomes a stack of fine lines.

The video then shows the payoff of the parametric radius. The first result still looked slightly heavy, so the profile family is reopened, the radius set to 2 mm and reloaded at 6:24. On reload, Revit asks how to handle the existing version; choose Overwrite the existing version and its parameter values so the project picks up the new size. The instructor makes a point worth repeating: do not create new family types for each size you try. A second type means going back into every rail row to reselect it. Change the single type’s value and overwrite.

Name the rails and add the top horizontal

A mesh infill needs a defined top edge for the vertical wires to terminate against, and the baluster pattern is about to reference rails by name. The demonstration returns to the rail structure, adds an eleventh rail at 1.1 m at 7:00, gives it the circular profile, and then renames the rows so the 1.1 m member is Top Rail and the 0.1 m member is Bottom Rail.

Rail names are not decoration. The baluster placement dialog offers rails as the Base and Top references for each baluster, and it offers them by name. A table full of Rail 1 to Rail 11 forces you to remember which index is which. Named rails make the next dialog legible for you and for whoever edits this type after you.

Build the vertical wires with baluster placement

The vertical wires are balusters. Back in the type properties, Baluster Placement has its own Edit button, with a main pattern table and a separate posts table. In the stock type the pattern is a single regular baluster at 275 mm centres between the start and end posts. The demonstration sets the spacing to 0.1, the Base to Bottom Rail and the Top to Top Rail at 7:51, so each vertical wire runs exactly between the two named horizontals instead of from the host to the handrail.

Then comes a limitation that is worth understanding rather than fighting. When the baluster family dropdown is opened, the new circular profile is not in the list at 8:17. Profiles are 2D sections swept along a path; balusters are 3D families built from the Metric Baluster template. The two categories are not interchangeable, and a proper wire baluster would need its own baluster family. The video leaves that for a separate tutorial and uses a workaround that gets the same geometry from what ships with the template.

The workaround: in the Project Browser, find the Baluster - Round family, right-click it, and create a new type at 8:50. The type’s Diameter parameter is set to 0.004 m, and the type is renamed 4 mm so its name says what it is. Back in baluster placement, the new 4 mm round baluster is selected for the pattern at 9:36. Apply, and the vertical wires appear at 100 mm centres between the two named rails. The mesh now exists.

Give the frame its own profiles and posts

A wire mesh needs a frame. In the demonstration the top and bottom rails are changed from the wire profile to a heavier section: the Profile Handrail Square 20 mm that ships with the template, assigned to both rails at 10:01. You can of course author your own frame profile using the same Metric Profile process, with Profile Usage set to Railing.

The posts come next. The posts table at the bottom of the baluster placement dialog already holds a start, corner and end post, using a 25 mm square baluster. The demonstration changes those to 20 mm at 10:43 to match the frame section. Then an intermediate vertical support is added to the main pattern: the existing vertical baluster row is duplicated and set to the 20 mm square baluster at 11:11.

The first result shows why the pattern table rewards care. The new square post lands on top of a round wire because its Distance from Previous is zero and both members sit in the same position. Setting an offset separates them, but then the pattern is one square post followed by one wire, repeating, which is not the design. The pattern table is literally that: a repeating pattern, read top to bottom, with each row placed at the given distance from the one above.

The fix shown is to duplicate the round 4 mm baluster row several times at 11:59, each at 0.1 m from the previous, so the pattern becomes one square support followed by a run of wires, repeating. The demonstration builds it out to ten wires, giving a support every metre. Then the square support’s references are changed to run from Host to Top Rail at 12:37, so the post stands from the floor to the handrail while the wires still span only between the two named mesh rails. Apply, and the mesh and its frame read as one assembly.

Fix the pattern ends with justification

One problem remains: the pattern does not close neatly at the end of the run. The demonstration traces it to the Justify setting in the baluster placement dialog, which defaults to Beginning, meaning the pattern starts at the start post and simply stops wherever the length runs out. Setting it to Spread Pattern To Fit at 13:20 distributes the pattern evenly along the segment so both ends land cleanly.

With that change the type is complete. The video closes by sketching a fresh railing with the Mesh Railing type at 13:51, which picks up the mesh, frame and posts automatically, and notes that the same type can be hosted on stairs.

Which tool builds which part

Not in the video, but useful to have in one place. The railing type draws from three places, and knowing which dialog owns which member saves the usual hunting.

MemberWhere it is definedFamily type used in the videoNotes
Horizontal mesh wiresRail Structure (Non-Continuous)Custom circular profile, 2 mm radiusTen rows at 100 mm pitch; profile usage must be Railing
Top and bottom frame railsRail Structure (Non-Continuous)Profile Handrail Square 20 mmRenamed Top Rail and Bottom Rail so balusters can reference them
Vertical mesh wiresBaluster Placement, main patternBaluster - Round, new 4 mm typeBase Bottom Rail, Top Top Rail, 100 mm spacing
Intermediate supportsBaluster Placement, main patternBaluster - Square 20 mmHost to Top Rail, one per metre via the repeating pattern
Start, corner, end postsBaluster Placement, posts tableBaluster - Square 20 mmChanged from the default 25 mm to match the frame
Handrail on topTop Rail parametersDefault top railFollows Railing Height automatically

The distinction between the two tables is the key idea. Anything that runs along the railing is a rail and lives in the rail structure. Anything that stands up is a baluster and lives in baluster placement.

Where this bites on a real project

The recording stops at a working type. A few consequences follow on a live job, and none of them are shown in the video.

Performance. A mesh railing made of eleven swept rails and a dense baluster pattern is heavy compared with a stock railing. Ten metres of it is fine. Three hundred metres of it across a residential block, each instance regenerating whenever a view opens, will be felt. For large quantities consider a coarser representation in plan and section views via the railing’s visibility settings, or a lighter type for early design stages that is swapped for the detailed one when the drawings are issued.

Schedules and quantities. A railing schedules by length, not by wire count. If the contractor needs the mesh area or the wire length, add a calculated value from the railing length and height, or schedule the mesh as a separate line item. Do not expect the baluster count to turn into a sensible quantity.

Sections and details. Because the wires are real geometry, a section through the railing cuts every wire. That is correct and it is also noisy at 1:50. Most offices draw the mesh as a hatched panel in detail views with a detail component and let the model carry the 3D representation. Agree which representation wins at which scale in the drawing standard.

Stairs. The type hosts on stair runs, but stepped rails and raking posts need checking. The Spread Pattern To Fit justification behaves differently on short run segments than on a long balcony edge, and landings may need their own treatment.

Team conventions worth setting

Also beyond the video, and the part that makes this reusable rather than a one-off.

  1. Library location. The profile family belongs in the office library, not in the project folder. The video saves to a dedicated library for exactly this reason. A profile that lives only inside one project gets rebuilt badly on the next one.
  2. Naming. Name the profile by what it is, not by the job: Profile Circle Parametric, not Balcony Wire. Name railing types by their construction: Mesh Railing 1200 Square Frame tells the next person what they are getting.
  3. Parameters over types. The video’s advice to change the radius value and overwrite, rather than spawning types, is the right default for a parametric profile. Only create a second type when two sizes are genuinely needed in the same project.
  4. Rail names. Always rename rails that other members reference. A pattern table pointing at Rail 7 is a maintenance problem.
  5. Put it in the template. Once the type is reviewed, load the profile and the railing type into the project template so every new job starts with it. See the guide on building a Revit project template around office BIM standards for how to structure that.

Common mistakes

Drawn from the steps the video demonstrates and from what usually goes wrong when people repeat them.

  • Editing the stock type instead of duplicating. Every other railing on that type changes with it. Duplicate before the first edit.
  • Profile Usage left on the default. The profile loads without error and never appears in the rail structure dropdown. Set it to Railing before loading.
  • Circle not locked to the reference planes. The swept wire sits off its intended line by whatever distance you were off when you clicked. Use Center Mark Visible and snap to the intersection.
  • Trying to use a profile as a baluster. Profiles are 2D; balusters are 3D families from the baluster template. Use or make a baluster family for vertical members.
  • Zero Distance from Previous on a new pattern row. The new member lands on top of the last one. Set the distance, and remember the table is a repeating pattern.
  • Justify left at Beginning. The pattern runs out unevenly at the end of each segment. Spread Pattern To Fit is the usual answer.
  • Units switched mid-session. Nothing breaks, but 0.1 in one dialog and 100 in another is a recipe for a 100 m rail.
  • Creating a new profile type per trial size. Each new type has to be reselected in every rail row. Change the parameter and overwrite on reload.

Next steps

The mesh railing is a good first system-family exercise because it touches profiles, the rail structure, baluster patterns, posts and justification in one short build, and the result is something you will actually use. The natural follow-on is to author a proper wire baluster from the Metric Baluster template so the vertical members are a real profile rather than the round baluster workaround, and to build the frame profile yourself rather than borrowing the 20 mm square handrail.

If family authoring in general is still new, the Revit family creation fundamentals guide covers templates, reference planes and parameters in more depth, and the recorded build in this post sits alongside the railing and stair material in The Complete Revit Course on Archgyan, where the same approach is taken through a full project from setup to documentation.

Level up your skills

Ready to learn hands-on?

  • Project-based Revit & BIM courses for architects
  • Go from beginner to confident professional
  • Video lessons you can follow at your own pace
Explore Archgyan Academy
← Back to Blog