Table of Contents
- KiCad 6.0 Roadmap
- General
- Object Properties and Introspection
- New project and user settings framework
- Color theme support
- String substitution
- Eeschema: Schematic Editor
- Coherent SCHEMATIC Object
- Implement Sweet (S-Expression) Symbol Libraries
- S-Expression File Format
- Move Common Schematic Code into a Shared Object
- Python Support
- ERC Improvements
- Port Editing Tools to New Tool Framework
- Net Highlighting
- Symbol and Netlist Attributes
- Orthogonal Wire Drag
- Custom Wire and Bus Attributes
- Connectivity Improvements
- Pcbnew: Circuit Board Editor
- Push and Shove Router Improvements
- Selection Filtering
- Design Rule Check (DRC) Improvements.
- Linked Objects
- Keepout Zones.
- Clipboard Support
- Net Highlighting
- Visibility and Colors Improvements
- Hatched Zone Filling
- Board Stack Up Impedance Calculator
- Net Class Improvements
- Ratsnest Improvements
- DXF Improvements
- Improve Dimension Tool
- Constraint Management System
- Append Board in Project Mode
- Grid and Auxiliary Origin Improvements
- Additional Mechanical Layers
- Layer Renaming
- Net Ties
- Curved Trace Support
KiCad 6.0 Roadmap
This document is the KiCad version 6 Developer's road map document. It is living document that should be maintained during the version 6 development cycle. The goal of this document is to provide an overview for developers of the goals for the project for the version 6 release of KiCad. It is broken into sections for each major component of the KiCad source code and documentation. It defines tasks that developers can use to contribute to the project and provides updated status information. Tasks should define clear objectives and avoid vague generalizations so that a new developer can complete the task. It is not a place for developers to add their own personal wishlist. It should only be updated with approval of the project manager after discussion with the lead developers.
Each entry in the road map is made up of four sections. The goal should be a brief description of the what the road map entry will accomplish. The task section should be a list of deliverable items that are specific enough hat they can be documented as completed. The dependencies sections is a list of requirements that must be completed before work can begin on any of the tasks. The status section should include a list of completed tasks or marked as complete as when the goal is met.
General
This section defines the tasks that affect all or most of KiCad or do not fit under as specific part of the code such as the board editor or the schematic editor.
Object Properties and Introspection
Goal:
Provide an object introspection system using properties.
Task:
- Select existing or develop property system.
- Add definable properties to base objects.
- Create introspection framework for manipulating object properties.
- Serialization of properties to and from files and/or other I/O structures.
- Create tool to edit property namespace/object name/name/type/value table.
Dependencies:
- None
Status:
- Postponed to v7
Team:
- Orson
New project and user settings framework
Goal:
Improve management of project and user settings, removing settings that are not associated with design data from the design files.
Task:
- Switch from wxConfig to JSON-based settings files
- Centralize settings file management (new SETTINGS_MANAGER object)
- Add support for versioned settings and automatic migration
- Create new project settings directory
- Migrate settings out of the board file (etc) into new settings files
Dependencies:
- None
Status:
- Complete
Team:
- Jon
Color theme support
Goal:
Support storing color themes in standalone settings files, easy switching between color themes, and a better color editor across all applications.
Task:
- Migrate color settings storage into a unified color theme file
- New color settings GUI that supports managing themes
Dependencies:
Status:
- Complete
Team:
- Jon
String substitution
Goal:
Allow substituting object properties into strings through an escape sequence.
Task:
- Build string substitution spec
- Integrate with object properties system
- Create UI for specifying custom variables
Dependencies:
Status:
- Complete
Team:
- Jeff
Eeschema: Schematic Editor
This section applies to the source code for the Eeschema schematic editor.
Coherent SCHEMATIC Object
Goal:
Clean up the code related to the schematic object(s) into a coherent object for managing and manipulating the schematic that can be used by third party tools and Python scripting.
Task:
- Move handling of root sheet object to SCHEMATIC object.
- Move SCH_SCREENS code into SCH_OBJECT.
- Build and maintain schematic hierarchy in SCHEMATIC object rather than recreating on the fly every time the hierarchical information is required.
- Optionally build and maintain netlist during editing for extended editing features.
- Add any missing functionality to the SCHEMATIC object.
Dependencies:
- None
Status:
- In progress, some portions complete and merged
Team:
- Wayne, Jon
Implement Sweet (S-Expression) Symbol Libraries
Goal:
Make symbol library design more robust and feature rich. Use s-expressions to make component library files more readable.
Task:
- Use sweet component file format for component libraries.
Dependencies:
- None
Status:
- Merged, in testing
Team:
- Wayne
S-Expression File Format
Goal:
Make schematic file format more readable, add new features, and take advantage of the s-expression parser and formatter capability used in Pcbnew.
Task:
- Finalize feature set and file format.
- Discuss the possibility of dropping the unit-less proposal temporarily to get the s-expression file format and SWEET library format implemented without completely rewriting Eeschema.
- Add new s-expression file format to plugin.
Dependencies:
Status:
- Complete, full documentation pending
Team:
- Wayne
Move Common Schematic Code into a Shared Object
Goal:
Refactor all schematic object code so that it can be built into a shared object for use by the schematic editor, Python module, and linked into third party programs.
Task
- Split schematic object code from schematic and component editor code.
- Generate shared object from schematic object code.
- Update build configuration to build schematic and component editors against new schematic shared object.
Dependencies:
- None
Progress:
- Postponed until v7
Team:
- Wayne
Python Support
Goal:
SWIG all schematic low level objects and coherent schematic object to provide Python interface for manipulating schematic objects.
Task:-
- Create SWIG wrappers for all low level schematic, symbol library, and coherent schematic object code.
- Add Python interpreter launcher.
Dependencies:
Status:
- In specification.
Team:
- Seth
ERC Improvements
Goal:
Improve the coverage and usability of the electrical rules checker (ERC).
Task:
- Refactor and clean up the ERC codebase
- Store ERC settings with a project
- Improve ERC UI and UX
- Add new ERC features requested by users
Dependencies:
Status:
- In progress
Team:
- Jon
Port Editing Tools to New Tool Framework
Goal:
Convert all editing tool to new tool framework.
Task:
- Rewrite existing editing tools using the new tool framework.
- Add new capabilities supported by the new tool framework to existing editing tools.
- Remove legacy tool framework.
Dependencies:
- None
Status:
- Complete
Team:
- Jeff
Net Highlighting
Goal: Highlight wires, buses, and junctions when corresponding net in Pcbnew is selected.
Task:
- Add communications link to handle net selection from Pcbnew.
- Implement highlight algorithm for net objects.
- Highlight objects connected to net selected in Pcbnew.
Dependencies:
- None.
Status:
- Complete.
Symbol and Netlist Attributes
Goal:
Provide a method of passing information to other tools via the net list.
Task:
- Add virtual components and attributes to netlist to define properties that can be used by other tools besides the board editor.
- Attributes (properties) are automatically included as part of the new file format.
Dependencies:
Status:
- Complete
Team:
- Jeff
Orthogonal Wire Drag
Goal:
Keep wires and buses orthogonal when dragging a symbol.
Task:
- Add code to new tool framework to allow for orthogonal dragging of symbols.
Dependencies:
Status:
- Not started.
Custom Wire and Bus Attributes
Goal:
Allow for wires and buses to have different widths, colors, and line types.
Task:
- Add code to support custom wire and bus attributes.
- Add user interface element to support changing wire and bus attributes.
Dependencies:
Status:
- Complete
Team:
- Wayne
- Jeff
Connectivity Improvements
Goal:
Support structured buses, real time netlist calculations, and other connectivity improvements.
Task:
- Keep netlist up to date real time.
- Add support for structured bus definitions.
Dependencies:
- None.
Status:
- Complete
Team:
- Jon
Pcbnew: Circuit Board Editor
This section covers the source code of the board editing application Pcbnew.
Push and Shove Router Improvements
Goal:
Add finishing touches to push and shove router.
Task:
- Delete and backspace in idle mode
- Differential pair clearance fixes.
- Differential pair optimizer improvements (recognize differential pairs)
- Persistent differential pair gap/width setting.
- Walk around in drag mode.
- Optimize trace being dragged too. (currently no optimization)
- Auto-finish traces (if time permits)
- Additional optimization pass for spring back algorithm using area-minimization strategy. (improves tightness of routing)
- Restrict optimization area to view port (if user wants to)
- Support 45 degree tuning meanders.
- Respect trace/via locking!
- Keep out zone support.
- Microwave tools to be added as parameterized shapes generated by Python scripts.
- BGA fan out support.
- Drag footprints with traces connected.
Dependencies:
- None.
Status:
- In progress.
Team:
- Tom
- Seth
Selection Filtering
Goal:
Make the selection tool easier for the user to determine which object(s) are being selected by filtering.
Task:
- Provide filtered object selection by adding a third tab to the layer manager or possibly some other UI element to provide filtered selection options.
Dependencies:
Status:
- Stateful selection filter merged
- Object properties selection filter, Postponed to v7
Team:
- Orson
- Jon
Design Rule Check (DRC) Improvements.
Goal:
Create additional DRC tests for improved error checking.
Task:
- Remove floating point code from clearance calculations to prevent rounding errors.
- Add checks for component, silk screen, and mask clearances.
- Add checks for keep out zones.
- Remove DRC related limitations such as no arc or text on copper layers.
- Add option for saving and loading DRC options.
Dependencies:
Progress:
- Complete
Team:
- Tom
- Orson
- Jeff
Linked Objects
Goal:
Provide a way to allow external objects such as footprints to be externally linked in the board file so that changes in the footprint are automatically updated. This will allow a one to many object relationship which can pave the way for reusable board modules.
Task:
- Add externally and internally linked objects to the file format to allow for footprints and/or other board objects to be shared (one to many relationship) instead of only supporting embedded objects (one to one relationship) that can only be edited in place.
Dependencies:
- None.
Status:
- Not started.
Keepout Zones.
Goal:
Add support for keepout zones on boards and footprints.
Task:
- Add keepout support to zone classes.
- Add keepout zone support to board editor.
- Add keepout zone support to library editor.
Dependencies:
- None
Progress:
- Complete.
Clipboard Support
Goal:
Provide clipboard cut and paste for footprints.
Task:
- Clipboard cut and paste to and from clipboard of footprints in footprint editor.
Dependencies:
- None.
Status:
- Complete.
Net Highlighting
Goal:
Highlight rats nest links and/or traces when corresponding net in Eeschema is selected.
Task:
- Add communications link to handle net selection from Eeschema.
- Implement highlight algorithm for objects connected to the selected net.
- Highlight objects connected to net selected in Eeschema
Dependencies:
- None.
Status:
- Complete.
Visibility and Colors Improvements
Goal:
Improve the controls and features of layer and object color / visibility. Specification document
Task:
- Add the concept of "saved views" to store a snapshot of current visibility
- Support setting object opacity independently of copper layer opacity
- Create new appearance widget to replace the current layers manager
Dependencies:
Status:
- Complete
Team:
- Jon
Hatched Zone Filling
Goal:
Currently Pcbnew only supports solid zone files. Add option to fill zones with hatching.
Task:
- Determine zone fill method, required filling code, and file format requirements.
- Add hatch option and hatch configuration to zone dialog.
Dependencies:
- None.
Status:
- Complete.
Board Stack Up Impedance Calculator
Goal:
Provide a calculator to compute trace impedances using a full board stackup. Maybe this should be included in the PCB calculator application.
Task:
- Design a trace impedance calculator that includes full board stackup.
Dependencies:
- None.
Status:
- In progress.
Net Class Improvements
Goal:
Add support for route impedance, color selection, etc in net class object.
Task:
- Determine parameters to add to net class object.
- Implement file parser and formatter changes to support net class object changes.
- Implement tools to work with new net class parameters.
- Create UI elements to configure new net class parameters.
- Update the render tab UI code to view traces by net class.
Dependencies:
Status:
- Complete
Team:
- Jon
- Jeff
Ratsnest Improvements
Goal:
Add support for curved rats and per net color and visibility settings.
Task:
- Implement rat curving to minimize overlapped rats.
- Implement UI code to configure ratsnest color and visibility.
- Update ratsnest code to handle per net color and visibility.
Dependencies:
Status:
- Complete
Team:
- Jon (ratsnest colors and visibility)
DXF Improvements
Goal:
- Allow for anchor point setting and layer mapping support on DXF import and export multiple board layers to a single DXF file.
Task:
- Provide method to select DXF import anchor point.
- Add user interface to allow mapping DXF layers to board layers.
- Modify DXF plotting to export multiple layers to a single file.
Dependencies:
- None.
Status:
- Postponed
Improve Dimension Tool
Goal:
Make dimensions link to objects and change when objects are modified and add basic mechanical constraints.
Task:
- Add code to link dimension to objects.
- Add basic mechanical constraints like linear distance and angle.
Dependencies:
- None.
Status:
- In progress.
Team:
- Tom
Constraint Management System
Goal:
Implement full featured constraint management system to allow for complex board constraints instead of netclass only constraints.
Task:
- Write specification to define requirement of new constraint system.
- Implement new constraint system including file format changes.
- Allow constraints to be defined in schematic editor and passed to board editor via netlist.
- Update netlist file format to support constraints.
- Update DRC to test new constraints.
Dependencies:
- None.
Status
- In specification.
Team:
- Tom
- Jeff
Append Board in Project Mode
Goal:
Allow appending to the board when running Pcbnew in the project mode.
Task:
- Enable append board feature in project mode.
- Extend copy/paste feature to introduce paste special tool to add prefix and/or suffix to nets of pasted/appended objects.
Dependencies:
- None.
Status:
- Not started.
Grid and Auxiliary Origin Improvements
Goal:
Allow reset grid and auxiliary origin without hotkey only. Add support to make all coordinates relative to the plot origin.
Task:
- Add reset grid and auxiliary origin commands to menu entry and/or toolbar button.
- Add code to dialogs to allow coordinates to be specified relative to the plot origin.
Dependencies:
- None.
Status:
- Relative coordinate entry in progress.
Additional Mechanical Layers
Goal:
Add more mechanical layers.
Task:
- Add remaining mechanical layers for a total of 32.
Dependencies:
- None.
Status:
- Not started.
Team:
- Wayne
Layer Renaming
Goal:
Allow mechanical layers to be renamed.
Task:
- Quote layer names in file format to support any printable characters in layer names.
- Add user interface to allow mechanical layers to be renamed.
Dependencies:
- None.
Status:
- Quoted layer names complete.
Team:
- Wayne
Net Ties
Goal:
Add support for net ties.
Task:
- Write net tie design specification.
- Implement board file support for net ties.
- Implement schematic file support for net ties.
- Update ERC and DRC to handle net ties.
- Update netlist to pass net tie information from schematic to board.
- Add user interface support for net ties to editors.
Dependencies:
Status:
- Specification in development
Team:
- Simon
Curved Trace Support
Goal:
Add curved trace support to the board editor.
Task:-
- Add curved trace support to track object code.
- Add support to board file format for curved traces.
- Update zone fill algorithm to support curved fills.
- Update router to support curved traces.
- Update DRC to handle curved traces and fills.
Dependencies:
- None.
Status:
- In Development
Team:
- Seth