Featify
Map your features. Keep your folders.
Featify is a virtual feature layer for your codebase. You declare which files and symbols belong to each feature in a short YAML manifest, and Featify gives you a feature-first view of the code from your editor, without moving a single file.
Early testing phase. Featify is actively being developed and iterated on. Expect rough edges, breaking changes between versions, and features to come and go. Feedback is welcome while the shape of the tool settles.
What you get
- Features view in the Explorer. Every feature, expandable into its members. Click a member to jump to it in the real file.
- Authoring via code actions. Put your cursor on a file, symbol, or selection, open the quick fix menu (
Ctrl+. / Cmd+.), and pick one of: Add File to Feature, Add Symbol to Feature, Add Selection to Feature.
- Drift detection. When a tracked member's content changes, Featify marks the gutter and surfaces a drift indicator above the file. Mark the feature reviewed to walk each drifted member and either accept the new baseline or drop it.
- Navigate within a feature. Press
Ctrl+Alt+L (Cmd+Alt+L on macOS) to jump between members of the active feature.
- Open as Buffer. Read every member of a feature stitched into one scrollable document.
- Status bar. Shows which feature the current file belongs to. Click to reveal in the tree.
Getting started
- Install the extension.
- Open a TypeScript project.
- Scaffold a feature with Featify: Create Feature… from the command palette, then use code actions on any file or symbol to add members to it.
You never need to hand-write YAML, but if you want to scaffold a first pass with a coding assistant or look up the schema, full docs live at featify.dev/docs.
name: CreatePost
description: Authoring a new blog post
members:
- file: app/controllers/posts_controller.ts
symbol:
kind: method
name: store
parent: PostsController
- file: app/validators/post.ts
symbol:
kind: variable
name: createPostValidator
- file: database/migrations/1776127606248_create_posts_table.ts
- file: app/models/post.ts
symbol:
kind: class
name: Post
Symbol kinds: class, method, function, variable, interface, type. Omit the symbol block to track a whole file. Use lines: [start, end] for snippets that aren't a named symbol.
Configuration
All settings live under the featify.* namespace.
| Setting |
Default |
Purpose |
featify.featuresDir |
.featify/features |
Directory containing feature YAML manifests, relative to the workspace root. |
featify.tsconfigPath |
tsconfig.json |
Path to the tsconfig.json for the project Featify is observing. |
featify.driftCodeLens.enabled |
true |
Show the drift indicator at the top of files that contain drifted members. |
featify.staleDecorations.enabled |
true |
Draw the warning gutter next to drifted members. |
featify.statusBar.enabled |
true |
Show the Featify status bar item with the active feature. |
featify.autoActivateSingleFeature |
true |
Automatically mark a feature as active when the open file belongs to exactly one. |
Links